File indexing completed on 2024-05-19 04:29:08
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 slotZoomToFit(); 0082 void slotZoomToFitWidth(); 0083 void slotZoomToFitHeight(); 0084 void slotToggleZoomToFit(); 0085 void applyRulersUnit(const KoUnit &baseUnit); 0086 void setMinMaxZoom(); 0087 void setRulersPixelMultiple2(bool enabled); 0088 0089 0090 private Q_SLOTS: 0091 void slotUpdateGuiAfterZoomChange(); 0092 0093 private: 0094 void updateMouseTrackingConnections(); 0095 0096 private: 0097 0098 QPointer<KisView> m_view; 0099 KoZoomHandler * m_zoomHandler {nullptr}; 0100 KoCanvasController *m_canvasController {nullptr}; 0101 KoZoomController *m_zoomController {nullptr}; 0102 KoRuler * m_horizontalRuler {nullptr}; 0103 KoRuler * m_verticalRuler {nullptr}; 0104 KoZoomAction * m_zoomAction {nullptr}; 0105 QPointer<QWidget> m_zoomActionWidget; 0106 QPoint m_rulersOffset; 0107 KisSignalAutoConnectionsStore m_mouseTrackingConnections; 0108 qreal m_physicalDpiX {72.0}; 0109 qreal m_physicalDpiY {72.0}; 0110 qreal m_devicePixelRatio {1.0}; 0111 bool m_canvasMappingMode {false}; 0112 KisSignalCompressor m_guiUpdateCompressor; 0113 qreal m_previousZoomLevel {1.0}; 0114 KoZoomMode::Mode m_previousZoomMode; 0115 QPointF m_previousZoomPoint; 0116 }; 0117 0118 0119 #endif