Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_canvas2.h
Go to the documentation of this file.
1/* This file is part of the KDE project
2 * SPDX-FileCopyrightText: 2006, 2010 Boudewijn Rempt <boud@valdyas.org>
3 * SPDX-FileCopyrightText: 2011 Silvio Heinrich <plassy@web.de>
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 */
7
8#ifndef KIS_CANVAS_H
9#define KIS_CANVAS_H
10
11#include <QObject>
12#include <QWidget>
13#include <QSize>
14#include <QString>
15
16#include <KoConfig.h>
18#include <KoCanvasBase.h>
19#include <kritaui_export.h>
20#include <kis_types.h>
21#include <KoPointerEvent.h>
22
23#include "opengl/kis_opengl.h"
24
25#include "kis_ui_types.h"
31#include "KisWraparoundAxis.h"
32
33class KoToolProxy;
35
36
37class KisViewManager;
42class KisView;
43class KisInputManager;
47class KoViewConverter;
49class KisPopupPalette;
50
51
57class KRITAUI_EXPORT KisCanvas2 : public KoCanvasBase
58{
59
60 Q_OBJECT
61
62public:
63
71 KisCanvas2(KisCoordinatesConverter *coordConverter, KoCanvasResourceProvider *resourceManager, KisMainWindow *mainWindow, KisView *view, KoShapeControllerBase *sc);
72
73 ~KisCanvas2() override;
74
75 void disconnectCanvasObserver(QObject *object) override;
76
77public: // KoCanvasBase implementation
78
79 bool canvasIsOpenGL() const override;
80
82
83 void gridSize(QPointF *offset, QSizeF *spacing) const override;
84
85 bool snapToGrid() const override;
86
87 // This method only exists to support flake-related operations
88 void addCommand(KUndo2Command *command) override;
89
90 QPoint documentOrigin() const override;
91 QPoint documentOffset() const;
92
99 KoShapeManager * shapeManager() const override;
100
106
110 KoShapeManager *globalShapeManager() const;
111
116 KoShapeManager *localShapeManager() const;
117
118
119 void updateCanvas(const QRectF& rc) override;
120
122 const KoViewConverter *viewConverter() const override;
123 KoViewConverter *viewConverter() override;
124
125 QWidget* canvasWidget() override;
126
127 const QWidget* canvasWidget() const override;
128
129 KoUnit unit() const override;
130
131 KoToolProxy* toolProxy() const override;
132
133 // FIXME:
134 // Temporary! Either get the current layer and image from the
135 // resource provider, or use this, which gets them from the
136 // current shape selection.
137 KisImageWSP currentImage() const;
138
145 KisInputManager* globalInputManager() const;
146
147 KisPaintingAssistantsDecorationSP paintingAssistantsDecoration() const;
148 KisReferenceImagesDecorationSP referenceImagesDecoration() const;
149
150public: // KisCanvas2 methods
151
152 KisImageWSP image() const;
153 KisViewManager* viewManager() const;
154 QPointer<KisView> imageView() const;
155
157 void addDecoration(KisCanvasDecorationSP deco);
158 KisCanvasDecorationSP decoration(const QString& id) const;
159
160 void setDisplayFilter(QSharedPointer<KisDisplayFilter> displayFilter);
161 QSharedPointer<KisDisplayFilter> displayFilter() const;
162
164 KisExposureGammaCorrectionInterface* exposureGammaCorrectionInterface() const;
165
171 void fetchProofingOptions();
172 void updateProofingState();
173 KisProofingConfigurationSP proofingConfiguration() const;
174
180 void setProofingConfigUpdated(bool updated);
181
188
189 void setCursor(const QCursor &cursor) override;
191 KisCanvasAnimationState *animationState() const;
192 void refetchDataFromImage();
193
198 QRect regionOfInterest() const;
199
204 void setRenderingLimit(const QRect &rc);
205
209 QRect renderingLimit() const;
210
212
217
223 QString colorManagementReport() const;
224
225Q_SIGNALS:
227
229 void sigContinueResizeImage(qint32 w, qint32 h);
230
232
233 // emitted whenever the canvas widget thinks sketch should update
234 void updateCanvasRequested(const QRect &rc);
235
236 void sigRegionOfInterestChanged(const QRect &roi);
237
238public Q_SLOTS:
239
241 void updateCanvas();
242
243 void updateCanvasProjection(const QRectF &docRect);
244 void updateCanvasDecorations();
245 void updateCanvasDecorations(const QRectF &docRect);
246 void updateCanvasToolOutlineDoc(const QRectF &docRect);
247 void updateCanvasToolOutlineWdg(const QRect &widgetRect);
248 void updateCanvasScene();
249
250 void startResizingImage();
251 void finishResizingImage(qint32 w, qint32 h);
252
254 qreal rotationAngle() const;
256 bool xAxisMirrored() const;
257 bool yAxisMirrored() const;
258 void slotSoftProofing();
259 void slotGamutCheck();
260 void slotChangeGlobalProofingConfig();
261 void slotChangeProofingConfig();
262 void slotPopupPaletteRequestedZoomChange(int zoom);
263
264 void channelSelectionChanged();
265
266 void startUpdateInPatches(const QRect &imageRect);
267
268 void slotTrySwitchShapeManager();
269
273 void slotConfigChanged();
274
275 void slotScreenChanged(QScreen *screen);
276
277
278private Q_SLOTS:
279
282 void startUpdateCanvasProjection(const QRect & rc);
283 void updateCanvasProjection();
284
285 void slotBeginUpdatesBatch();
286 void slotEndUpdatesBatch();
287 void slotSetLodUpdatesBlocked(bool value);
288
289 void slotEffectiveZoomChanged(qreal newZoom);
290 void slotCanvasStateChanged();
291
292 void slotSelectionChanged();
293
294 void slotDoCanvasUpdate();
295
296 void bootstrapFinished();
297
298 void slotUpdateRegionOfInterest();
299 void slotUpdateReferencesBounds();
300
301 void slotImageColorSpaceChanged();
302
303public:
304 // interface for KisCanvasController only
305 void setWrapAroundViewingMode(bool value);
306 bool wrapAroundViewingMode() const;
307
308 void setWrapAroundViewingModeAxis(WrapAroundAxis value);
309 WrapAroundAxis wrapAroundViewingModeAxis() const;
310
311 void setLodPreferredInCanvas(bool value);
312 bool lodPreferredInCanvas() const;
313
314 void initializeImage();
315 void disconnectImage();
316
317 void setFavoriteResourceManager(KisFavoriteResourceManager* favoriteResourceManager);
318
319private:
320 Q_DISABLE_COPY(KisCanvas2)
321
322 void requestCanvasUpdateMaybeCompressed();
323 void connectCurrentCanvas();
324 void createCanvas(bool useOpenGL);
325 void createQPainterCanvas();
326 void createOpenGLCanvas();
327 void updateCanvasWidgetImpl(const QRect &rc = QRect());
328 void setCanvasWidget(KisAbstractCanvasWidget *widget);
329 void resetCanvas(bool useOpenGL);
330 void slotSurfaceFormatChanged(const KisDisplayConfig &config);
331
332 void notifyLevelOfDetailChange();
333
334 // Completes construction of canvas.
335 // To be called by KisView in its constructor, once it has been setup enough
336 // (to be defined what that means) for things KisCanvas2 expects from KisView
337 // TODO: see to avoid that
338 void setup();
339
340 void initializeFpsDecoration();
341
342private:
343 friend class KisView; // calls setup()
344 class KisCanvas2Private;
345 KisCanvas2Private * const m_d;
346};
347
348#endif
float value(const T *src, size_t ch)
WrapAroundAxis
bool proofingConfigUpdated()
proofingConfigUpdated ask the canvas whether or not it updated the proofing config.
KisCanvas2Private *const m_d
KoSelectedShapesProxy * selectedShapesProxy() const override
const KisCoordinatesConverter * coordinatesConverter() const
const QWidget * canvasWidget() const override
void sigCanvasStateChanged()
void sigContinueResizeImage(qint32 w, qint32 h)
KisPopupPalette * popupPalette()
KoShapeManager * shapeManager() const override
QRect renderingLimit() const
KisOpenGL::FilterMode openGLFilterMode() const
KisAnimationFrameCacheSP frameCache() const
QRect regionOfInterest() const
QWidget * canvasWidget() override
KoToolProxy * toolProxy() const override
void sigCanvasEngineChanged()
void sigRegionOfInterestChanged(const QRect &roi)
KisInputActionGroupsMaskInterface::SharedInterface inputActionGroupsMaskInterface()
KisDisplayColorConverter * displayColorConverter() const
void sigCanvasCacheUpdated()
void updateCanvasRequested(const QRect &rc)
The KisCanvasAnimationState class stores all of the canvas-specific animation state.
KisDisplayConfig This class keeps track of the color management configuration for image to display....
The KisDisplayFilter class is the base class for filters that are applied by the canvas to the projec...
Central object to manage canvas input.
Main window for Krita.
virtual void disconnectCanvasObserver(QObject *object)
virtual void setCursor(const QCursor &cursor)=0
virtual void gridSize(QPointF *offset, QSizeF *spacing) const =0
virtual bool canvasIsOpenGL() const
virtual KoUnit unit() const =0
virtual QPoint documentOrigin() const
virtual const KoViewConverter * viewConverter() const =0
virtual void updateCanvas(const QRectF &rc)=0
virtual void addCommand(KUndo2Command *command)=0
virtual bool snapToGrid() const =0
The KoSelectedShapesProxy class is a special interface of KoCanvasBase to have a stable connection to...