/* 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 #include "window/window_title.h" #include "window/window_controls_layout.h" #include "base/object_ptr.h" namespace style { struct WindowTitle; } // namespace style namespace Ui { class IconButton; class PlainShadow; } // namespace Ui namespace Window { class TitleWidgetQt : public TitleWidget { public: TitleWidgetQt(QWidget *parent); ~TitleWidgetQt(); void init() override; protected: void paintEvent(QPaintEvent *e) override; void resizeEvent(QResizeEvent *e) override; void mousePressEvent(QMouseEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; bool eventFilter(QObject *obj, QEvent *e) override; private: void windowStateChanged(Qt::WindowState state = Qt::WindowNoState); void visibleChanged(bool visible); void updateWindowExtents(); void updateButtonsState(); void updateControlsPosition(); void updateControlsPositionBySide( const std::vector &controls, bool right); void toggleFramelessWindow(bool enabled); bool hasShadow() const; int getResizeArea(Qt::Edge edge) const; Qt::Edges edgesFromPos(const QPoint &pos); void updateCursor(Qt::Edges edges); void restoreCursor(); bool startMove(); bool startResize(Qt::Edges edges); const style::WindowTitle &_st; object_ptr _minimize; object_ptr _maximizeRestore; object_ptr _close; object_ptr _shadow; bool _maximizedState = false; bool _activeState = false; bool _windowWasFrameless = false; bool _cursorOverriden = false; bool _extentsSet = false; bool _pressedForMove = false; crl::time _pressedForMoveTime = 0; QPoint _pressedForMovePoint; }; } // namespace Window