Krita Source Code Documentation
Loading...
Searching...
No Matches
KisZoomManager Class Reference

#include <kis_zoom_manager.h>

+ Inheritance diagram for KisZoomManager:

Public Slots

void applyRulersUnit (const KoUnit &baseUnit)
 
void mousePositionChanged (const QPoint &viewPos)
 
void setRulersPixelMultiple2 (bool enabled)
 
void setRulersTrackMouse (bool value)
 
void setShowRulers (bool show)
 
void slotToggleZoomToFit ()
 
void slotZoomIn ()
 
void slotZoomOut ()
 
void slotZoomToFit ()
 
void slotZoomToFitHeight ()
 
void slotZoomToFitWidth ()
 
void zoomTo100 ()
 

Public Member Functions

KoRulerhorizontalRuler () const
 
 KisZoomManager (QPointer< KisView > view, KoZoomHandler *, KoCanvasController *)
 
void setup (KisKActionCollection *actionCollection)
 
void syncOnImageResolutionChange ()
 
void updateImageBoundsSnapping ()
 
KoRulerverticalRuler () const
 
KoZoomActionzoomAction () const
 
QWidget * zoomActionWidget () const
 
 ~KisZoomManager () override
 

Private Slots

void slotConfigChanged ()
 
void slotUpdateGuiAfterDocumentRectChanged ()
 
void slotUpdateGuiAfterZoomChange ()
 

Private Member Functions

void updateCurrentZoomResource ()
 
void updateMouseTrackingConnections ()
 

Private Attributes

QRect m_cachedRulersRect
 
KoCanvasControllerm_canvasController {nullptr}
 
KisSignalCompressor m_documentRectChangedCompressor
 
KoRulerm_horizontalRuler {nullptr}
 
KisSignalAutoConnectionsStore m_mouseTrackingConnections
 
qreal m_previousZoomLevel {1.0}
 
KoZoomMode::Mode m_previousZoomMode
 
QPointF m_previousZoomPoint
 
KoRulerm_verticalRuler {nullptr}
 
QPointer< KisViewm_view
 
KoZoomActionm_zoomAction {nullptr}
 
QPointer< QWidget > m_zoomActionWidget
 
KisSignalCompressor m_zoomChangedCompressor
 
KoZoomHandlerm_zoomHandler {nullptr}
 

Detailed Description

The zoom manager handles all user actions related to zooming and unzooming. The actual computation of zoom levels and things are the job of KoZoomHandler or its descendants

Definition at line 36 of file kis_zoom_manager.h.

Constructor & Destructor Documentation

◆ KisZoomManager()

KisZoomManager::KisZoomManager ( QPointer< KisView > view,
KoZoomHandler * zoomHandler,
KoCanvasController * canvasController )

Definition at line 43 of file kis_zoom_manager.cc.

45 : m_view(view)
46 , m_zoomHandler(zoomHandler)
47 , m_canvasController(canvasController)
51 , m_previousZoomPoint(QPointF(0.0, 0.0))
52{
53}
KoZoomHandler * m_zoomHandler
KoZoomMode::Mode m_previousZoomMode
KisSignalCompressor m_zoomChangedCompressor
QPointF m_previousZoomPoint
KisSignalCompressor m_documentRectChangedCompressor
QPointer< KisView > m_view
KoCanvasController * m_canvasController
@ ZOOM_PAGE
zoom page
Definition KoZoomMode.h:25
static constexpr int guiUpdateDelay

◆ ~KisZoomManager()

KisZoomManager::~KisZoomManager ( )
override

Definition at line 55 of file kis_zoom_manager.cc.

56{
57 if (m_zoomActionWidget && !m_zoomActionWidget->parent()) {
58 delete m_zoomActionWidget;
59 }
60}
QPointer< QWidget > m_zoomActionWidget

References m_zoomActionWidget.

Member Function Documentation

◆ applyRulersUnit

void KisZoomManager::applyRulersUnit ( const KoUnit & baseUnit)
slot

Definition at line 226 of file kis_zoom_manager.cc.

227{
228 if (m_view && m_view->image()) {
229 m_horizontalRuler->setUnit(KoUnit(baseUnit.type(), m_view->image()->xRes()));
230 m_verticalRuler->setUnit(KoUnit(baseUnit.type(), m_view->image()->yRes()));
231 }
232 if (m_view->viewManager()) {
233 m_view->viewManager()->guidesManager()->setUnitType(baseUnit.type());
234 }
235}
KoRuler * m_horizontalRuler
KoRuler * m_verticalRuler
void setUnit(const KoUnit &unit)
Set the unit of the ruler.
Definition KoRuler.cpp:843
KoUnit::Type type() const
Definition KoUnit.h:118

