Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_brush.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 1999 Matthias Elter <me@kde.org>
3 * SPDX-FileCopyrightText: 2002 Patrick Julien <freak@codepimps.org>
4 * SPDX-FileCopyrightText: 2004 Boudewijn Rempt <boud@valdyas.org>
5 *
6 * SPDX-License-Identifier: GPL-2.0-or-later
7 */
8#ifndef KIS_BRUSH_
9#define KIS_BRUSH_
10
11#include <QImage>
12
13#include <KoResource.h>
14
15#include <kis_types.h>
16#include <kis_shared.h>
17#include <kis_dab_shape.h>
18#include <kritabrush_export.h>
19
20class QString;
21class KoColor;
22class KoColorSpace;
23
29
37
44
45static const qreal DEFAULT_SOFTNESS_FACTOR = 1.0;
46static const qreal DEFAULT_LIGHTNESS_STRENGTH = 1.0;
47
48class KisBrush;
50
66class BRUSH_EXPORT KisBrush : public KoResource
67{
68public:
70 {
71 public:
72 virtual ~ColoringInformation();
73 virtual const quint8* color() const = 0;
74 virtual void nextColumn() = 0;
75 virtual void nextRow() = 0;
76 };
77
78protected:
79
81 {
82 public:
83 PlainColoringInformation(const quint8* color);
85 const quint8* color() const override ;
86 void nextColumn() override;
87 void nextRow() override;
88 private:
89 const quint8* m_color;
90 };
91
93 {
94
95 public:
96
99 const quint8* color() const override ;
100 void nextColumn() override;
101 void nextRow() override;
102
103 private:
104
107 };
108
109public:
110
111 KisBrush();
112 KisBrush(const QString& filename);
113 ~KisBrush() override;
114
115 KisBrush(const KisBrush &rhs);
116 KisBrush &operator=(const KisBrush &rhs) = delete;
117
118 virtual qreal userEffectiveSize() const = 0;
119 virtual void setUserEffectiveSize(qreal value) = 0;
120
121 QPair<QString, QString> resourceType() const override {
122 return QPair<QString, QString>(ResourceType::Brushes, "");
123 }
124
130 virtual QImage brushTipImage() const;
131
138 virtual KisFixedPaintDeviceSP outlineSourceImage() const;
139
140
146 virtual void setSpacing(double spacing);
147
151 double spacing() const;
152
153 void setAutoSpacing(bool active, qreal coeff);
154
155 bool autoSpacingActive() const;
156 qreal autoSpacingCoeff() const;
157
158
162 qint32 width() const;
163
167 qint32 height() const;
168
172 virtual qint32 maskWidth(KisDabShape const&, qreal subPixelX, qreal subPixelY, const KisPaintInformation& info) const;
173
177 virtual qint32 maskHeight(KisDabShape const&, qreal subPixelX, qreal subPixelY, const KisPaintInformation& info) const;
178
188 virtual QSizeF characteristicSize(KisDabShape const&) const;
189
193 double maskAngle(double angle = 0) const;
194
201 virtual quint32 brushIndex() const;
202
206 virtual enumBrushType brushType() const;
207
208 QPointF hotSpot(KisDabShape const&, const KisPaintInformation& info) const;
209
214 virtual bool canPaintFor(const KisPaintInformation& /*info*/);
215
216
223 virtual void notifyStrokeStarted();
224
231 virtual void notifyBrushIsGoingToBeClonedForStroke();
232
242 virtual void prepareForSeqNo(const KisPaintInformation& info, int seqNo);
243
247 virtual KisFixedPaintDeviceSP paintDevice(const KoColorSpace * colorSpace,
248 KisDabShape const&,
249 const KisPaintInformation& info,
250 double subPixelX = 0, double subPixelY = 0) const;
251
255 void mask(KisFixedPaintDeviceSP dst,
256 const KoColor& color,
257 KisDabShape const& shape,
258 const KisPaintInformation& info,
259 double subPixelX = 0, double subPixelY = 0,
260 qreal softnessFactor = DEFAULT_SOFTNESS_FACTOR, qreal lightnessStrength = DEFAULT_LIGHTNESS_STRENGTH) const;
261
265 void mask(KisFixedPaintDeviceSP dst,
266 const KisPaintDeviceSP src,
267 KisDabShape const& shape,
268 const KisPaintInformation& info,
269 double subPixelX = 0, double subPixelY = 0,
270 qreal softnessFactor = DEFAULT_SOFTNESS_FACTOR, qreal lightnessStrength = DEFAULT_LIGHTNESS_STRENGTH) const;
271
272
273 virtual enumBrushApplication brushApplication() const;
274
275 virtual void setBrushApplication(enumBrushApplication brushApplication);
276
277 virtual bool preserveLightness() const;
278
279 virtual bool applyingGradient() const;
280
281 virtual void setGradient(KoAbstractGradientSP gradient);
282
283
304 virtual void generateMaskAndApplyMaskOrCreateDab(KisFixedPaintDeviceSP dst,
305 ColoringInformation* coloringInfo,
306 KisDabShape const&,
307 const KisPaintInformation& info,
308 double subPixelX, double subPixelY,
309 qreal softnessFactor, qreal lightnessStrength) const;
310
311 void generateMaskAndApplyMaskOrCreateDab(KisFixedPaintDeviceSP dst,
312 ColoringInformation* coloringInfo,
313 KisDabShape const&,
314 const KisPaintInformation& info,
315 double subPixelX = 0, double subPixelY = 0,
316 qreal softnessFactor = DEFAULT_SOFTNESS_FACTOR) const;
317
318
322 virtual void toXML(QDomDocument& , QDomElement&) const;
323
324 static KisBrushSP fromXML(const QDomElement& element, KisResourcesInterfaceSP resourcesInterface);
325
326 static KoResourceLoadResult fromXMLLoadResult(const QDomElement& element, KisResourcesInterfaceSP resourcesInterface);
327
328 virtual KisOptimizedBrushOutline outline(bool forcePreciseOutline = false) const;
329
330 virtual void setScale(qreal _scale);
331 qreal scale() const;
332 virtual void setAngle(qreal _angle);
333 qreal angle() const;
334
335 void clearBrushPyramid();
336
337 virtual void lodLimitations(KisPaintopLodLimitations *l) const;
338
339 virtual bool supportsCaching() const;
340
341 virtual void coldInitBrush();
342
343 static const QString brushTypeMetaDataKey;
344
345protected:
346
347 void setWidth(qint32 width);
348
349 void setHeight(qint32 height);
350
351 void setHotSpot(QPointF);
352
356 virtual void setBrushType(enumBrushType type);
357
358public:
359
364 virtual void setBrushTipImage(const QImage& image);
365
374 virtual bool isPiercedApprox() const;
375
376protected:
377
378 void resetOutlineCache();
379 void generateOutlineCache();
380 bool outlineCacheIsValid() const;
381
382 void predefinedBrushToXML(const QString &type, QDomElement& e) const;
383
384private:
385
386 struct Private;
387 Private* const d;
388
389};
390
392
393#endif // KIS_BRUSH_
394
float value(const T *src, size_t ch)
KisMagneticGraph::vertex_descriptor source(typename KisMagneticGraph::edge_descriptor e, KisMagneticGraph g)
virtual const quint8 * color() const =0
KisHLineConstIteratorSP m_iterator
Definition kis_brush.h:106
static const QString brushTypeMetaDataKey
Definition kis_brush.h:343
Private *const d
Definition kis_brush.h:387
QPair< QString, QString > resourceType() const override
Definition kis_brush.h:121
virtual qreal userEffectiveSize() const =0
KisBrush & operator=(const KisBrush &rhs)=delete
virtual void setUserEffectiveSize(qreal value)=0
enumBrushType
Definition kis_brush.h:30
@ IMAGE
Definition kis_brush.h:33
@ PIPE_IMAGE
Definition kis_brush.h:35
@ PIPE_MASK
Definition kis_brush.h:34
@ MASK
Definition kis_brush.h:32
@ INVALID
Definition kis_brush.h:31
static const qreal DEFAULT_LIGHTNESS_STRENGTH
Definition kis_brush.h:46
QSharedPointer< KisBrush > KisBrushSP
Definition kis_brush.h:49
QSharedPointer< KoAbstractGradient > KoAbstractGradientSP
Definition kis_brush.h:28
static const qreal DEFAULT_SOFTNESS_FACTOR
Definition kis_brush.h:45
enumBrushApplication
Definition kis_brush.h:38
@ ALPHAMASK
Definition kis_brush.h:39
@ IMAGESTAMP
Definition kis_brush.h:40
@ GRADIENTMAP
Definition kis_brush.h:42
@ LIGHTNESSMAP
Definition kis_brush.h:41
Q_DECLARE_METATYPE(KisPaintopLodLimitations)
const QString Brushes