Krita Source Code Documentation
Loading...
Searching...
No Matches
KisDecorationsWrapperLayer.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2019 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
8
9#include "KisDocument.h"
10#include "kis_node_visitor.h"
12#include "kis_grid_config.h"
13#include "kis_guides_config.h"
15#include "kis_default_bounds.h"
16
22
24 : KisExternalLayer(document->image(), "decorations-wrapper-layer", OPACITY_OPAQUE_U8),
25 m_d(new Private)
26{
27 m_d->document = document;
28 m_d->fakeOriginalDevice = new KisPaintDevice(KoColorSpaceRegistry::instance()->rgb8());
29 m_d->fakeOriginalDevice->setDefaultBounds(new KisDefaultBounds(document->image()));
30}
31
32
34 : KisExternalLayer(rhs.image(), "decorations-wrapper-layer", OPACITY_OPAQUE_U8),
35 m_d(new Private)
36{
37 m_d->document = rhs.m_d->document;
38 m_d->fakeOriginalDevice = new KisPaintDevice(*rhs.m_d->fakeOriginalDevice);
39}
40
44
46{
47 m_d->document = document;
48 KIS_SAFE_ASSERT_RECOVER(image() == document->image()) {
49 setImage(document->image());
50 }
51}
52
54{
55 return m_d->document;
56}
57
59{
60 return false;
61}
62
64{
65 return visitor.visit(this);
66}
67
69{
70 visitor.visit(this, undoAdapter);
71}
72
76
78{
79 return m_d->fakeOriginalDevice;
80}
81
86
88{
89 return true;
90}
91
96
102
104{
105 return transform(QTransform::fromTranslate(-rect.x(), -rect.y()));
106}
107
109{
111
112 struct UndoCommand : public KUndo2Command
113 {
114 UndoCommand(KisDocument *document, const QTransform &transform)
115 : m_document(document),
116 m_transform(transform)
117 {}
118
119 void undo() override {
120 doTransform(m_transform.inverted());
121 }
122
123 void redo() override {
124 doTransform(m_transform);
125 }
126
127 private:
128 void doTransform(const QTransform &transform) {
129 const QTransform imageToDocument =
130 QTransform::fromScale(1 / m_document->image()->xRes(),
131 1 / m_document->image()->yRes());
132
133 KisGridConfig gridConfig = m_document->gridConfig();
134 if (gridConfig.showGrid()) {
135 gridConfig.transform(transform);
136 m_document->setGridConfig(gridConfig);
137 }
138
139 KisGuidesConfig guidesConfig = m_document->guidesConfig();
140 if (guidesConfig.hasGuides()) {
141 guidesConfig.transform(imageToDocument.inverted() * transform * imageToDocument);
142 m_document->setGuidesConfig(guidesConfig);
143 }
144
145 QList<KisPaintingAssistantSP> assistants = m_document->assistants();
146 Q_FOREACH(KisPaintingAssistantSP assistant, assistants) {
147 assistant->transform(imageToDocument.inverted() * transform * imageToDocument);
148 }
149 m_document->setAssistants(assistants);
150 }
151
152 private:
153 KisDocument *m_document;
154 QTransform m_transform;
155 };
156
157 return new UndoCommand(m_d->document, transform);
158}
const quint8 OPACITY_OPAQUE_U8
KisPaintDeviceSP original() const override
KUndo2Command * crop(const QRect &rect) override
KisPaintDeviceSP paintDevice() const override
KUndo2Command * transform(const QTransform &transform) override
bool supportsPerspectiveTransform() const override
const QScopedPointer< Private > m_d
KisDecorationsWrapperLayer(KisDocument *document)
bool allowAsChild(KisNodeSP) const override
void setDocument(KisDocument *document)
bool accept(KisNodeVisitor &) override
void setImage(KisImageWSP image) override
void transform(const QTransform &transform)
bool showGrid() const
void transform(const QTransform &transform)
virtual bool visit(KisNode *node)=0
void setDefaultBounds(KisDefaultBoundsBaseSP bounds)
virtual void visit(KisNode *node, KisUndoAdapter *undoAdapter)=0
#define KIS_SAFE_ASSERT_RECOVER(cond)
Definition kis_assert.h:126
#define KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(cond, val)
Definition kis_assert.h:129
virtual void setImage(KisImageWSP image)
KisImageWSP image
static KoColorSpaceRegistry * instance()