Krita Source Code Documentation
Loading...
Searching...
No Matches
KisImageBrushesPipe Class Reference
+ Inheritance diagram for KisImageBrushesPipe:

Public Member Functions

void coldInitBrush ()
 
int currentBrushIndex () override
 
 KisImageBrushesPipe ()
 
void makeMaskImage (bool preserveAlpha)
 
void notifyStrokeStarted () override
 
const KisPipeBrushParasiteparasite () const
 
bool saveToDevice (QIODevice *dev) const
 
void setAdjustmentMidPoint (quint8 value)
 
void setAutoAdjustMidPoint (bool value)
 
void setBrightnessAdjustment (qreal value)
 
void setContrastAdjustment (qreal value)
 
void setParasite (const KisPipeBrushParasite &parasite)
 
- Public Member Functions inherited from KisBrushesPipe< KisGbrBrush >
QVector< QSharedPointer< KisGbrBrush > > brushes ()
 
virtual void clear ()
 
QSharedPointer< KisGbrBrushcurrentBrush (const KisPaintInformation &info)
 
QSharedPointer< KisGbrBrushfirstBrush () const
 
void generateMaskAndApplyMaskOrCreateDab (KisFixedPaintDeviceSP dst, KisBrush::ColoringInformation *coloringInformation, KisDabShape const &shape, const KisPaintInformation &info, double subPixelX, double subPixelY, qreal softnessFactor, qreal lightnessStrength=DEFAULT_LIGHTNESS_STRENGTH)
 
bool hasColorAndTransparency () const
 
bool isImageType () const
 
 KisBrushesPipe ()
 
 KisBrushesPipe (const KisBrushesPipe &rhs)
 
QSharedPointer< KisGbrBrushlastBrush () const
 
qint32 maskHeight (KisDabShape const &shape, double subPixelX, double subPixelY, const KisPaintInformation &info)
 
qint32 maskWidth (KisDabShape const &shape, double subPixelX, double subPixelY, const KisPaintInformation &info)
 
void notifyBrushIsGoingToBeClonedForStroke ()
 
KisFixedPaintDeviceSP paintDevice (const KoColorSpace *colorSpace, KisDabShape const &shape, const KisPaintInformation &info, double subPixelX, double subPixelY)
 
void prepareForSeqNo (const KisPaintInformation &info, int seqNo)
 
void setAngle (qreal angle)
 
void setBrushApplication (enumBrushApplication brushApplication) const
 
void setGradient (KoAbstractGradientSP gradient) const
 
void setScale (qreal scale)
 
void setSpacing (double spacing)
 
void testingSelectNextBrush (const KisPaintInformation &info)
 
virtual ~KisBrushesPipe ()
 

Protected Member Functions

int chooseNextBrush (const KisPaintInformation &info) override
 
void updateBrushIndexes (KisRandomSourceSP randomSource, int seqNo) override
 
- Protected Member Functions inherited from KisBrushesPipe< KisGbrBrush >
void addBrush (QSharedPointer< KisGbrBrush > brush)
 
int sizeBrush ()
 

Static Protected Member Functions

static int selectPost (KisParasite::SelectionMode mode, int index, int rank, KisRandomSourceSP randomSource, int seqNo)
 
static int selectPre (KisParasite::SelectionMode mode, int index, int rank, const KisPaintInformation &info)
 

Private Attributes

int m_currentBrushIndex
 
bool m_isInitialized
 
KisPipeBrushParasite m_parasite
 

Additional Inherited Members

- Protected Attributes inherited from KisBrushesPipe< KisGbrBrush >
QVector< QSharedPointer< KisGbrBrush > > m_brushes
 

Detailed Description

Definition at line 12 of file kis_imagepipe_brush.cpp.

Constructor & Destructor Documentation

◆ KisImageBrushesPipe()

KisImageBrushesPipe::KisImageBrushesPipe ( )
inline