References m_horizontalRuler, m_verticalRuler, m_view, KoRuler::setUnit(), and KoUnit::type().

◆ horizontalRuler()

KoRuler * KisZoomManager::horizontalRuler ( ) const

Definition at line 194 of file kis_zoom_manager.cc.

195{
196 return m_horizontalRuler;
197}

References m_horizontalRuler.

◆ mousePositionChanged

void KisZoomManager::mousePositionChanged ( const QPoint & viewPos)
slot

Definition at line 204 of file kis_zoom_manager.cc.

205{
206 QPoint pt = viewPos - m_cachedRulersRect.topLeft();
207
210}
void updateMouseCoordinate(int coordinate)
Definition KoRuler.cpp:921

References m_cachedRulersRect, m_horizontalRuler, m_verticalRuler, and KoRuler::updateMouseCoordinate().

◆ setRulersPixelMultiple2

void KisZoomManager::setRulersPixelMultiple2 ( bool enabled)
slot

Definition at line 237 of file kis_zoom_manager.cc.

238{
241 if (m_view->viewManager()) {
242 m_view->viewManager()->guidesManager()->setRulersMultiple2(enabled);
243 }
244}
void setUnitPixelMultiple2(bool enabled)
Definition KoRuler.cpp:1368

References m_horizontalRuler, m_verticalRuler, m_view, and KoRuler::setUnitPixelMultiple2().

◆ setRulersTrackMouse

void KisZoomManager::setRulersTrackMouse ( bool value)
slot

◆ setShowRulers

void KisZoomManager::setShowRulers ( bool show)
slot

Definition at line 212 of file kis_zoom_manager.cc.

213{
214 m_horizontalRuler->setVisible(show);
215 m_verticalRuler->setVisible(show);
217}

References m_horizontalRuler, m_verticalRuler, and updateMouseTrackingConnections().

◆ setup()

void KisZoomManager::setup ( KisKActionCollection * actionCollection)

Definition at line 62 of file kis_zoom_manager.cc.

63{
64
65 KisImageWSP image = m_view->image();
66 if (!image) return;
67
68 m_zoomAction = new KoZoomAction(i18n("Zoom"), this);
70
72 [this](KoZoomMode::Mode mode, qreal zoom) {
73 m_canvasController->setZoom(mode, zoom);
74 });
77
78 // Put the canvascontroller in a layout so it resizes with us
79 QGridLayout * layout = new QGridLayout(m_view);
80 layout->setSpacing(0);
81 layout->setContentsMargins(0, 0, 0, 0);
82
83 m_view->document()->setUnit(KoUnit(KoUnit::Pixel));
84
85 m_horizontalRuler = new KoRuler(m_view, Qt::Horizontal, m_zoomHandler);
88 m_horizontalRuler->setVisible(false); // this prevents the rulers from flashing on to off when a new document is created
89
90 m_verticalRuler = new KoRuler(m_view, Qt::Vertical, m_zoomHandler);
93 m_verticalRuler->setVisible(false);
94
95
96 QAction *rulerAction = actionCollection->action("ruler_pixel_multiple2");
97 if (m_view->document()->guidesConfig().rulersMultiple2()) {
100 }
101 QList<QAction*> unitActions = m_view->createChangeUnitActions(true);
102 unitActions.append(rulerAction);
105
106 connect(m_view->document(), SIGNAL(unitChanged(KoUnit)), SLOT(applyRulersUnit(KoUnit)));
107 connect(rulerAction, SIGNAL(toggled(bool)), SLOT(setRulersPixelMultiple2(bool)));
108 applyRulersUnit(m_view->document()->unit());
109
110 layout->addWidget(m_horizontalRuler, 0, 1);
111 layout->addWidget(m_verticalRuler, 1, 0);
112 layout->addWidget(static_cast<KoCanvasControllerWidget*>(m_canvasController), 1, 1);
113
119 this,
123 this,
125
129}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
static KisConfigNotifier * instance()
void configChanged(void)
QAction * action(int index) const
void slotUpdateGuiAfterZoomChange()
void slotUpdateGuiAfterDocumentRectChanged()
void applyRulersUnit(const KoUnit &baseUnit)
void setRulersPixelMultiple2(bool enabled)
KoZoomAction * m_zoomAction
void documentRectInWidgetPixelsChanged(const QRectF &documentRectInWidgetPixels)
void zoomStateChanged(const KoZoomState &zoomState)
QPointer< KoCanvasControllerProxyObject > proxyObject
virtual KoZoomState zoomState() const =0
virtual void setZoom(KoZoomMode::Mode mode, qreal zoom)=0
void createGuideToolConnection(KoCanvasBase *canvas)
Definition KoRuler.cpp:1359
void setPopupActionList(const QList< QAction * > &popupActionList)
Definition KoRuler.cpp:1054
@ Pixel
Definition KoUnit.h:82
QWidget * createWidget(QWidget *parent) override
void zoomChanged(KoZoomMode::Mode mode, qreal zoom)
void slotZoomStateChanged(const KoZoomState &zoomState)

