Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_liquify_properties.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 <QDomElement>
10
11#include <kconfig.h>
12#include <kconfiggroup.h>
13#include <ksharedconfig.h>
14
15#include "kis_debug.h"
16#include "kis_dom_utils.h"
17
33
51
68
74
80
82{
83 QString result;
84
85 switch (mode) {
87 result = "Move";
88 break;
90 result = "Scale";
91 break;
93 result = "Rotate";
94 break;
96 result = "Offset";
97 break;
99 result = "Undo";
100 break;
102 result = "RestoreShape";
103 break;
105 qFatal("Unsupported mode");
106 }
107
108 return QString("LiquifyTool/%1").arg(result);
109}
110
112{
113 switch (mode) {
115 return 0.03;
121 return 0.05;
123 qFatal("Unsupported mode");
124 }
125
126 return 0.05;
127}
128
130{
131 KConfigGroup cfg =
132 KSharedConfig::openConfig()->group(liquifyModeString(m_mode));
133
134 cfg.writeEntry("size", m_size);
135 cfg.writeEntry("amount", m_amount);
136 cfg.writeEntry("spacing", m_spacing);
137 cfg.writeEntry("sizeHasPressure", m_sizeHasPressure);
138 cfg.writeEntry("amountHasPressure", m_amountHasPressure);
139 cfg.writeEntry("reverseDirection", m_reverseDirection);
140 cfg.writeEntry("useWashMode", m_useWashMode);
141 cfg.writeEntry("flow", m_flow);
142 cfg.writeEntry("preserveShapeRotation", m_preserveShapeRotation);
143 cfg.writeEntry("preserveShapeScale", m_preserveShapeScale);
144 cfg.writeEntry("preserveShapeStretch", m_preserveShapeStretch);
145
146 KConfigGroup globalCfg = KSharedConfig::openConfig()->group("LiquifyTool");
147 globalCfg.writeEntry("mode", (int)m_mode);
148}
149
151{
152 KConfigGroup cfg =
153 KSharedConfig::openConfig()->group(liquifyModeString(m_mode));
154
155 m_size = cfg.readEntry("size", m_size);
156 m_amount = cfg.readEntry("amount", defaultAmountForMode(m_mode));
157 m_spacing = cfg.readEntry("spacing", m_spacing);
158 m_sizeHasPressure = cfg.readEntry("sizeHasPressure", m_sizeHasPressure);
159 m_amountHasPressure = cfg.readEntry("amountHasPressure", m_amountHasPressure);
160 m_reverseDirection = cfg.readEntry("reverseDirection", m_reverseDirection);
161 m_useWashMode = cfg.readEntry("useWashMode", m_useWashMode);
162 m_flow = cfg.readEntry("flow", m_flow);
163 m_preserveShapeRotation = cfg.readEntry("preserveShapeRotation", m_preserveShapeRotation);
164 m_preserveShapeScale = cfg.readEntry("preserveShapeScale", m_preserveShapeScale);
165 m_preserveShapeStretch = cfg.readEntry("preserveShapeStretch", m_preserveShapeStretch);
166}
167
169{
170 KConfigGroup globalCfg = KSharedConfig::openConfig()->group("LiquifyTool");
171 const int loadedMode = globalCfg.readEntry("mode", (int)m_mode);
172 if (loadedMode >= 0 && loadedMode < N_MODES) {
173 m_mode = (LiquifyMode) loadedMode;
174 } else if (loadedMode == N_MODES) {
176 } else {
177 m_mode = MOVE;
178 }
179
180 loadMode();
181}
182
183void KisLiquifyProperties::toXML(QDomElement *e) const
184{
185 QDomDocument doc = e->ownerDocument();
186 QDomElement liqEl = doc.createElement("liquify_properties");
187 e->appendChild(liqEl);
188
189 KisDomUtils::saveValue(&liqEl, "mode", (int)m_mode);
190 KisDomUtils::saveValue(&liqEl, "size", m_size);
191 KisDomUtils::saveValue(&liqEl, "amount", m_amount);
192 KisDomUtils::saveValue(&liqEl, "spacing", m_spacing);
193 KisDomUtils::saveValue(&liqEl, "sizeHasPressure", m_sizeHasPressure);
194 KisDomUtils::saveValue(&liqEl, "amountHasPressure", m_amountHasPressure);
195 KisDomUtils::saveValue(&liqEl, "reverseDirection", m_reverseDirection);
196 KisDomUtils::saveValue(&liqEl, "useWashMode", m_useWashMode);
197 KisDomUtils::saveValue(&liqEl, "flow", m_flow);
198 KisDomUtils::saveValue(&liqEl, "preserveShapeRotation", m_preserveShapeRotation);
199 KisDomUtils::saveValue(&liqEl, "preserveShapeScale", m_preserveShapeScale);
200 KisDomUtils::saveValue(&liqEl, "preserveShapeStretch", m_preserveShapeStretch);
201}
202
204{
206 bool result = false;
207
208 QDomElement liqEl;
209 int newMode = 0;
210
211 result =
212 KisDomUtils::findOnlyElement(e, "liquify_properties", &liqEl) &&
213
214 KisDomUtils::loadValue(liqEl, "mode", &newMode) &&
215 KisDomUtils::loadValue(liqEl, "size", &props.m_size) &&
216 KisDomUtils::loadValue(liqEl, "amount", &props.m_amount) &&
217 KisDomUtils::loadValue(liqEl, "spacing", &props.m_spacing) &&
218 KisDomUtils::loadValue(liqEl, "sizeHasPressure", &props.m_sizeHasPressure) &&
219 KisDomUtils::loadValue(liqEl, "amountHasPressure", &props.m_amountHasPressure) &&
220 KisDomUtils::loadValue(liqEl, "reverseDirection", &props.m_reverseDirection) &&
221 KisDomUtils::loadValue(liqEl, "useWashMode", &props.m_useWashMode) &&
222 KisDomUtils::loadValue(liqEl, "flow", &props.m_flow);
223
224 if (result && newMode >= 0 && newMode < N_MODES) {
225 props.m_mode = (LiquifyMode) newMode;
226 } else if (result && newMode == N_MODES) {
227 props.m_mode = RESTORE_SHAPE;
228 } else {
229 result = false;
230 }
231
232 if (result) {
233 KisDomUtils::loadValue(liqEl, "preserveShapeRotation", &props.m_preserveShapeRotation);
234 KisDomUtils::loadValue(liqEl, "preserveShapeScale", &props.m_preserveShapeScale);
235 KisDomUtils::loadValue(liqEl, "preserveShapeStretch", &props.m_preserveShapeStretch);
236 }
237
238 return props;
239}
240
241
242QDebug operator<<(QDebug dbg, const KisLiquifyProperties &props)
243{
244 dbg.nospace() << "\nKisLiquifyProperties(";
245 dbg.space() << "\n " << ppVar(props.mode());
246 dbg.space() << "\n " << ppVar(props.size());
247 dbg.space() << "\n " << ppVar(props.amount());
248 dbg.space() << "\n " << ppVar(props.spacing());
249 dbg.space() << "\n " << ppVar(props.sizeHasPressure());
250 dbg.space() << "\n " << ppVar(props.amountHasPressure());
251 dbg.space() << "\n " << ppVar(props.reverseDirection());
252 dbg.space() << "\n " << ppVar(props.useWashMode());
253 dbg.space() << "\n " << ppVar(props.flow());
254 dbg.space() << "\n " << ppVar(props.preserveShapeRotation());
255 dbg.space() << "\n " << ppVar(props.preserveShapeScale());
256 dbg.space() << "\n " << ppVar(props.preserveShapeStretch());
257 dbg.space() << "\n );\n";
258 return dbg.nospace();
259}
bool operator==(const KisLiquifyProperties &other) const
static bool supportsReverseDirection(LiquifyMode mode)
static bool supportsWashMode(LiquifyMode mode)
static KisLiquifyProperties fromXML(const QDomElement &e)
KisLiquifyProperties & operator=(const KisLiquifyProperties &rhs)
void toXML(QDomElement *e) const
#define ppVar(var)
Definition kis_debug.h:159
qreal defaultAmountForMode(KisLiquifyProperties::LiquifyMode mode)
QDebug operator<<(QDebug dbg, const KisLiquifyProperties &props)
QString liquifyModeString(KisLiquifyProperties::LiquifyMode mode)
void saveValue(QDomElement *parent, const QString &tag, const QSize &size)
bool findOnlyElement(const QDomElement &parent, const QString &tag, QDomElement *el, QStringList *errorMessages)
bool loadValue(const QDomElement &e, float *v)