Definition at line 15 of file kis_imagepipe_brush.cpp.

Member Function Documentation

◆ chooseNextBrush()

int KisImageBrushesPipe::chooseNextBrush ( const KisPaintInformation & info)
inlineoverrideprotectedvirtual

Returns the index of the next brush that corresponds to the current values of info. This method is called before the dab is actually painted.

Implements KisBrushesPipe< KisGbrBrush >.

Definition at line 108 of file kis_imagepipe_brush.cpp.

108 {
109 quint32 brushIndex = 0;
110
113 }
114
115 for (int i = 0; i < m_parasite.dim; i++) {
116 int index = selectPre(m_parasite.selection[i],
117 m_parasite.index[i],
118 m_parasite.rank[i], info);
119
120 brushIndex += m_parasite.brushesCount[i] * index;
121 }
122 brushIndex %= (quint32)m_brushes.size();
123 m_currentBrushIndex = brushIndex;
124 return brushIndex;
125 }
QVector< QSharedPointer< KisGbrBrush > > m_brushes
void updateBrushIndexes(KisRandomSourceSP randomSource, int seqNo) override
KisPipeBrushParasite m_parasite
static int selectPre(KisParasite::SelectionMode mode, int index, int rank, const KisPaintInformation &info)
KisRandomSourceSP randomSource() const
KisParasite::SelectionMode selection[MaxDim]
qint32 brushesCount[MaxDim]
The total count of brushes in each dimension (helper)
qint32 index[MaxDim]
The current index in each dimension, so that the selection modes know where to start.
#define KIS_SAFE_ASSERT_RECOVER(cond)
Definition kis_assert.h:126

References KisPipeBrushParasite::brushesCount, KisPipeBrushParasite::dim, KisPipeBrushParasite::index, KIS_SAFE_ASSERT_RECOVER, KisBrushesPipe< KisGbrBrush >::m_brushes, m_currentBrushIndex, m_isInitialized, m_parasite, KisPaintInformation::randomSource(), KisPipeBrushParasite::rank, KisPipeBrushParasite::selection, selectPre(), and updateBrushIndexes().

◆ coldInitBrush()

void KisImageBrushesPipe::coldInitBrush ( )
inline

Definition at line 194 of file kis_imagepipe_brush.cpp.

194 {
195 Q_FOREACH (KisGbrBrushSP brush, m_brushes) {
196 brush->coldInitBrush();
197 }
198 }

References KisBrushesPipe< KisGbrBrush >::m_brushes.

◆ currentBrushIndex()

int KisImageBrushesPipe::currentBrushIndex ( )
inlineoverridevirtual

Returns the current index of the brush This method is called before the dab is actually painted.

The method is const, so no internal counters of the brush should change during its execution

Implements KisBrushesPipe< KisGbrBrush >.

Definition at line 143 of file kis_imagepipe_brush.cpp.

143 {
144 return m_currentBrushIndex;
145 }

References m_currentBrushIndex.

◆ makeMaskImage()

void KisImageBrushesPipe::makeMaskImage ( bool preserveAlpha)
inline

Definition at line 179 of file kis_imagepipe_brush.cpp.

179 {
180 Q_FOREACH (KisGbrBrushSP brush, m_brushes) {
181 brush->makeMaskImage(preserveAlpha);
182 }
183 }

References KisBrushesPipe< KisGbrBrush >::m_brushes.

◆ notifyStrokeStarted()

void KisImageBrushesPipe::notifyStrokeStarted ( )
inlineoverridevirtual

Is called by the paint op when a paintop starts a stroke. The brushes are shared among different strokes, so sometimes the brush should be reset.

Implements KisBrushesPipe< KisGbrBrush >.

Definition at line 200 of file kis_imagepipe_brush.cpp.

200 {
201 m_isInitialized = false;
202 }

References m_isInitialized.

◆ parasite()

const KisPipeBrushParasite & KisImageBrushesPipe::parasite ( ) const
inline