References KisKActionCollection::action(), applyRulersUnit(), KisConfigNotifier::configChanged(), connect(), KoRuler::createGuideToolConnection(), KoZoomAction::createWidget(), KoCanvasControllerProxyObject::documentRectInWidgetPixelsChanged(), KisConfigNotifier::instance(), m_canvasController, m_documentRectChangedCompressor, m_horizontalRuler, m_verticalRuler, m_view, m_zoomAction, m_zoomActionWidget, m_zoomChangedCompressor, m_zoomHandler, KoUnit::Pixel, KoCanvasController::proxyObject, KoRuler::setPopupActionList(), setRulersPixelMultiple2(), KoRuler::setShowMousePosition(), KoRuler::setUnitPixelMultiple2(), KoCanvasController::setZoom(), slotConfigChanged(), slotUpdateGuiAfterDocumentRectChanged(), slotUpdateGuiAfterZoomChange(), KoZoomAction::slotZoomStateChanged(), KisSignalCompressor::start(), KisSignalCompressor::timeout(), KoZoomAction::zoomChanged(), KoCanvasController::zoomState(), and KoCanvasControllerProxyObject::zoomStateChanged().

◆ slotConfigChanged

void KisZoomManager::slotConfigChanged ( )
privateslot

Definition at line 340 of file kis_zoom_manager.cc.

341{
342 KisConfig cfg(true);
343
344 KisCoordinatesConverter *converter =
346 KIS_ASSERT_RECOVER_RETURN(converter);
347
348 const int oldZoomMarginSize = converter->zoomMarginSize();
349 if (oldZoomMarginSize != cfg.zoomMarginSize()) {
350 converter->setZoomMarginSize(cfg.zoomMarginSize());
351 if (converter->zoomMode() != KoZoomMode::ZOOM_CONSTANT) {
352 m_canvasController->setZoom(converter->zoomMode(), converter->zoom());
353 }
354 }
355}
KoZoomMode::Mode zoomMode() const
int zoomMarginSize() const
void setZoomMarginSize(int size)
void zoom(qreal *zoomX, qreal *zoomY) const override
@ ZOOM_CONSTANT
zoom x %
Definition KoZoomMode.h:24
#define KIS_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:75

References KIS_ASSERT_RECOVER_RETURN, m_canvasController, m_zoomHandler, KoCanvasController::setZoom(), KoZoomHandler::setZoomMarginSize(), KoZoomHandler::zoom(), KoZoomMode::ZOOM_CONSTANT, KoZoomHandler::zoomMarginSize(), KisConfig::zoomMarginSize(), and KoZoomHandler::zoomMode().

◆ slotToggleZoomToFit

◆ slotUpdateGuiAfterDocumentRectChanged

void KisZoomManager::slotUpdateGuiAfterDocumentRectChanged ( )
privateslot

Definition at line 274 of file kis_zoom_manager.cc.

275{
276 const QRectF widgetRect = m_view->canvasBase()->coordinatesConverter()->imageRectInWidgetPixels();
277 const QRect alignedWidgetRect = widgetRect.toAlignedRect();
278
279 if (m_cachedRulersRect == alignedWidgetRect) return;
280
282
283 // A bit weird conversion: convert the widget rect as if it were unrotated
284 const QRectF documentRect = m_view->canvasBase()->coordinatesConverter()->flakeToDocument(widgetRect);
285 const QSize documentSize = documentRect.toAlignedRect().size();
286
287 m_horizontalRuler->setRulerLength(documentSize.width());
288 m_verticalRuler->setRulerLength(documentSize.height());
289
290 m_horizontalRuler->setOffset(alignedWidgetRect.x());
291 m_verticalRuler->setOffset(alignedWidgetRect.y());
292
293 m_cachedRulersRect = alignedWidgetRect;
294}
KoUnit unit() const
The ruler's unit.
Definition KoRuler.cpp:838
void setRulerLength(qreal length)
Sets the length of the ruler to length in points (pt)
Definition KoRuler.cpp:865
void setOffset(int offset)
Definition KoRuler.cpp:859

