Krita

View.cpp
1/*
2 * SPDX-FileCopyrightText: 2016 Boudewijn Rempt <boud@valdyas.org>
3 *
4 * SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6#include "View.h"
7#include <QPointer>
8
9#include <KoPattern.h>
10#include <KoAbstractGradient.h>
11#include <kis_paintop_preset.h>
12#include <KisView.h>
13#include <KisViewManager.h>
14#include <kis_node_manager.h>
15#include <kis_selection_manager.h>
16#include <kis_canvas_resource_provider.h>
17#include <kis_exposure_gamma_correction_interface.h>
18#include <kis_paintop_box.h>
19#include <KisMainWindow.h>
20#include <KoCanvasBase.h>
21#include <kis_canvas2.h>
22#include <KisResourceTypes.h>
23#include <KisDocument.h>
24#include "Document.h"
25#include "Canvas.h"
26#include "Window.h"
27#include "Resource.h"
28#include "ManagedColor.h"
29
30#include "LibKisUtils.h"
31
32
33struct View::Private {
34 Private() {}
35 QPointer<KisView> view;
36};
37
38View::View(KisView* view, QObject *parent)
39 : QObject(parent)
40 , d(new Private)
41{
42 d->view = view;
43}
44
45View::~View()
46{
47 delete d;
48}
49
50bool View::operator==(const View &other) const
51{
52 return (d->view == other.d->view);
53}
54
55bool View::operator!=(const View &other) const
56{
57 return !(operator==(other));
58}
59
60Window* View::window() const
61{
62 if (!d->view) return 0;
63 KisMainWindow *mainwin = d->view->mainWindow();
64 Window *win = new Window(mainwin);
65 return win;
66}
67
68
70{
71 if (!d->view) return 0;
72 Document *doc = new Document(d->view->document(), false);
73 return doc;
74}
75
77{
78 if (!d->view || !document || !document->document()) return;
79 d->view = d->view->replaceBy(document->document());
80}
81
82bool View::visible() const
83{
84 if (!d->view) return false;
85 return d->view->isVisible();
86}
87
89{
90 if (!d->view) return;
91 KisMainWindow *mainwin = d->view->mainWindow();
92 mainwin->setActiveView(d->view);
93 mainwin->subWindowActivated();
94}
95
97{
98 if (!d->view) return 0;
99 Canvas *c = new Canvas(d->view->canvasBase());
100 return c;
101}
102
103KisView *View::view()
104{
105 return d->view;
106}
107
109{
110 if (!d->view) return;
111 if (!resource) return;
112
113 KoResourceSP r = resource->resource();
114 if (!r) return;
115
116 if (KoPatternSP pattern = r.dynamicCast<KoPattern>()) {
117 QVariant value = QVariant::fromValue(pattern);
118 d->view->canvasBase()->resourceManager()->setResource(KoCanvasResource::CurrentPattern, value);
119 } else if (KoAbstractGradientSP gradient = r.dynamicCast<KoAbstractGradient>()) {
120 QVariant value = QVariant::fromValue(gradient);
121 d->view->canvasBase()->resourceManager()->setResource(KoCanvasResource::CurrentGradient, value);
122 } else if (KoResourceSP preset = r.dynamicCast<KisPaintOpPreset>()) {
123 d->view->viewManager()->paintOpBox()->resourceSelected(preset);
124 }
125}
126
127
129{
130 if (!d->view) return 0;
131 return new ManagedColor(d->view->resourceProvider()->fgColor());
132}
133
134void View::setForeGroundColor(ManagedColor *color)
135{
136 if (!d->view) return;
137 d->view->resourceProvider()->setFGColor(color->color());
138}
139
141{
142 if (!d->view) return 0;
143 return new ManagedColor(d->view->resourceProvider()->bgColor());
144}
145
146void View::setBackGroundColor(ManagedColor *color)
147{
148 if (!d->view) return;
149 d->view->resourceProvider()->setBGColor(color->color());
150}
151
153{
154 if (!d->view) return 0;
155 return new Resource(d->view->resourceProvider()->currentPreset(), ResourceType::PaintOpPresets);
156}
157
159{
160 activateResource(resource);
161}
162
164{
165 if (!d->view) return 0;
166 return new Resource(d->view->resourceProvider()->currentPattern(), ResourceType::Patterns);
167}
168
170{
171 activateResource(resource);
172}
173
175{
176 if (!d->view) return 0;
177 return new Resource(d->view->resourceProvider()->currentGradient(), ResourceType::Gradients);
178}
179
181{
182 activateResource(resource);
183}
184
186{
187 if (!d->view) return "";
188 return d->view->resourceProvider()->currentCompositeOp();
189}
190
191void View::setCurrentBlendingMode(const QString &blendingMode)
192{
193 if (!d->view) return;
194 d->view->resourceProvider()->setCurrentCompositeOp(blendingMode);
195}
196
197float View::HDRExposure() const
198{
199 if (!d->view) return 0.0;
200 KisExposureGammaCorrectionInterface *iface = d->view->canvasBase()->exposureGammaCorrectionInterface();
201 return iface->currentExposure();
202}
203
204void View::setHDRExposure(float exposure)
205{
206 if (!d->view) return;
207 KisExposureGammaCorrectionInterface *iface = d->view->canvasBase()->exposureGammaCorrectionInterface();
208 iface->setCurrentExposure(exposure);
209}
210
211float View::HDRGamma() const
212{
213 if (!d->view) return 0.0;
214 KisExposureGammaCorrectionInterface *iface = d->view->canvasBase()->exposureGammaCorrectionInterface();
215 return iface->currentGamma();
216}
217
218void View::setHDRGamma(float gamma)
219{
220 if (!d->view) return;
221 KisExposureGammaCorrectionInterface *iface = d->view->canvasBase()->exposureGammaCorrectionInterface();
222 return iface->setCurrentGamma(gamma);
223}
224
226{
227 if (!d->view) return 0.0;
228 return d->view->resourceProvider()->opacity();
229}
230
231void View::setPaintingOpacity(qreal opacity)
232{
233 if (!d->view) return;
234 d->view->resourceProvider()->setOpacity(opacity);
235}
236
237qreal View::brushSize() const
238{
239 if (!d->view) return 0.0;
240 return d->view->resourceProvider()->size();
241}
242
244{
245 if (!d->view) return;
246 d->view->resourceProvider()->setSize(brushSize);
247}
248
250{
251 if (!d->view) return 0.0;
252 return d->view->resourceProvider()->brushRotation();
253}
254
256{
257 if (!d->view) return;
258 d->view->resourceProvider()->setBrushRotation(brushRotation);
259}
260
262{
263 if (!d->view) return 0.0;
264 return d->view->resourceProvider()->flow();
265}
266
267void View::setPaintingFlow(qreal flow)
268{
269 if (!d->view) return;
270 d->view->resourceProvider()->setFlow(flow);
271}
272
273qreal View::patternSize() const
274{
275 if (!d->view) return 0.0;
276 return d->view->resourceProvider()->patternSize();
277}
278
279void View::setPatternSize(qreal size)
280{
281 if (!d->view) return;
282 d->view->resourceProvider()->setPatternSize(size);
283}
284
286{
287 if (!d->view) {
288 return false;
289 }
290 return d->view->resourceProvider()->eraserMode();
291}
292
293void View::setEraserMode(bool value)
294{
295 if (!d->view) {
296 return;
297 }
298 d->view->resourceProvider()->setEraserMode(value);
299}
300
302{
303 if (!d->view) {
304 return false;
305 }
306 return d->view->resourceProvider()->globalAlphaLock();
307}
308
310{
311 if (!d->view) {
312 return;
313 }
314 d->view->resourceProvider()->setGlobalAlphaLock(value);
315}
316
318{
319 if (!d->view) {
320 return false;
321 }
322 return d->view->resourceProvider()->disablePressure();
323}
324
326{
327 if (!d->view) {
328 return;
329 }
330 d->view->resourceProvider()->setDisablePressure(value);
331}
332
333
335{
336 if (!d->view) return QList<Node *>();
337 if (!d->view->viewManager()) return QList<Node *>();
338 if (!d->view->viewManager()->nodeManager()) return QList<Node *>();
339
340 KisNodeList selectedNodes = d->view->viewManager()->nodeManager()->selectedNodes();
341 return LibKisUtils::createNodeList(selectedNodes, d->view->image());
342}
343
344void View::showFloatingMessage(const QString &message, const QIcon& icon, int timeout, int priority)
345{
346 if (!d->view) return;
347
348 KisFloatingMessage::Priority p;
349 p = static_cast<KisFloatingMessage::Priority>(priority);
350
351 d->view->showFloatingMessage(message, icon, timeout, p);
352}
353
355{
356 if (!d->view->document()) return QTransform();
357 return d->view->canvasBase()->coordinatesConverter()->documentToFlakeTransform().inverted();
358}
359
361{
362 if (!d->view->document()) return QTransform();
363 return d->view->canvasBase()->coordinatesConverter()->flakeToWidgetTransform();
364}
365
367{
368 if (!d->view->document()) return QTransform();
369
370 const KisCoordinatesConverter* coordinatesConverter(d->view->canvasBase()->coordinatesConverter());
371 QTransform imageToFlakeTransform = coordinatesConverter->imageToDocumentTransform() * coordinatesConverter->documentToFlakeTransform();
372
373 return imageToFlakeTransform.inverted();
374}
Canvas wraps the canvas inside a view on an image/document.
Definition Canvas.h:23
The Document class encapsulates a Krita Document/Image.
Definition Document.h:37
The ManagedColor class is a class to handle colors that are color managed.
A Resource represents a gradient, pattern, brush tip, brush preset, palette or workspace definition.
Definition Resource.h:31
View represents one view on a document.
Definition View.h:25
void setBrushRotation(qreal brushRotation)
set the current rotation for brush tip
Definition View.cpp:255
float HDRExposure() const
Definition View.cpp:197
bool eraserMode() const
return current eraser mode status (active/inactive)
Definition View.cpp:285
void setHDRGamma(float gamma)
set the current HDR Gamma value
Definition View.cpp:218
bool globalAlphaLock() const
return current global alpha lock mode (active/inactive)
Definition View.cpp:301
bool visible() const
Definition View.cpp:82
qreal patternSize() const
return the current pattern size for brush
Definition View.cpp:273
void setBrushSize(qreal brushSize)
set the current size for brush
Definition View.cpp:243
void setCurrentBrushPreset(Resource *resource)
set the current selected preset
Definition View.cpp:158
void setDisablePressure(bool value)
set current disabled pressure status
Definition View.cpp:325
void setGlobalAlphaLock(bool value)
set current global alpha lock mode active/inactive
Definition View.cpp:309
qreal paintingFlow() const
return the current flow for brush
Definition View.cpp:261
void setDocument(Document *document)
Reset the view to show document.
Definition View.cpp:76
void setCurrentPattern(Resource *resource)
set the current selected pattern
Definition View.cpp:169
float HDRGamma() const
Definition View.cpp:211
ManagedColor * foregroundColor() const
foregroundColor allows access to the currently active foreground color.
Definition View.cpp:128
Resource * currentPattern() const
return the current selected pattern
Definition View.cpp:163
void setCurrentBlendingMode(const QString &blendingMode)
set the current blending mode for brush
Definition View.cpp:191
ManagedColor * backgroundColor() const
backgroundColor allows access to the currently active background color.
Definition View.cpp:140
QTransform flakeToCanvasTransform() const
flakeToCanvasTransform The transformation of the canvas relative to the view without rotation and mir...
Definition View.cpp:360
QString currentBlendingMode() const
return the current blending mode for brush
Definition View.cpp:185
void showFloatingMessage(const QString &message, const QIcon &icon, int timeout, int priority)
showFloatingMessage displays a floating message box on the top-left corner of the canvas
Definition View.cpp:344
void setPaintingOpacity(qreal opacity)
set the current opacity for brush
Definition View.cpp:231
QTransform flakeToImageTransform() const
flakeToImageTransform The transformation of the image relative to the view without rotation and mirro...
Definition View.cpp:366
qreal paintingOpacity() const
return the current opacity for brush
Definition View.cpp:225
void activateResource(Resource *resource)
activateResource activates the given resource.
Definition View.cpp:108
Canvas * canvas() const
Definition View.cpp:96
void setHDRExposure(float exposure)
set the current HDR Exposure value
Definition View.cpp:204
qreal brushRotation() const
return the current rotation for brush tip
Definition View.cpp:249
void setPatternSize(qreal size)
set the current pattern size value for brush
Definition View.cpp:279
QList< Node * > selectedNodes() const
Definition View.cpp:334
Window * window() const
Definition View.cpp:60
Resource * currentBrushPreset() const
return the current selected preset
Definition View.cpp:152
void setPaintingFlow(qreal flow)
set the current flow value for brush
Definition View.cpp:267
QTransform flakeToDocumentTransform() const
flakeToDocumentTransform The transformation of the document relative to the view without rotation and...
Definition View.cpp:354
void setEraserMode(bool value)
set current eraser active/inactive
Definition View.cpp:293
Resource * currentGradient() const
return the current selected gradient
Definition View.cpp:174
void setVisible()
Make the current view visible.
Definition View.cpp:88
void setCurrentGradient(Resource *resource)
set the current selected gradient
Definition View.cpp:180
Document * document() const
Definition View.cpp:69
qreal brushSize() const
return the current size for brush
Definition View.cpp:237
bool disablePressure() const
return current disabled pressure status
Definition View.cpp:317
QTransform inverted(bool *invertible) const const
QVariant fromValue(T &&value)
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri May 2 2025 12:05:08 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.