Krita Source Code Documentation
Loading...
Searching...
No Matches
KisBrushModel.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2022 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#ifndef KISBRUSHMODEL_H
8#define KISBRUSHMODEL_H
9
10#include <QtGlobal>
11#include <QSize>
12#include <QGuiApplication>
13#include <QFont>
14#include <KoResourceSignature.h>
15#include <lager/cursor.hpp>
16#include <lager/extra/qt.hpp>
17#include <boost/operators.hpp>
18#include <optional>
19
21
22#include "kritabrush_export.h"
23
24// TODO: move enumBrushApplication into a separate file
25#include <kis_brush.h>
26
27namespace KisBrushModel {
28struct BRUSH_EXPORT CommonData : public boost::equality_comparable<CommonData>
29{
30 inline friend bool operator==(const CommonData &lhs, const CommonData &rhs) {
31 return qFuzzyCompare(lhs.angle, rhs.angle) &&
32 qFuzzyCompare(lhs.spacing, rhs.spacing) &&
33 lhs.useAutoSpacing == rhs.useAutoSpacing &&
35 }
36
37 qreal angle = 0.0;
38 qreal spacing = 0.05;
39 bool useAutoSpacing = false;
40 qreal autoSpacingCoeff = 1.0;
41
42 // TODO: preview image
43};
44
49
55
56struct BRUSH_EXPORT AutoBrushGeneratorData : public boost::equality_comparable<AutoBrushGeneratorData>
57{
58 inline friend bool operator==(const AutoBrushGeneratorData &lhs, const AutoBrushGeneratorData &rhs) {
59 return qFuzzyCompare(lhs.diameter, rhs.diameter) &&
60 qFuzzyCompare(lhs.ratio, rhs.ratio) &&
63 lhs.spikes == rhs.spikes &&
64 lhs.antialiasEdges == rhs.antialiasEdges &&
65 lhs.shape == rhs.shape &&
66 lhs.type == rhs.type &&
67 lhs.curveString == rhs.curveString;
68 }
69
70 qreal diameter = 42.0;
71 qreal ratio = 1.0;
72 qreal horizontalFade = 1.0;
73 qreal verticalFade = 1.0;
74 int spikes = 2;
75 bool antialiasEdges = true;
78 QString curveString;
79};
80
81struct BRUSH_EXPORT AutoBrushData : public boost::equality_comparable<AutoBrushData>
82{
83 inline friend bool operator==(const AutoBrushData &lhs, const AutoBrushData &rhs) {
84 return qFuzzyCompare(lhs.randomness, rhs.randomness) &&
85 qFuzzyCompare(lhs.density, rhs.density) &&
86 lhs.generator == rhs.generator;
87 }
88
89 qreal randomness = 0.0;
90 qreal density = 1.0;
92};
93
94struct BRUSH_EXPORT PredefinedBrushData : public boost::equality_comparable<PredefinedBrushData>
95{
96 inline friend bool operator==(const PredefinedBrushData &lhs, const PredefinedBrushData &rhs) {
97 return lhs.resourceSignature == rhs.resourceSignature &&
98 lhs.subtype == rhs.subtype &&
99 lhs.baseSize == rhs.baseSize &&
100 qFuzzyCompare(lhs.scale, rhs.scale) &&
101 lhs.application == rhs.application &&
102 lhs.brushType == rhs.brushType &&
109 }
110
112
113 QString subtype;
114 QSize baseSize = QSize(42, 42);
115 qreal scale = 1.0;
117 enumBrushType brushType = MASK;
118 bool hasColorAndTransparency = false;
119 bool autoAdjustMidPoint = true;
120 quint8 adjustmentMidPoint = 127;
121 qreal brightnessAdjustment = 0.0;
122 qreal contrastAdjustment = 0.0;
124};
125
126struct BRUSH_EXPORT TextBrushData : boost::equality_comparable<TextBrushData>
127{
128 inline friend bool operator==(const TextBrushData &lhs, const TextBrushData &rhs) {
129 return lhs.baseSize == rhs.baseSize &&
130 qFuzzyCompare(lhs.scale, rhs.scale) &&
131 lhs.text == rhs.text &&
132 lhs.font == rhs.font &&
133 lhs.usePipeMode == rhs.usePipeMode;
134 }
135
136 QSize baseSize = QSize(42, 42);
137 qreal scale = 1.0;
138 QString text = "The quick brown fox ate your text";
139 QString font = QGuiApplication::font().toString();
140 bool usePipeMode = false;
141};
142
148
149struct BRUSH_EXPORT BrushData : public boost::equality_comparable<BrushData> {
150 inline friend bool operator==(const BrushData &lhs, const BrushData &rhs) {
151 return lhs.common == rhs.common &&
152 lhs.type == rhs.type &&
153 lhs.autoBrush == rhs.autoBrush &&
154 lhs.predefinedBrush == rhs.predefinedBrush &&
155 lhs.textBrush == rhs.textBrush;
156 }
157
169
170 void write(KisPropertiesConfiguration *settings) const;
171 static std::optional<BrushData> read(const KisPropertiesConfiguration *settings, KisResourcesInterfaceSP resourcesInterface);
172};
173
174
176qreal BRUSH_EXPORT effectiveSizeForBrush(BrushType type,
177 const AutoBrushData &autoBrush,
178 const PredefinedBrushData &predefinedBrush,
179 const TextBrushData &textBrush);
180qreal BRUSH_EXPORT effectiveSizeForBrush(const BrushData &brush);
181
182
183void BRUSH_EXPORT setEffectiveSizeForBrush(const BrushType type,
184 AutoBrushData &autoBrush,
185 PredefinedBrushData &predefinedBrush,
186 TextBrushData &textBrush,
187 qreal value);
188
189qreal BRUSH_EXPORT lightnessModeActivated(BrushType type,
190 const PredefinedBrushData &predefinedBrush);
191
192}
193
194#endif // KISBRUSHMODEL_H
float value(const T *src, size_t ch)
A simple wrapper object for the main information about the resource.
static bool qFuzzyCompare(half p1, half p2)
enumBrushType
Definition kis_brush.h:30
@ MASK
Definition kis_brush.h:32
enumBrushApplication
Definition kis_brush.h:38
@ ALPHAMASK
Definition kis_brush.h:39
qreal effectiveSizeForBrush(BrushType type, const AutoBrushData &autoBrush, const PredefinedBrushData &predefinedBrush, const TextBrushData &textBrush)
KisPaintopLodLimitations brushLodLimitations(const BrushData &data)
qreal lightnessModeActivated(BrushType type, const PredefinedBrushData &predefinedBrush)
void setEffectiveSizeForBrush(const BrushType type, AutoBrushData &autoBrush, PredefinedBrushData &predefinedBrush, TextBrushData &textBrush, qreal value)
friend bool operator==(const AutoBrushData &lhs, const AutoBrushData &rhs)
AutoBrushGeneratorData generator
friend bool operator==(const AutoBrushGeneratorData &lhs, const AutoBrushGeneratorData &rhs)
friend bool operator==(const BrushData &lhs, const BrushData &rhs)
PredefinedBrushData predefinedBrush
friend bool operator==(const CommonData &lhs, const CommonData &rhs)
KoResourceSignature resourceSignature
friend bool operator==(const PredefinedBrushData &lhs, const PredefinedBrushData &rhs)
friend bool operator==(const TextBrushData &lhs, const TextBrushData &rhs)