References applyRulersUnit(), m_cachedRulersRect, m_horizontalRuler, m_verticalRuler, m_view, KoRuler::setOffset(), KoRuler::setRulerLength(), and KoRuler::unit().

◆ slotUpdateGuiAfterZoomChange

void KisZoomManager::slotUpdateGuiAfterZoomChange ( )
privateslot

Definition at line 246 of file kis_zoom_manager.cc.

247{
248 const qreal zoomValue = m_view->canvasBase()->coordinatesConverter()->zoom();
249 const qreal humanZoom = zoomValue * 100.0;
250
251 // XXX: KOMVC -- this is very irritating in MDI mode
252
253 if (m_view->viewManager()) {
254 m_view->viewManager()->
255 showFloatingMessage(
256 i18nc("floating message about zoom", "Zoom: %1 %",
258 QIcon(), 500, KisFloatingMessage::Low, Qt::AlignCenter);
259 }
260
262}
void updateCurrentZoomResource()
QString KRITAIMAGE_EXPORT prettyFormatReal(qreal value)

References KisFloatingMessage::Low, m_view, KritaUtils::prettyFormatReal(), and updateCurrentZoomResource().

◆ slotZoomIn

void KisZoomManager::slotZoomIn ( )
slot

Definition at line 301 of file kis_zoom_manager.cc.

302{
304}
virtual void zoomIn(const KoViewTransformStillPoint &stillPoint)=0
zooms in keeping stillPoint not moved.

References m_canvasController, and KoCanvasController::zoomIn().

◆ slotZoomOut

void KisZoomManager::slotZoomOut ( )
slot

Definition at line 306 of file kis_zoom_manager.cc.

307{
309}
virtual void zoomOut(const KoViewTransformStillPoint &stillPoint)=0
zooms out keeping stillPoint not moved.

References m_canvasController, and KoCanvasController::zoomOut().

◆ slotZoomToFit

void KisZoomManager::slotZoomToFit ( )
slot

◆ slotZoomToFitHeight

void KisZoomManager::slotZoomToFitHeight ( )
slot

◆ slotZoomToFitWidth

void KisZoomManager::slotZoomToFitWidth ( )
slot

◆ syncOnImageResolutionChange()

void KisZoomManager::syncOnImageResolutionChange ( )

◆ updateCurrentZoomResource()

void KisZoomManager::updateCurrentZoomResource ( )
private

Definition at line 166 of file kis_zoom_manager.cc.

167{
168 const qreal effectiveZoom =
169 m_view->canvasBase()->coordinatesConverter()->effectiveZoom();
170 const qreal effectivePhysicalZoom =
171 m_view->canvasBase()->coordinatesConverter()->effectivePhysicalZoom();
172
173 m_view->canvasBase()->resourceManager()->setResource(KoCanvasResource::EffectiveZoom, effectiveZoom);
174 m_view->canvasBase()->resourceManager()->setResource(KoCanvasResource::EffectivePhysicalZoom, effectivePhysicalZoom);
175}
@ EffectiveZoom
-Used only by painting tools for non-displaying purposes
@ EffectivePhysicalZoom
-Used by tool for displaying purposes

References KoCanvasResource::EffectivePhysicalZoom, KoCanvasResource::EffectiveZoom, and m_view.

◆ updateImageBoundsSnapping()

void KisZoomManager::updateImageBoundsSnapping ( )

Definition at line 131 of file kis_zoom_manager.cc.

132{
133 const QRectF docRect = m_view->canvasBase()->coordinatesConverter()->imageRectInDocumentPixels();
134 const QPointF docCenter = docRect.center();
135
136 KoSnapGuide *snapGuide = m_view->canvasBase()->snapGuide();
137
138 {
139 KisSnapLineStrategy *boundsSnap =
141
142 boundsSnap->addLine(Qt::Horizontal, docRect.y());
143 boundsSnap->addLine(Qt::Horizontal, docRect.bottom());
144 boundsSnap->addLine(Qt::Vertical, docRect.x());
145 boundsSnap->addLine(Qt::Vertical, docRect.right());
146
148 }
149
150 {
151 KisSnapLineStrategy *centerSnap =
153
154 centerSnap->addLine(Qt::Horizontal, docCenter.y());
155 centerSnap->addLine(Qt::Vertical, docCenter.x());
156
158 }
159}
void addLine(Qt::Orientation orientation, qreal pos)
@ DocumentBoundsSnapping
Definition KoSnapGuide.h:57
@ DocumentCenterSnapping
Definition KoSnapGuide.h:58
void overrideSnapStrategy(Strategy type, KoSnapStrategy *strategy)

References KisSnapLineStrategy::addLine(), KoSnapGuide::DocumentBoundsSnapping, KoSnapGuide::DocumentCenterSnapping, m_view, and KoSnapGuide::overrideSnapStrategy().

◆ updateMouseTrackingConnections()

void KisZoomManager::updateMouseTrackingConnections ( )
private

Definition at line 177 of file kis_zoom_manager.cc.

178{
179 bool value = m_horizontalRuler->isVisible() &&
180 m_verticalRuler->isVisible() &&
183
185
186 if (value) {
188 SIGNAL(canvasMousePositionChanged(QPoint)),
189 this,
190 SLOT(mousePositionChanged(QPoint)));
191 }
192}
void addConnection(Sender sender, Signal signal, Receiver receiver, Method method, Qt::ConnectionType type=Qt::AutoConnection)
KisSignalAutoConnectionsStore m_mouseTrackingConnections
void mousePositionChanged(const QPoint &viewPos)
bool showMousePosition() const
Definition KoRuler.cpp:935

