Krita Source Code Documentation
Loading...
Searching...
No Matches
spray_brush.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2008-2010, 2013 Lukáš Tvrdý <lukast.dev@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#ifndef _SPRAY_BRUSH_H_
8#define _SPRAY_BRUSH_H_
9
10#include <KoColor.h>
11
12#include "kis_types.h"
13#include "kis_painter.h"
14
15#include <kis_random_source.h>
16#include "KisColorOptionData.h"
18#include "KisSprayOpOption.h"
21
22
23
24
25
26#include <QImage>
27#include <kis_brush.h>
28
30
32{
33
34public:
35 SprayBrush();
37
38 void paint(KisPaintDeviceSP dab,
40 const KisPaintInformation& info,
41 qreal rotation,
42 qreal scale,
43 qreal additionalScale,
44 const KoColor &color,
45 const KoColor &bgColor);
46 void setProperties(KisSprayOpOptionData * properties,
47 KisColorOptionData * colorProperties,
48 KisSprayShapeOptionData * shapeProperties,
49 KisSprayShapeDynamicsOptionData * shapeDynamicsProperties,
50 KisBrushSP brush);
51
53
54private:
55 int m_dabSeqNo {0};
57 qreal m_radius {1.0};
58 quint32 m_particlesCount {1};
59 quint8 m_dabPixelSize {1};
60
61 KisPainter * m_painter {nullptr};
65
67
73
76
77private:
78 template <typename AngularDistribution>
81 const KisPaintInformation& info,
82 qreal rotation,
83 qreal scale,
84 qreal additionalScale,
85 const KoColor &color,
86 const KoColor &bgColor,
87 const AngularDistribution &angularDistribution);
88 template <typename AngularDistribution, typename RadialDistribution>
91 const KisPaintInformation& info,
92 qreal rotation,
93 qreal scale,
94 qreal additionalScale,
95 const KoColor &color,
96 const KoColor &bgColor,
97 const AngularDistribution &angularDistribution,
98 const RadialDistribution &radialDistribution);
100 qreal rotationAngle(KisRandomSourceSP randomSource);
102 void paintParticle(KisRandomAccessorSP &writeAccessor, const KoColor &color, qreal rx, qreal ry);
103 void paintCircle(KisPainter * painter, qreal x, qreal y, qreal radius);
104 void paintEllipse(KisPainter * painter, qreal x, qreal y, qreal a, qreal b, qreal angle);
105 void paintRectangle(KisPainter * painter, qreal x, qreal y, qreal width, qreal height, qreal angle);
106
107 void paintOutline(KisPaintDeviceSP dev, const KoColor& painterColor, qreal posX, qreal posY, qreal radius);
108
110 inline qreal linearInterpolation(qreal a, qreal b, qreal weight) const {
111 return (1.0 - weight) * a + weight * b;
112 }
113
114 // TODO: move this somewhere where I can reuse it
116 inline qreal rad2deg(qreal rad) const {
117 return rad * (180.0 / M_PI);
118 }
119
121 inline qreal deg2rad(quint16 deg) const {
122 return deg * (M_PI / 180.0);
123 }
124};
125
126#endif
KisMagneticGraph::vertex_descriptor source(typename KisMagneticGraph::edge_descriptor e, KisMagneticGraph g)
void setFixedDab(KisFixedPaintDeviceSP dab)
qreal deg2rad(quint16 deg) const
convert degrees to radians
void paintImpl(KisPaintDeviceSP dab, KisPaintDeviceSP source, const KisPaintInformation &info, qreal rotation, qreal scale, qreal additionalScale, const KoColor &color, const KoColor &bgColor, const AngularDistribution &angularDistribution)
qreal m_radius
Definition spray_brush.h:57
KoColor m_inkColor
Definition spray_brush.h:56
KisPainter * m_painter
Definition spray_brush.h:61
const KisSprayShapeDynamicsOptionData * m_shapeDynamicsProperties
Definition spray_brush.h:72
const KisSprayOpOptionData * m_sprayOpOptionData
Definition spray_brush.h:68
KisBrushSP m_brush
Definition spray_brush.h:74
void setProperties(KisSprayOpOptionData *properties, KisColorOptionData *colorProperties, KisSprayShapeOptionData *shapeProperties, KisSprayShapeDynamicsOptionData *shapeDynamicsProperties, KisBrushSP brush)
KisPaintDeviceSP m_imageDevice
Definition spray_brush.h:62
void paint(KisPaintDeviceSP dab, KisPaintDeviceSP source, const KisPaintInformation &info, qreal rotation, qreal scale, qreal additionalScale, const KoColor &color, const KoColor &bgColor)
const KisSprayShapeOptionData * m_shapeProperties
Definition spray_brush.h:71
KisFixedPaintDeviceSP m_fixedDab
Definition spray_brush.h:75
void paintEllipse(KisPainter *painter, qreal x, qreal y, qreal a, qreal b, qreal angle)
KoColorTransformation * m_transfo
Definition spray_brush.h:66
KisSprayOpOption * m_sprayOpOption
Definition spray_brush.h:69
qreal rotationAngle(KisRandomSourceSP randomSource)
rotation in radians according the settings (gauss distribution, uniform distribution or fixed angle)
QImage m_brushQImage
Definition spray_brush.h:63
void paintCircle(KisPainter *painter, qreal x, qreal y, qreal radius)
void paintRectangle(KisPainter *painter, qreal x, qreal y, qreal width, qreal height, qreal angle)
void paintParticle(KisRandomAccessorSP &writeAccessor, const KoColor &color, qreal rx, qreal ry)
Paints Wu Particle.
QImage m_transformed
Definition spray_brush.h:64
quint32 m_particlesCount
Definition spray_brush.h:58
quint8 m_dabPixelSize
Definition spray_brush.h:59
qreal rad2deg(qreal rad) const
convert radians to degrees
qreal linearInterpolation(qreal a, qreal b, qreal weight) const
mix a with b.b mix with weight and a with 1.0 - weight
const KisColorOptionData * m_colorProperties
Definition spray_brush.h:70
void paintOutline(KisPaintDeviceSP dev, const KoColor &painterColor, qreal posX, qreal posY, qreal radius)
#define M_PI
Definition kis_global.h:111