/* This file is part of Telegram Desktop, the official desktop application for the Telegram messaging service. For license and copyright information please follow this link: https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #pragma once class Painter; class QOpenGLFunctions; namespace Calls { class GroupCall; } // namespace Calls namespace Calls::Group { class Members; class Viewport; class MessagesUi; } // namespace Calls::Group namespace ChatHelpers { class Show; } // namespace ChatHelpers namespace Data { class GroupCall; struct MessageReactionsTopPaid; } // namespace Data namespace Ui { class RpWidgetWrap; } // namespace Ui namespace Ui::GL { enum class Backend; } // namespace Ui::GL namespace Media::View { [[nodiscard]] auto TopVideoStreamDonors(not_null call) -> rpl::producer>; class VideoStream final { public: VideoStream( not_null parent, not_null borrowedRp, bool borrowedOpenGL, Ui::GL::Backend backend, std::shared_ptr show, std::shared_ptr call, QString callLinkSlug, MsgId callJoinMessageId); ~VideoStream(); [[nodiscard]] not_null call() const; [[nodiscard]] rpl::producer<> closeRequests() const; void setVolume(float64 volume); void updateGeometry(int x, int y, int width, int height); void toggleCommentsOn(rpl::producer shown); void ensureBorrowedRenderer(QOpenGLFunctions &f); void borrowedPaint(QOpenGLFunctions &f); void ensureBorrowedRenderer(); void borrowedPaint(Painter &p, const QRegion &clip); [[nodiscard]] rpl::lifetime &lifetime(); private: class Delegate; class Loading; void setupVideo(); void setupMembers(); void setupMessages(); rpl::variable _commentsShown; std::shared_ptr _show; std::unique_ptr _delegate; std::unique_ptr _loading; std::unique_ptr _call; std::unique_ptr _members; std::unique_ptr _viewport; std::unique_ptr _messages; rpl::event_stream<> _closeRequests; rpl::lifetime _lifetime; }; } // namespace Media::View