Krita Source Code Documentation
Loading...
Searching...
No Matches
MyPaintPaintOpSettings.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2020 Ashwin Dhakaita <ashwingpdhakaita@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
8
9#include <cmath>
12
13#include <KisValueCache.h>
14
15
17{
18 struct Cache
19 {
20 qreal paintOpSize{0.0};
21 qreal paintOpAngle{0.0}; // the original angle value as seen by KisPaintOpSettings interface
22 qreal offsetValue{0.0};
23 };
24
27
30
31 {
33 data.read(m_q);
34 value.offsetValue = data.strengthValue;
35 }
36
37 {
39 data.read(m_q);
40 value.paintOpSize = 2 * exp(data.strengthValue);
41 }
42
43 {
45 data.read(m_q);
46 value.paintOpAngle = 180.0 - data.strengthValue;
47 }
48
49 return value;
50 }
51
53 };
54
56 : cache(q)
57 {
58 }
59
61};
62
63
66 KisCurrentOutlineFetcher::ROTATION_OPTION,
67 resourcesInterface),
68 m_d(new Private(this))
69{
70}
71
75
77{
79 data.read(this);
80 data.strengthValue = log(0.5 * value);
81 data.write(this);
82}
83
85{
86 return m_d->cache.value().paintOpSize;
87}
88
90{
92 data.read(this);
93
95
96 if (value > 180.0) {
97 value -= 180.0;
98 }
99
104 value = 180.0 - value;
105
106 data.strengthValue = value;
107 data.write(this);
108}
109
111{
112 return m_d->cache.value().paintOpAngle;
113}
114
116{
118 data.read(this);
119 data.strengthValue = value;
120 data.write(this);
121}
122
124{
126 data.read(this);
127 return data.strengthValue;
128}
129
131{
132 return true;
133}
134
136{
137 QStringList allKeys = preserveProperties;
138 allKeys << MYPAINT_JSON;
140}
141
147
149{
151
152 if (mode.isVisible) {
153 qreal finalScale = 1.0;
154
155 const qreal offset = m_d->cache.value().offsetValue;
156
157 qreal radius = 0.5 * m_d->cache.value().paintOpSize;
158 radius = radius + 2 * radius * offset;
159 radius = qBound(3.5, radius, 500.0);
160
161 QPainterPath realOutline;
162 realOutline.addEllipse(QPointF(), radius, radius);
163
164 path = outlineFetcher()->fetchOutline(info, this, realOutline, mode, alignForZoom, finalScale);
165
166 if (mode.showTiltDecoration) {
167 QPainterPath tiltLine = makeTiltIndicator(info,
168 realOutline.boundingRect().center(),
169 realOutline.boundingRect().width() * 0.5,
170 3.0);
171 path.addPath(outlineFetcher()->fetchOutline(info, this, tiltLine, mode, alignForZoom, finalScale, 0.0, true, realOutline.boundingRect().center().x(), realOutline.boundingRect().center().y()));
172 }
173 }
174
175 return path;
176}
float value(const T *src, size_t ch)
const QString MYPAINT_JSON
KisOptimizedBrushOutline fetchOutline(const KisPaintInformation &info, const KisPaintOpSettingsSP settings, const KisOptimizedBrushOutline &originalOutline, const KisPaintOpSettings::OutlineMode &mode, qreal alignForZoom, qreal additionalScale=1.0, qreal additionalRotation=0.0, bool tilt=false, qreal tiltcenterx=1.0, qreal tiltcentery=1.0) const
const QScopedPointer< Private > m_d
qreal paintOpAngle() const override
void setPaintOpAngle(qreal value) override
void setPaintOpOpacity(qreal value) override
qreal paintOpSize() const override
KisMyPaintOpSettings(KisResourcesInterfaceSP resourcesInterface)
KisOptimizedBrushOutline brushOutline(const KisPaintInformation &info, const OutlineMode &mode, qreal alignForZoom) override
void resetSettings(const QStringList &preserveProperties=QStringList()) override
void setPaintOpSize(qreal value) override
const KisCurrentOutlineFetcher * outlineFetcher() const
std::enable_if< std::is_floating_point< T >::value, T >::type normalizeAngleDegrees(T a)
Definition kis_global.h:132
void write(KisPropertiesConfiguration *setting) const
bool read(const KisPropertiesConfiguration *setting)
KisValueCache< CacheInitializer > cache
static QPainterPath makeTiltIndicator(KisPaintInformation const &info, QPointF const &start, qreal lengthScale, qreal angle)