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