File indexing completed on 2024-05-12 16:01:43

0001 /*
0002  *  SPDX-FileCopyrightText: 2006 Boudewijn Rempt <boud@valdyas.org>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 #ifndef KIS_ZOOM_MANAGER
0007 #define KIS_ZOOM_MANAGER
0008 
0009 #include <QObject>
0010 #include <QPointer>
0011 
0012 #include <klocalizedstring.h>
0013 
0014 #include <KoZoomMode.h>
0015 #include <KoZoomAction.h>
0016 #include <KoZoomHandler.h>
0017 #include <KoZoomController.h>
0018 #include "kis_signal_auto_connection.h"
0019 #include "kis_signal_compressor.h"
0020 
0021 #include "KisView.h"
0022 
0023 class KoZoomHandler;
0024 class KoZoomAction;
0025 class KoRuler;
0026 class KoUnit;
0027 class KoCanvasController;
0028 class QPoint;
0029 
0030 #include "kritaui_export.h"
0031 
0032 /**
0033  *  The zoom manager handles all user actions related to zooming
0034  *  and unzooming. The actual computation of zoom levels and things
0035  *  are the job of KoZoomHandler or its descendants
0036  */
0037 class KRITAUI_EXPORT KisZoomManager : public QObject
0038 {
0039 
0040     Q_OBJECT
0041 
0042 public:
0043 
0044     KisZoomManager(QPointer<KisView> view, KoZoomHandler*, KoCanvasController *);
0045     ~KisZoomManager() override;
0046 
0047     void updateScreenResolution(QWidget *parentWidget);
0048 
0049     void setup(KisKActionCollection * actionCollection);
0050     void updateGuiAfterDocumentSize();
0051     KoZoomController * zoomController() const {
0052         return m_zoomController;
0053     }
0054 
0055     void updateImageBoundsSnapping();
0056     void updateCurrentZoomResource();
0057 
0058     QWidget *zoomActionWidget() const;
0059 
0060     KoRuler *horizontalRuler() const;
0061     KoRuler *verticalRuler() const;
0062 
0063     qreal zoom() const;
0064 
0065     qreal resolutionX() const;
0066     qreal resolutionY() const;
0067 
0068     void updateZoomMarginSize();
0069 
0070 public Q_SLOTS:
0071 
0072     void slotZoomChanged(KoZoomMode::Mode mode, qreal zoom);
0073     void slotZoomLevelsChanged();
0074     void slotScrollAreaSizeChanged();
0075     void setShowRulers(bool show);
0076     void setRulersTrackMouse(bool value);
0077     void mousePositionChanged(const QPoint &viewPos);
0078     void changeCanvasMappingMode(bool canvasMappingMode);
0079     void pageOffsetChanged();
0080     void zoomTo100();
0081     void slotToggleZoomToFit();
0082     void applyRulersUnit(const KoUnit &baseUnit);
0083     void setMinMaxZoom();
0084     void setRulersPixelMultiple2(bool enabled);
0085 
0086 
0087 private Q_SLOTS:
0088     void slotUpdateGuiAfterZoomChange();
0089 
0090 private:
0091     void updateMouseTrackingConnections();
0092 
0093 private:
0094 
0095     QPointer<KisView> m_view;
0096     KoZoomHandler * m_zoomHandler {nullptr};
0097     KoCanvasController *m_canvasController {nullptr};
0098     KoZoomController *m_zoomController {nullptr};
0099     KoRuler * m_horizontalRuler {nullptr};
0100     KoRuler * m_verticalRuler {nullptr};
0101     KoZoomAction * m_zoomAction {nullptr};
0102     QPointer<QWidget> m_zoomActionWidget;
0103     QPoint m_rulersOffset;
0104     KisSignalAutoConnectionsStore m_mouseTrackingConnections;
0105     qreal m_physicalDpiX {72.0};
0106     qreal m_physicalDpiY {72.0};
0107     qreal m_devicePixelRatio {1.0};
0108     bool m_canvasMappingMode {false};
0109     KisSignalCompressor m_guiUpdateCompressor;
0110     qreal m_previousZoomLevel {1.0};
0111     KoZoomMode::Mode m_previousZoomMode;
0112     QPointF m_previousZoomPoint;
0113 };
0114 
0115 
0116 #endif