Krita Source Code Documentation
Loading...
Searching...
No Matches
TransformMask.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2017 Wolthera van Hövell tot Westerflier <griffinvalley@gmail.com>
3 *
4 * SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6#include "TransformMask.h"
8#include <kis_image.h>
10#include <QDomDocument>
11
12#include "Node.h"
17
18
20
21
22TransformMask::TransformMask(KisImageSP image, QString name, QObject *parent) :
23 Node(image, new KisTransformMask(image, name), parent)
24{
25
26}
27
29 Node(image, mask, parent)
30{
31
32}
33
38
39QString TransformMask::type() const
40{
41 return "transformmask";
42}
43
45{
46 QTransform affineTransformation;
47 KisTransformMask *mask = dynamic_cast<KisTransformMask*>(this->node().data());
48 KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(mask, QTransform());
49
50 affineTransformation = mask->transformParams()->finalAffineTransform();
51
52 return affineTransformation;
53}
54
55QString TransformMask::toXML() const
56{
57 KisTransformMaskSP mask = qobject_cast<KisTransformMask*>(this->node().data());
59
60 QDomDocument doc("transform_params");
61 QDomElement root = doc.createElement("transform_params");
62 QDomElement main = doc.createElement("main");
63 QDomElement data = doc.createElement("data");
64
65 main.setAttribute("id", mask->transformParams()->id());
66
67 mask->transformParams()->toXML(&data);
68 doc.appendChild(root);
69 root.appendChild(main);
70 root.appendChild(data);
71
72 return doc.toString();
73}
74
75bool TransformMask::fromXML (const QString &xml)
76{
77 QDomDocument doc;
78 KisTransformMaskSP mask = qobject_cast<KisTransformMask*>(this->node().data());
80
81 doc.setContent(xml);
82
83 QDomElement rootElement = doc.documentElement();
84 QDomElement main = rootElement.firstChildElement("main");
85 QDomElement data = rootElement.firstChildElement("data");
86
87 if (!main.isElement() || !main.hasAttribute("id") || !data.isElement()) {
88 return false;
89 }
90
91 QString id = main.attribute("id", "not-valid");
92
93 // backward compatibility
94 if (id == "animatedtransformparams") {
95 id = "tooltransformparams";
96 }
97
99
100 if (!params) {
101 return false;
102 }
103
104 QScopedPointer<KUndo2Command> cmd(new KUndo2Command);
105
108 }
109
110 new KisSimpleModifyTransformMaskCommand(mask, params, {}, cmd.data());
111
113
114 return true;
115}
static void runSingleCommandStroke(KisImageSP image, KUndo2Command *cmd, KisStrokeJobData::Sequentiality sequentiality=KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::Exclusivity exclusivity=KisStrokeJobData::NORMAL)
runSingleCommandStroke creates a stroke and runs cmd in it. The text() field of cmd is used as a titl...
static KisTransformMaskParamsFactoryRegistry * instance()
KisTransformMaskParamsInterfaceSP createParams(const QString &id, const QDomElement &e)
Definition Node.h:24
KisNodeSP node() const
Definition Node.cpp:827
KisImageSP image() const
Definition Node.cpp:822
friend class TransformMask
Definition Node.h:706
bool fromXML(const QString &xml)
QString toXML() const
toXML
virtual QString type() const override
type Krita has several types of nodes, split in layers and masks. Group layers can contain other laye...
QTransform finalAffineTransform() const
~TransformMask() override
#define KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(cond, val)
Definition kis_assert.h:129
int main(int argc, char **argv)
Definition main.cpp:26
KisTransformMaskParamsInterfaceSP transformParams() const