Definition at line 151 of file kis_imagepipe_brush.cpp.

151 {
152 return m_parasite;
153 }

References m_parasite.

◆ saveToDevice()

bool KisImageBrushesPipe::saveToDevice ( QIODevice * dev) const
inline

Definition at line 185 of file kis_imagepipe_brush.cpp.

185 {
186 Q_FOREACH (KisGbrBrushSP brush, m_brushes) {
187 if (!brush->saveToDevice(dev)) {
188 return false;
189 }
190 }
191 return true;
192 }

References KisBrushesPipe< KisGbrBrush >::m_brushes.

◆ selectPost()

static int KisImageBrushesPipe::selectPost ( KisParasite::SelectionMode mode,
int index,
int rank,
KisRandomSourceSP randomSource,
int seqNo )
inlinestaticprotected

Definition at line 80 of file kis_imagepipe_brush.cpp.

83 {
84
85 switch (mode) {
86 case KisParasite::Constant: break;
88 index = (seqNo >= 0 ? seqNo : (index + 1)) % rank;
89 break;
91 index = randomSource->generate(0, rank-1);
92 break;
95 break;
99 break;
100 default:
101 warnImage << "Parasite" << mode << "is not implemented";
102 index = 0;
103 }
104
105 return index;
106 }
qint64 generate() const
#define warnImage
Definition kis_debug.h:88

References KisParasite::Angular, KisParasite::Constant, KisRandomSource::generate(), KisParasite::Incremental, KisParasite::Pressure, KisParasite::Random, KisParasite::TiltX, KisParasite::TiltY, KisParasite::Velocity, and warnImage.

◆ selectPre()

static int KisImageBrushesPipe::selectPre ( KisParasite::SelectionMode mode,
int index,
int rank,
const KisPaintInformation & info )
inlinestaticprotected

Definition at line 33 of file kis_imagepipe_brush.cpp.

35 {
36
37 qreal angle;
38 qreal velocity;
39 qreal capSpeed = 3;
40
41 switch (mode) {
45 break;
47 index = static_cast<int>(info.pressure() * (rank - 1) + 0.5);
48 break;
50 // + M_PI_2 + M_PI_4 to be compatible with the gimp
51 angle = info.drawingAngle() + M_PI_2 + M_PI_4;
52 angle = normalizeAngle(angle);
53
54 index = static_cast<int>(angle / (2.0 * M_PI) * rank);
55 break;
57 index = qRound(info.xTilt() / 2.0 * rank) + rank / 2;
58 break;
60 index = qRound(info.yTilt() / 2.0 * rank) + rank / 2;
61 break;
63 // log is slow, but allows for nicer dab transition
64 velocity = log(info.drawingSpeed() + 1);
65 if (velocity > capSpeed) {
66 velocity = capSpeed;
67 }
68 velocity /= capSpeed;
69 velocity *= (rank - 1) + 0.5;
70 index = qRound(velocity);
71 break;
72 default:
73 warnImage << "Parasite" << mode << "is not implemented";
74 index = 0;
75 }
76
77 return index;
78 }
qreal xTilt() const
The tilt of the pen on the horizontal axis (from 0.0 to 1.0)
qreal yTilt() const
The tilt of the pen on the vertical axis (from 0.0 to 1.0)
qreal pressure() const
The pressure of the value (from 0.0 to 1.0)
qreal drawingAngle(bool considerLockedAngle=false) const
std::enable_if< std::is_floating_point< T >::value, T >::type normalizeAngle(T a)
Definition kis_global.h:121
#define M_PI
Definition kis_global.h:111

References KisParasite::Angular, KisParasite::Constant, KisPaintInformation::drawingAngle(), KisPaintInformation::drawingSpeed(), KisParasite::Incremental, M_PI, normalizeAngle(), KisParasite::Pressure, KisPaintInformation::pressure(), KisParasite::Random, KisParasite::TiltX, KisParasite::TiltY, KisParasite::Velocity, warnImage, KisPaintInformation::xTilt(), and KisPaintInformation::yTilt().

