Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_transform_mask_adapter.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2014 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
8
9#include <QTransform>
10#include <QDomElement>
11#include "kis_dom_utils.h"
12
13#include "tool_transform_args.h"
14#include "kis_transform_utils.h"
16
17#include "kis_node.h"
18
19
26
27
33
34KisTransformMaskAdapter::KisTransformMaskAdapter(const ToolTransformArgs &args, bool isHidden, bool isInitialized)
35 : m_d(new Private)
36{
37 m_d->args = toQShared(new ToolTransformArgs(args));
38 m_d->isHidden = isHidden;
39 m_d->isInitialized = isInitialized;
40}
41
45
51
59
61{
62 return m_d->isInitialized;
63}
64
66{
67 m_d->isHidden = value;
68}
69
71{
72 return m_d->isHidden;
73}
74
75void KisTransformMaskAdapter::transformDevice(KisNodeSP node, KisPaintDeviceSP src, KisPaintDeviceSP dst, bool forceSubPixelTranslation) const
76{
77 dst->prepareClone(src);
78
80
81 KisTransformUtils::transformDeviceWithCroppedDst(*transformArgs(), src, dst, &helper, forceSubPixelTranslation);
82}
83
87
89{
90 *m_d->args = args;
91}
92
94{
95 return "tooltransformparams";
96}
97
98void KisTransformMaskAdapter::toXML(QDomElement *e) const
99{
100 // bounds rotation cannot be used on transform masks currently
101 KIS_SAFE_ASSERT_RECOVER_NOOP(qFuzzyIsNull(m_d->args->boundsRotation()));
102 m_d->args->toXML(e);
103}
104
106{
108
109 // bounds rotation cannot be used on transform masks currently
111
113 new KisTransformMaskAdapter(args));
114}
115
117{
119
120 {
121 QDomElement transformEl;
122 bool result = false;
123
124 QTransform transform;
125
126 result =
127 KisDomUtils::findOnlyElement(e, "dumb_transform", &transformEl) &&
128 KisDomUtils::loadValue(transformEl, "transform", &transform);
129
130 if (!result) {
131 warnKrita << "WARNING: couldn't load dumb transform. Ignoring...";
132 }
133
134 args.translateDstSpace(QPointF(transform.dx(), transform.dy()));
135 }
136
137 // bounds rotation cannot be used on transform masks currently
139
141 new KisTransformMaskAdapter(args));
142}
143
145{
146 m_d->args->translateSrcAndDst(offset);
147}
148
150{
151 m_d->args->transformSrcAndDst(t);
152}
153
155{
156 m_d->args->translateDstSpace(offset);
157}
158
163
164QRect KisTransformMaskAdapter::nonAffineNeedRect(const QRect &rc, const QRect &srcBounds)
165{
166 return KisTransformUtils::needRect(*transformArgs(), rc, srcBounds);
167}
168
170{
171 Q_UNUSED(id);
172 Q_UNUSED(defaultBounds);
173 return 0;
174}
175
179
181{
184
186 QSharedPointer<ToolTransformArgs> rhsArgs = adapter->transformArgs();
187
188 return lhsArgs->isSameMode(*rhsArgs);
189}
float value(const T *src, size_t ch)
KisKeyframeChannel stores and manages KisKeyframes. Maps units of time to virtual keyframe values....
void prepareClone(KisPaintDeviceSP src)
void transformSrcAndDst(const QTransform &t) override
QRect nonAffineNeedRect(const QRect &rc, const QRect &srcBounds) override
void translateSrcAndDst(const QPointF &offset) override
virtual const QSharedPointer< ToolTransformArgs > transformArgs() const
void setHidden(bool value) override
void translateDstSpace(const QPointF &offset) override
void transformDevice(KisNodeSP node, KisPaintDeviceSP src, KisPaintDeviceSP dst, bool forceSubPixelTranslation) const override
void setBaseArgs(const ToolTransformArgs &args)
const QScopedPointer< Private > m_d
KisKeyframeChannel * getKeyframeChannel(const QString &id, KisDefaultBoundsBaseSP defaultBounds)
KisTransformMaskParamsInterfaceSP clone() const override
bool compareTransform(KisTransformMaskParamsInterfaceSP rhs) const override
static KisTransformMaskParamsInterfaceSP fromDumbXML(const QDomElement &e)
static KisTransformMaskParamsInterfaceSP fromXML(const QDomElement &e)
QTransform finalAffineTransform() const override
void toXML(QDomElement *e) const override
QRect nonAffineChangeRect(const QRect &rc) override
static QRect needRect(const ToolTransformArgs &config, const QRect &rc, const QRect &srcBounds)
static QRect changeRect(const ToolTransformArgs &config, const QRect &rc)
static void transformDeviceWithCroppedDst(const ToolTransformArgs &config, KisPaintDeviceSP srcDevice, KisPaintDeviceSP dstDevice, KisProcessingVisitor::ProgressHelper *helper, bool forceSubPixelTranslation)
void translateDstSpace(const QPointF &offset)
double boundsRotation() const
static ToolTransformArgs fromXML(const QDomElement &e)
TransformMode mode() const
static bool qFuzzyIsNull(half h)
#define KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(cond, val)
Definition kis_assert.h:129
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:130
#define warnKrita
Definition kis_debug.h:87
QSharedPointer< T > toQShared(T *ptr)
QSharedPointer< KisTransformMaskParamsInterface > KisTransformMaskParamsInterfaceSP
bool findOnlyElement(const QDomElement &parent, const QString &tag, QDomElement *el, QStringList *errorMessages)
bool loadValue(const QDomElement &e, float *v)
QSharedPointer< ToolTransformArgs > args