Krita Source Code Documentation
Loading...
Searching...
No Matches
Canvas.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2016 Boudewijn Rempt <boud@valdyas.org>
3 *
4 * SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6#include "Canvas.h"
7#include <KoCanvasBase.h>
8#include <kis_canvas2.h>
9#include <KisView.h>
10#include <KoCanvasController.h>
12#include <kis_zoom_manager.h>
13#include <View.h>
14
20
21Canvas::Canvas(KoCanvasBase *canvas, QObject *parent)
22 : QObject(parent)
23 , d(new Private)
24{
25 d->canvas = static_cast<KisCanvas2*>(canvas);
26
27 if (d->canvas) {
28 d->canvasControllerProxy = d->canvas->imageView()->canvasController()->proxyObject;
29
30 connect(d->canvasControllerProxy, SIGNAL(canvasRemoved(KoCanvasController*)), this, SIGNAL(removed()));
31 connect(d->canvasControllerProxy, SIGNAL(canvasOffsetChanged()), this, SIGNAL(offsetChanged()));
32 connect(d->canvasControllerProxy, SIGNAL(canvasMousePositionChanged(QPoint)), this, SIGNAL(cursorPositionChanged(QPoint)));
33 connect(d->canvasControllerProxy, SIGNAL(documentMousePositionChanged(QPointF)), this, SIGNAL(documentCursorPositionChanged(QPointF)));
34 connect(d->canvasControllerProxy, SIGNAL(sizeChanged(QSize)), this, SIGNAL(sizeChanged(QSize)));
35 connect(d->canvasControllerProxy, SIGNAL(moveDocumentOffset(QPointF, QPointF)), this, SIGNAL(documentOffsetChanged(QPointF, QPointF)));
36 connect(d->canvasControllerProxy, SIGNAL(effectiveZoomChanged(qreal)), this, SIGNAL(effectiveZoomChanged(qreal)));
39 connect(d->canvasControllerProxy, SIGNAL(documentRotationChanged(qreal)), this, SIGNAL(rotationChanged(qreal)));
40 connect(d->canvasControllerProxy, SIGNAL(documentMirrorStatusChanged(bool, bool)), this, SIGNAL(mirrorChanged(bool, bool)));
41 connect(d->canvasControllerProxy, SIGNAL(canvasStateChanged()), this, SIGNAL(stateChanged()));
42 }
43}
44
46{
47 delete d;
48}
49
50
51bool Canvas::operator==(const Canvas &other) const
52{
53 return (d->canvas == other.d->canvas);
54}
55
56bool Canvas::operator!=(const Canvas &other) const
57{
58 return !(operator==(other));
59}
60
61
62qreal Canvas::zoomLevel() const
63{
64 if (!d->canvas) return 1.0;
65 return d->canvas->imageView()->viewConverter()->zoom();
66}
67
69{
70 if (!d->canvas) return;
71 d->canvas->imageView()->canvasController()->setZoom(KoZoomMode::ZOOM_CONSTANT, value);
72}
73
74void Canvas::setPreferredCenter(const QPointF& imagePos)
75{
76 if (!d->canvas) return;
77
79
80 QPointF documentPos = coordConv->imageToDocument(imagePos);
81 QPointF flakePos = coordConv->documentToFlake(documentPos);
82
83 d->canvas->imageView()->canvasController()->setPreferredCenter(flakePos);
84}
85
87{
88 if (!d->canvas) return QPointF();
89
90 QPointF flakePos = d->canvas->imageView()->canvasController()->preferredCenter();
91
93 QPointF docPos = coordConv->flakeToDocument(flakePos);
94 QPointF imagePos = coordConv->documentToImage(docPos);
95
96 return imagePos;
97}
98
99void Canvas::pan(const QPoint& offset)
100{
101 d->canvas->imageView()->canvasController()->pan(offset);
102}
103
105{
106 if (!d->canvas) return;
107 d->canvas->imageView()->zoomManager()->zoomTo100();
108}
109
110
112{
113 if (!d->canvas) return;
114 d->canvas->imageView()->canvasController()->resetCanvasRotation();
115}
116
117qreal Canvas::rotation() const
118{
119 if (!d->canvas) return 0;
120 return d->canvas->imageView()->canvasController()->rotation();
121}
122
123void Canvas::setRotation(qreal angle)
124{
125 if (!d->canvas) return;
126 d->canvas->imageView()->canvasController()->rotateCanvas(angle - rotation());
127}
128
129
130bool Canvas::mirror() const
131{
132 if (!d->canvas) return false;
133 return d->canvas->imageView()->canvasIsMirrored();
134}
135
137{
138 if (!d->canvas) return;
139 d->canvas->imageView()->canvasController()->mirrorCanvas(value);
140}
141
143{
144 if (!d->canvas) return 0;
145 View *view = new View(d->canvas->imageView());
146 return view;
147}
148
150{
151 if (!d->canvas) return 0;
152 return d->canvas->displayColorConverter();
153}
154
156{
157 if (!d->canvas) return false;
158 return d->canvas->imageView()->canvasController()->wrapAroundMode();
159}
160
162{
163 if (!d->canvas) return;
164 d->canvas->imageView()->canvasController()->slotToggleWrapAroundMode(enable);
165}
166
168{
169 if (!d->canvas) return false;
170 return d->canvas->imageView()->canvasController()->levelOfDetailMode();
171}
172
174{
175 if (!d->canvas) return;
176 return d->canvas->imageView()->canvasController()->slotToggleLevelOfDetailMode(enable);
177}
178
180{
181 emit zoomStateChanged((ZoomMode)zoomState.mode, zoomState.zoom, zoomState.minZoom, zoomState.maxZoom);
182}
183
184#include "moc_Canvas.cpp"
float value(const T *src, size_t ch)
bool mirror() const
Definition Canvas.cpp:130
void stateChanged()
ZoomMode
Definition Canvas.h:29
void setMirror(bool value)
setMirror turn the canvas mirroring on or off depending on
Definition Canvas.cpp:136
qreal rotation() const
Definition Canvas.cpp:117
void setRotation(qreal angle)
setRotation set the rotation of the canvas to the given
Definition Canvas.cpp:123
void zoomStateChanged(const ZoomMode zoomMode, qreal zoom, qreal minZoom, qreal maxZoom)
View * view() const
Definition Canvas.cpp:142
void removed()
void documentRectInWidgetPixelsChanged(const QRectF &documentRectInWidgetPixels)
QPointF preferredCenter() const
Definition Canvas.cpp:86
void setWrapAroundMode(bool enable)
setWrapAroundMode set wraparound mode to
Definition Canvas.cpp:161
void effectiveZoomChanged(qreal effectiveZoom)
void offsetChanged()
bool levelOfDetailMode() const
Definition Canvas.cpp:167
bool operator!=(const Canvas &other) const
Definition Canvas.cpp:56
void documentCursorPositionChanged(const QPointF &position)
void setLevelOfDetailMode(bool enable)
setLevelOfDetailMode sets Instant Preview to
Definition Canvas.cpp:173
void resetRotation()
resetRotation reset the canvas rotation.
Definition Canvas.cpp:111
qreal zoomLevel() const
Definition Canvas.cpp:62
void sizeChanged(const QSize &size)
KisDisplayColorConverter * displayColorConverter() const
Definition Canvas.cpp:149
~Canvas() override
Definition Canvas.cpp:45
bool wrapAroundMode() const
Definition Canvas.cpp:155
void documentOffsetChanged(const QPointF &oldOffset, const QPointF &newOffset)
void setZoomLevel(qreal value)
setZoomLevel set the zoomlevel to the given value. 1.0 is 100%.
Definition Canvas.cpp:68
void setPreferredCenter(const QPointF &imagePos)
setPan Centers the image pixel at imagePos in the current view
Definition Canvas.cpp:74
bool operator==(const Canvas &other) const
Definition Canvas.cpp:51
Private *const d
Definition Canvas.h:221
Canvas(KoCanvasBase *canvas, QObject *parent=0)
Definition Canvas.cpp:21
void emitZoomStateChanged(const KoZoomState &zoomState)
Definition Canvas.cpp:179
void cursorPositionChanged(const QPoint &position)
void rotationChanged(qreal angle)
void pan(const QPoint &offset)
pan the current view in pixels.
Definition Canvas.cpp:99
void resetZoom()
resetZoom set the zoomlevel to 100%
Definition Canvas.cpp:104
void mirrorChanged(bool mirrorX, bool mirrorY)
KisDisplayColorConverter displayColorConverter
KisCoordinatesConverter * coordinatesConverter
QPointer< KisView > imageView() const
_Private::Traits< T >::Result documentToFlake(const T &obj) const
_Private::Traits< T >::Result flakeToDocument(const T &obj) const
_Private::Traits< T >::Result documentToImage(const T &obj) const
_Private::Traits< T >::Result imageToDocument(const T &obj) const
@ ZOOM_CONSTANT
zoom x %
Definition KoZoomMode.h:24
KoZoomMode::Mode mode
Definition KoZoomState.h:24
qreal maxZoom
Definition KoZoomState.h:27
qreal minZoom
Definition KoZoomState.h:26
Definition View.h:25
KisCanvas2 * canvas
Definition Canvas.cpp:17
KoCanvasControllerProxyObject * canvasControllerProxy
Definition Canvas.cpp:18