◆ setAdjustmentMidPoint()

void KisImageBrushesPipe::setAdjustmentMidPoint ( quint8 value)
inline

Definition at line 155 of file kis_imagepipe_brush.cpp.

155 {
156 Q_FOREACH (KisGbrBrushSP brush, m_brushes) {
157 brush->setAdjustmentMidPoint(value);
158 }
159 }
float value(const T *src, size_t ch)

References KisBrushesPipe< KisGbrBrush >::m_brushes, and value().

◆ setAutoAdjustMidPoint()

void KisImageBrushesPipe::setAutoAdjustMidPoint ( bool value)
inline

Definition at line 173 of file kis_imagepipe_brush.cpp.

173 {
174 Q_FOREACH (KisGbrBrushSP brush, m_brushes) {
175 brush->setAutoAdjustMidPoint(value);
176 }
177 }

References KisBrushesPipe< KisGbrBrush >::m_brushes, and value().

◆ setBrightnessAdjustment()

void KisImageBrushesPipe::setBrightnessAdjustment ( qreal value)
inline

Definition at line 161 of file kis_imagepipe_brush.cpp.

161 {
162 Q_FOREACH (KisGbrBrushSP brush, m_brushes) {
163 brush->setBrightnessAdjustment(value);
164 }
165 }

References KisBrushesPipe< KisGbrBrush >::m_brushes, and value().

◆ setContrastAdjustment()

void KisImageBrushesPipe::setContrastAdjustment ( qreal value)
inline

Definition at line 167 of file kis_imagepipe_brush.cpp.

167 {
168 Q_FOREACH (KisGbrBrushSP brush, m_brushes) {
169 brush->setContrastAdjustment(value);
170 }
171 }

References KisBrushesPipe< KisGbrBrush >::m_brushes, and value().

◆ setParasite()

void KisImageBrushesPipe::setParasite ( const KisPipeBrushParasite & parasite)
inline

Definition at line 147 of file kis_imagepipe_brush.cpp.

147 {
149 }
const KisPipeBrushParasite & parasite() const

References m_parasite, and parasite().

◆ updateBrushIndexes()

void KisImageBrushesPipe::updateBrushIndexes ( KisRandomSourceSP randomSource,
int seqNo )
inlineoverrideprotectedvirtual

Updates internal counters of the brush after a dab has been painted on the canvas. Some incremental switching of the brushes may me implemented in this method.

If seqNo is equal or greater than zero, then incremental iteration is overridden by this seqNo value

Implements KisBrushesPipe< KisGbrBrush >.

Definition at line 127 of file kis_imagepipe_brush.cpp.

127 {
128 m_isInitialized = true;
129
130 for (int i = 0; i < m_parasite.dim; i++) {
132 m_parasite.index[i],
133 m_parasite.rank[i],
134 randomSource,
135 seqNo);
136 }
137 }
static int selectPost(KisParasite::SelectionMode mode, int index, int rank, KisRandomSourceSP randomSource, int seqNo)

References KisPipeBrushParasite::dim, KisPipeBrushParasite::index, m_isInitialized, m_parasite, KisPipeBrushParasite::rank, KisPipeBrushParasite::selection, and selectPost().

Member Data Documentation

◆ m_currentBrushIndex

int KisImageBrushesPipe::m_currentBrushIndex
private

Definition at line 206 of file kis_imagepipe_brush.cpp.

◆ m_isInitialized

bool KisImageBrushesPipe::m_isInitialized
private

Definition at line 207 of file kis_imagepipe_brush.cpp.

◆ m_parasite

KisPipeBrushParasite KisImageBrushesPipe::m_parasite
private

Definition at line 205 of file kis_imagepipe_brush.cpp.


The documentation for this class was generated from the following file: