File indexing completed on 2024-05-26 04:32:37
0001 /* 0002 * SPDX-FileCopyrightText: 2009 Cyrille Berger <cberger@cberger.net> 0003 * SPDX-FileCopyrightText: 2021 Deif Lou <ginoba@gmail.com> 0004 * 0005 * SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #ifndef _OVERVIEW_DOCK_H_ 0009 #define _OVERVIEW_DOCK_H_ 0010 0011 #include <QPointer> 0012 #include <QDockWidget> 0013 #include <QVariantAnimation> 0014 0015 #include <KoCanvasObserverBase.h> 0016 #include <kis_canvas2.h> 0017 0018 class QVBoxLayout; 0019 class QHBoxLayout; 0020 class QToolButton; 0021 class OverviewWidget; 0022 class KisAngleSelector; 0023 0024 class OverviewDockerDock : public QDockWidget, public KoCanvasObserverBase { 0025 Q_OBJECT 0026 public: 0027 OverviewDockerDock(); 0028 ~OverviewDockerDock() override; 0029 QString observerName() override { return "OverviewDockerDock"; } 0030 void setCanvas(KoCanvasBase *canvas) override; 0031 void unsetCanvas() override; 0032 0033 public Q_SLOTS: 0034 void mirrorUpdateIcon(); 0035 void rotateCanvasView(qreal rotation); 0036 void updateSlider(); 0037 void setPinControls(bool pin); 0038 0039 protected: 0040 void resizeEvent(QResizeEvent*) override; 0041 void enterEvent(QEvent*) override; 0042 void leaveEvent(QEvent*) override; 0043 bool event(QEvent *e) override; 0044 bool eventFilter(QObject *o, QEvent *e) override; 0045 0046 private: 0047 static constexpr int showControlsTimerDuration {500}; 0048 // How much the cursor has to move to prevent the showing animation 0049 static constexpr double showControlsAreaRadius {4.0}; 0050 static constexpr double showControlsAnimationDuration {150.0}; 0051 static constexpr double touchDragDistance {8.0}; 0052 static constexpr double touchDragDistanceSquared {touchDragDistance * touchDragDistance}; 0053 0054 QVBoxLayout *m_controlsLayout {nullptr}; 0055 QHBoxLayout *m_controlsSecondRowLayout {nullptr}; 0056 QWidget *m_page {nullptr}; 0057 OverviewWidget *m_overviewWidget {nullptr}; 0058 QWidget *m_controlsContainer {nullptr}; 0059 QWidget *m_zoomSlider {nullptr}; 0060 KisAngleSelector *m_rotateAngleSelector {nullptr}; 0061 QToolButton *m_mirrorCanvas {nullptr}; 0062 QToolButton *m_pinControlsButton {nullptr}; 0063 QPointer<KisCanvas2> m_canvas; 0064 bool m_pinControls {true}; 0065 bool m_cursorIsHover {false}; 0066 bool m_isTouching {false}; 0067 bool m_isDraggingWithTouch {false}; 0068 int m_touchPointId {0}; 0069 QPointF m_lastTouchPos; 0070 mutable QVariantAnimation m_showControlsAnimation; 0071 mutable QTimer m_showControlsTimer; 0072 mutable bool m_areControlsHidden {false}; 0073 QPointF m_lastOverviewMousePos; 0074 double m_cumulatedMouseDistanceSquared {0.0}; 0075 0076 void layoutMainWidgets(); 0077 0078 private Q_SLOTS: 0079 void showControls(int delay) const; 0080 void hideControls(int delay) const; 0081 0082 void on_overviewWidget_signalDraggingStarted(); 0083 void on_overviewWidget_signalDraggingFinished(); 0084 }; 0085 0086 0087 #endif