Krita Source Code Documentation
Loading...
Searching...
No Matches
GridConfig.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2024 Grum999 <grum999@grum.fr>
3 *
4 * SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6#include "GridConfig.h"
7
8#include <QDomDocument>
9#include <QDomElement>
10
11#include "kis_grid_config.h"
12#include "kis_debug.h"
13
18
20 : QObject(0)
21 , d(new Private)
22{
24}
25
26GridConfig::GridConfig(QObject *parent)
27 : QObject(parent)
28 , d(new Private)
29{
30 d->gridConfig = new KisGridConfig();
31}
32
34{
35 delete d;
36}
37
38bool GridConfig::operator==(const GridConfig &other) const
39{
40 return (d->gridConfig == other.d->gridConfig);
41}
42
43bool GridConfig::operator!=(const GridConfig &other) const
44{
45 return !(operator==(other));
46}
47
48
50{
51 return d->gridConfig->showGrid();
52}
53
54void GridConfig::setVisible(bool visible)
55{
57}
58
59bool GridConfig::snap() const
60{
61 return d->gridConfig->showGrid();
62}
63
64void GridConfig::setSnap(bool snap)
65{
67}
68
69QPoint GridConfig::offset() const
70{
71 return d->gridConfig->offset();
72}
73
74void GridConfig::setOffset(QPoint offset)
75{
76 QPoint rangeOffset = QPoint(offset);
77 rangeOffset.setX(qBound(0, rangeOffset.x(), 500));
78 rangeOffset.setY(qBound(0, rangeOffset.y(), 500));
79 d->gridConfig->setOffset(rangeOffset);
80}
81
82QPoint GridConfig::spacing() const
83{
84 return d->gridConfig->spacing();
85}
86
87void GridConfig::setSpacing(QPoint spacing)
88{
89 QPoint rangeSpacing = QPoint(spacing);
90 if (rangeSpacing.x() < 1) {
91 rangeSpacing.setX(1);
92 }
93 if (rangeSpacing.y() < 1) {
94 rangeSpacing.setY(1);
95 }
96 d->gridConfig->setSpacing(rangeSpacing);
97}
98
100{
101 return d->gridConfig->xSpacingActive();
102}
103
105{
107}
108
110{
111 return d->gridConfig->ySpacingActive();
112}
113
115{
117}
118
120{
121 return d->gridConfig->subdivision();
122}
123
124void GridConfig::setSubdivision(int subdivision)
125{
126 d->gridConfig->setSubdivision(qBound(1, subdivision, 10));
127}
128
130{
131 return d->gridConfig->angleLeft();
132}
133
134void GridConfig::setAngleLeft(qreal angleLeft)
135{
136 d->gridConfig->setAngleLeft(qBound(0.0, angleLeft, 89.0));
137}
138
140{
141 return d->gridConfig->angleRight();
142}
143
144void GridConfig::setAngleRight(qreal angleRight)
145{
146 d->gridConfig->setAngleRight(qBound(0.0, angleRight, 89.0));
147}
148
150{
151 return d->gridConfig->angleLeftActive();
152}
153
155{
157}
158
160{
161 return d->gridConfig->angleRightActive();
162}
163
165{
167}
168
170{
171 return d->gridConfig->cellSpacing();
172}
173
174void GridConfig::setCellSpacing(int cellSpacing)
175{
176 d->gridConfig->setCellSpacing(qBound(10, cellSpacing, 1000));
177}
178
180{
181 return d->gridConfig->cellSize();
182}
183
184void GridConfig::setCellSize(int cellSize)
185{
186 d->gridConfig->setCellSize(qBound(10, cellSize, 1000));
187}
188
189QString GridConfig::type() const
190{
193 return "isometric";
194 }
196 return "isometric_legacy";
197 }
198 return "rectangular";
199}
200
201void GridConfig::setType(const QString &gridType)
202{
203 if(gridType == "isometric") {
205 }
206 else if(gridType == "isometric_legacy") {
208 }
209 else {
211 }
212}
213
215{
217}
218
223
228
233
235{
236 return d->gridConfig->angleAspectLocked();
237}
238
243
245{
248 return "dashed";
249 }
251 return "dotted";
252 }
253 return "solid";
254}
255
256void GridConfig::setLineTypeMain(const QString &lineType)
257{
258 if(lineType == "dashed") {
260 }
261 else if(lineType == "dotted") {
263 }
264 else {
266 }
267}
268
270{
273 return "dashed";
274 }
276 return "dotted";
277 }
278 return "solid";
279}
280
293
295{
298 return "dashed";
299 }
301 return "dotted";
302 }
304 return "none";
305 }
306 return "solid";
307}
308
309void GridConfig::setLineTypeVertical(const QString &lineType)
310{
311 if(lineType == "dashed") {
313 }
314 else if(lineType == "dotted") {
316 }
317 else if(lineType == "none") {
319 }
320 else {
322 }
323}
324
325
327{
328 return d->gridConfig->colorMain();
329}
330
331void GridConfig::setColorMain(QColor colorMain)
332{
334}
335
337{
338 return d->gridConfig->colorSubdivision();
339}
340
345
347{
348 return d->gridConfig->colorVertical();
349}
350
351void GridConfig::setColorVertical(QColor colorVertical)
352{
354}
355
356bool GridConfig::fromXml(const QString &xmlContent) const
357{
358 QDomDocument doc = QDomDocument();
359 QString errorMsg {""};
360 int errorLine {0}, errorColumn {0};
361
362 if(doc.setContent(xmlContent, &errorMsg, &errorLine, &errorColumn)) {
363
364 return d->gridConfig->loadDynamicDataFromXml(doc.documentElement());
365 }
366
367 return false;
368}
369
370QString GridConfig::toXml() const
371{
372 QDomDocument doc = QDomDocument();
373 QDomElement elt = d->gridConfig->saveDynamicDataToXml(doc, "grid");
374 doc.appendChild(elt);
375 return doc.toString(2);
376}
377
378
380{
381 return *d->gridConfig;
382}
383
384
void setLineTypeSubdivision(const QString &lineType)
Set grid subdivision line type.
void setVisible(bool visible)
Set grid visibility for document.
void setSpacingAspectLocked(bool spacingAspectLocked)
Set status of "Aspect locked" property for spacing values (X and Y values are linked to keep ratio) S...
bool angleLeftActive() const
Returns if left angle grid is active. Spacing value is used for grid type "isometric".
void setOffsetAspectLocked(bool offsetAspectLocked)
Set status of "Aspect locked" property for offset values (X and Y values are linked to keep ratio)
bool operator==(const GridConfig &other) const
bool visible() const
Returns grid visibility for document.
void setSnap(bool snap)
Activate or deactivate snap to grid for document.
QPoint offset() const
Returns grid offset (in pixels, from origin) for document.
QPoint spacing() const
Returns grid spacing (in pixels) for document. Spacing value is used for grid type "rectangular".
QString toXml() const
Save grid definition as an XML document.
QColor colorMain() const
Returns grid main line color.
void setAngleRightActive(bool active)
Set right angle grid active. Spacing value is used for grid type "isometric".
void setAngleAspectLocked(bool angleAspectLocked)
Set status of "Aspect locked" property for angles values (left and right angles values are linked to ...
Private * d
Definition GridConfig.h:416
QString lineTypeMain() const
Returns grid main line type.
bool spacingAspectLocked() const
Returns status of "Aspect locked" property for spacing values (mean, X and Y values are linked to kee...
int subdivision() const
Returns number of grid subdivision for document. Subdivision value is used for grid type "rectangular...
void setOffset(QPoint offset)
Define grid offset (in pixels, from origin) for document.
qreal angleLeft() const
Returns left angle (in degrees) of isometric grid for document. AngleLeft value is used for grid type...
void setAngleRight(qreal angleRight)
Set right angle (in degrees) of isometric grid for document. AngleRight value is used for grid type "...
KisGridConfig gridConfig() const
void setColorSubdivision(QColor colorSubdivision)
Set grid subdivision line color ColorSubdivision value is used for grid type "rectangular".
QString lineTypeSubdivision() const
Returns grid subdivision line type.
bool snap() const
Returns snap to grid status for document.
void setLineTypeMain(const QString &lineType)
Set grid main line type.
bool angleRightActive() const
Returns if right angle grid is active. Spacing value is used for grid type "isometric".
bool operator!=(const GridConfig &other) const
void setSubdivision(int subdivision)
Set number of grid subdivision for document. Subdivision value is used for grid type "rectangular".
void setCellSize(int cellSize)
Set grid cell size (in pixels) for document. Cell spacing value is used for grid type "isometric".
bool fromXml(const QString &xmlContent) const
Load grid definition from an XML document.
QColor colorSubdivision() const
Returns grid subdivision line color ColorSubdivision value is used for grid type "rectangular".
QString lineTypeVertical() const
Returns grid vertical line type.
bool spacingActiveHorizontal() const
Returns if horizontal grid spacing is active. Spacing value is used for grid type "rectangular".
void setType(const QString &gridType)
Set current grid type applied for document.
QString type() const
Returns current grid type applied for document.
void setSpacingActiveVertical(bool active)
Set vertical grid spacing active. Spacing value is used for grid type "rectangular".
void setAngleLeft(qreal angleLeft)
Set left angle (in degrees) of isometric grid for document. AngleLeft value is used for grid type "is...
void setColorMain(QColor colorMain)
Set grid main line color.
bool offsetAspectLocked() const
Returns status of "Aspect locked" property for offset values (X and Y values are linked to keep ratio...
bool spacingActiveVertical() const
Returns if vertical grid spacing is active. Spacing value is used for grid type "rectangular".
void setAngleLeftActive(bool active)
Set left angle grid active. Spacing value is used for grid type "isometric".
void setCellSpacing(int cellSpacing)
Set grid cell spacing for document. Cell spacing value is used for grid type "isometric_legacy".
void setColorVertical(QColor colorVertical)
Set grid vertical line color ColorSubdivision value is used for grid type "isometric".
void setLineTypeVertical(const QString &lineType)
Set grid vertical line type.
bool angleAspectLocked() const
Returns status of "Aspect locked" property for angles values (mean, left and right angles values are ...
int cellSpacing() const
Returns grid cell spacing (in pixels) for document. Cell spacing value is used for grid type "isometr...
QColor colorVertical() const
Returns grid vertical line color ColorSubdivision value is used for grid type "isometric".
qreal angleRight() const
Returns right angle (in degrees) of isometric grid for document. AngleRight value is used for grid ty...
void setSpacingActiveHorizontal(bool active)
Set horizontal grid spacing active. Spacing value is used for grid type "rectangular".
int cellSize() const
Returns grid cell border size (in pixels) for document. Cell spacing value is used for grid type "iso...
void setSpacing(QPoint spacing)
Set grid spacing (in pixels) for document. Spacing value is used for grid type "rectangular".
~GridConfig() override
GridConfig(KisGridConfig *guidesConfig)
LineTypeInternal lineTypeMain() const
QColor colorVertical() const
bool loadDynamicDataFromXml(const QDomElement &parent)
GridType gridType() const
void setSnapToGrid(bool value)
QDomElement saveDynamicDataToXml(QDomDocument &doc, const QString &tag) const
void setAngleLeft(qreal angle)
QColor colorMain() const
void setSubdivision(int value)
bool ySpacingActive() const
void setXSpacingActive(bool value)
void setOffset(const QPoint &value)
qreal angleRight() const
void setLineTypeMain(LineTypeInternal value)
bool xSpacingActive() const
void setColorSubdivision(const QColor &value)
void setAngleLeftActive(bool value)
void setCellSpacing(int spacing)
void setColorVertical(const QColor &value)
QPoint offset() const
LineTypeInternal lineTypeSubdivision() const
bool angleRightActive() const
void setGridType(GridType type)
bool angleLeftActive() const
void setLineTypeVertical(LineTypeInternal value)
int cellSize() const
void setLineTypeSubdivision(LineTypeInternal value)
void setAngleRight(qreal angle)
bool spacingAspectLocked() const
QColor colorSubdivision() const
void setYSpacingActive(bool value)
bool angleAspectLocked() const
void setSpacingAspectLocked(bool value)
QPoint spacing() const
int subdivision() const
int cellSpacing() const
void setSpacing(const QPoint &value)
LineTypeInternal lineTypeVertical() const
void setOffsetAspectLocked(bool value)
void setCellSize(int spacing)
void setAngleRightActive(bool value)
void setShowGrid(bool value)
void setColorMain(const QColor &value)
bool showGrid() const
bool offsetAspectLocked() const
qreal angleLeft() const
void setAngleAspectLocked(bool value)
KisGridConfig * gridConfig