References KisSignalAutoConnectionsStore::addConnection(), KisSignalAutoConnectionsStore::clear(), m_canvasController, m_horizontalRuler, m_mouseTrackingConnections, m_verticalRuler, mousePositionChanged(), KoCanvasController::proxyObject, KoRuler::showMousePosition(), and value().

◆ verticalRuler()

KoRuler * KisZoomManager::verticalRuler ( ) const

Definition at line 199 of file kis_zoom_manager.cc.

200{
201 return m_verticalRuler;
202}

References m_verticalRuler.

◆ zoomAction()

KoZoomAction * KisZoomManager::zoomAction ( ) const

Definition at line 264 of file kis_zoom_manager.cc.

265{
266 return m_zoomAction;
267}

References m_zoomAction.

◆ zoomActionWidget()

QWidget * KisZoomManager::zoomActionWidget ( ) const

Definition at line 269 of file kis_zoom_manager.cc.

270{
271 return m_zoomActionWidget;
272}

References m_zoomActionWidget.

◆ zoomTo100

void KisZoomManager::zoomTo100 ( )
slot

Member Data Documentation

◆ m_cachedRulersRect

QRect KisZoomManager::m_cachedRulersRect
private

Definition at line 92 of file kis_zoom_manager.h.

◆ m_canvasController

KoCanvasController* KisZoomManager::m_canvasController {nullptr}
private

Definition at line 87 of file kis_zoom_manager.h.

87{nullptr};

◆ m_documentRectChangedCompressor

KisSignalCompressor KisZoomManager::m_documentRectChangedCompressor
private

Definition at line 96 of file kis_zoom_manager.h.

◆ m_horizontalRuler

KoRuler* KisZoomManager::m_horizontalRuler {nullptr}
private

Definition at line 88 of file kis_zoom_manager.h.

88{nullptr};

◆ m_mouseTrackingConnections

KisSignalAutoConnectionsStore KisZoomManager::m_mouseTrackingConnections
private

Definition at line 93 of file kis_zoom_manager.h.

◆ m_previousZoomLevel

qreal KisZoomManager::m_previousZoomLevel {1.0}
private

Definition at line 97 of file kis_zoom_manager.h.

97{1.0};

◆ m_previousZoomMode

KoZoomMode::Mode KisZoomManager::m_previousZoomMode
private

Definition at line 98 of file kis_zoom_manager.h.

◆ m_previousZoomPoint

QPointF KisZoomManager::m_previousZoomPoint
private

Definition at line 99 of file kis_zoom_manager.h.

◆ m_verticalRuler

KoRuler* KisZoomManager::m_verticalRuler {nullptr}
private

Definition at line 89 of file kis_zoom_manager.h.

89{nullptr};

◆ m_view

QPointer<KisView> KisZoomManager::m_view
private

Definition at line 85 of file kis_zoom_manager.h.

◆ m_zoomAction

KoZoomAction* KisZoomManager::m_zoomAction {nullptr}
private

Definition at line 90 of file kis_zoom_manager.h.

90{nullptr};

◆ m_zoomActionWidget

QPointer<QWidget> KisZoomManager::m_zoomActionWidget
private

Definition at line 91 of file kis_zoom_manager.h.

◆ m_zoomChangedCompressor

KisSignalCompressor KisZoomManager::m_zoomChangedCompressor
private

Definition at line 95 of file kis_zoom_manager.h.

◆ m_zoomHandler

KoZoomHandler* KisZoomManager::m_zoomHandler {nullptr}
private

Definition at line 86 of file kis_zoom_manager.h.

86{nullptr};

The documentation for this class was generated from the following files: