/* 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 namespace Ui { class RpWindow; } // namespace Ui namespace Ui::Platform { struct SeparateTitleControls; } // namespace Ui::Platform namespace Media::View { inline constexpr auto kMaximizedIconOpacity = 0.6; inline constexpr auto kNormalIconOpacity = 0.9; inline constexpr auto kOverBackgroundOpacity = 0.15; } // namespace Media::View namespace Platform { class OverlayWidgetHelper { public: virtual ~OverlayWidgetHelper() = default; virtual void orderWidgets() { } [[nodiscard]] virtual bool skipTitleHitTest(QPoint position) { return false; } [[nodiscard]] virtual rpl::producer<> controlsActivations() { return rpl::never<>(); } virtual void beforeShow(bool fullscreen) { } virtual void afterShow(bool fullscreen) { } virtual void notifyFileDialogShown(bool shown) { } virtual void minimize(not_null window); virtual void clearState() { } virtual void setControlsOpacity(float64 opacity) { } }; [[nodiscard]] std::unique_ptr CreateOverlayWidgetHelper( not_null window, Fn maximize); class DefaultOverlayWidgetHelper final : public OverlayWidgetHelper { public: DefaultOverlayWidgetHelper( not_null window, Fn maximize); ~DefaultOverlayWidgetHelper(); void orderWidgets() override; bool skipTitleHitTest(QPoint position) override; rpl::producer<> controlsActivations() override; void beforeShow(bool fullscreen) override; void clearState() override; void setControlsOpacity(float64 opacity) override; private: class Buttons; const not_null _buttons; const std::unique_ptr _controls; }; } // namespace Platform // Platform dependent implementations. #ifdef Q_OS_MAC #include "platform/mac/overlay_widget_mac.h" #elif defined Q_OS_UNIX // Q_OS_MAC #include "platform/linux/overlay_widget_linux.h" #elif defined Q_OS_WIN // Q_OS_MAC || Q_OS_UNIX #include "platform/win/overlay_widget_win.h" #endif // Q_OS_MAC || Q_OS_UNIX || Q_OS_WIN