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