Krita Source Code Documentation
Loading...
Searching...
No Matches
KisParticlePaintOp Class Reference

#include <kis_particle_paintop.h>

+ Inheritance diagram for KisParticlePaintOp:

Public Member Functions

 KisParticlePaintOp (const KisPaintOpSettingsSP settings, KisPainter *painter, KisNodeSP node, KisImageSP image)
 
void paintLine (const KisPaintInformation &pi1, const KisPaintInformation &pi2, KisDistanceInformation *currentDistance) override
 
 ~KisParticlePaintOp () override
 
- Public Member Functions inherited from KisPaintOp
virtual bool canPaint () const
 
virtual std::pair< int, bool > doAsynchronousUpdate (QVector< KisRunnableStrokeJobData * > &jobs)
 
 KisPaintOp (KisPainter *painter)
 
void paintAt (const KisPaintInformation &info, KisDistanceInformation *currentDistance)
 
virtual void paintBezierCurve (const KisPaintInformation &pi1, const QPointF &control1, const QPointF &control2, const KisPaintInformation &pi2, KisDistanceInformation *currentDistance)
 
 Private (KisPaintOp *_q)
 
void updateSpacing (const KisPaintInformation &info, KisDistanceInformation &currentDistance) const
 
void updateTiming (const KisPaintInformation &info, KisDistanceInformation &currentDistance) const
 
virtual ~KisPaintOp ()
 
- Public Member Functions inherited from Private
 Private (KisCanvas2 *c)
 
- Public Member Functions inherited from KisShared
bool deref ()
 
bool ref ()
 
int refCount ()
 
QAtomicInt * sharedWeakReference ()
 

Protected Member Functions

KisSpacingInformation paintAt (const KisPaintInformation &info) override
 
KisSpacingInformation updateSpacingImpl (const KisPaintInformation &info) const override
 
KisTimingInformation updateTimingImpl (const KisPaintInformation &info) const override
 
- Protected Member Functions inherited from KisPaintOp
KisFixedPaintDeviceSP cachedDab ()
 
KisFixedPaintDeviceSP cachedDab (const KoColorSpace *cs)
 
KisPainterpainter () const
 
KisPaintDeviceSP source () const
 
- Protected Member Functions inherited from KisShared
 KisShared ()
 
 ~KisShared ()
 

Private Member Functions

void doPaintLine (const KisPaintInformation &pi1, const KisPaintInformation &pi2)
 

Private Attributes

KisAirbrushOptionData m_airbrushData
 
KisPaintDeviceSP m_dab
 
bool m_first
 
ParticleBrush m_particleBrush
 
KisParticleOpOptionData m_particleOpData
 
KisRateOption m_rateOption
 

Additional Inherited Members

- Static Public Member Functions inherited from KisPaintOp
static void splitCoordinate (qreal coordinate, qint32 *whole, qreal *fraction)
 
- Public Attributes inherited from KisPaintOp
KisFixedPaintDeviceSP dab
 
bool fanCornersEnabled {false}
 
qreal fanCornersStep {1.0}
 
KisPainterpainter {nullptr}
 
KisPaintOpq {nullptr}
 
- Public Attributes inherited from Private
KisCanvas2canvas
 
int displayedFrame
 
int intendedFrame
 

Detailed Description

Definition at line 21 of file kis_particle_paintop.h.

Constructor & Destructor Documentation

◆ KisParticlePaintOp()

KisParticlePaintOp::KisParticlePaintOp ( const KisPaintOpSettingsSP settings,
KisPainter * painter,
KisNodeSP node,
KisImageSP image )

Definition at line 32 of file kis_particle_paintop.cpp.

34 , m_rateOption(settings.data())
35 , m_first(true)
36{
37 Q_UNUSED(image);
38 Q_UNUSED(node);
39
40 m_particleOpData.read(settings.data());
41
44
45 m_airbrushData.read(settings.data());
46}
KisAirbrushOptionData m_airbrushData
ParticleBrush m_particleBrush
KisParticleOpOptionData m_particleOpData
void setProperties(KisParticleOpOptionData *properties)
bool read(const KisPropertiesConfiguration *setting)
KisPainter * painter
KisPaintOp(KisPainter *painter)
bool read(const KisPropertiesConfiguration *setting)

References KisSharedPtr< T >::data(), ParticleBrush::initParticles(), m_airbrushData, m_particleBrush, m_particleOpData, KisAirbrushOptionData::read(), KisParticleOpOptionData::read(), and ParticleBrush::setProperties().

◆ ~KisParticlePaintOp()

KisParticlePaintOp::~KisParticlePaintOp ( )
override

Definition at line 48 of file kis_particle_paintop.cpp.

49{
50}

Member Function Documentation

◆ doPaintLine()

void KisParticlePaintOp::doPaintLine ( const KisPaintInformation & pi1,
const KisPaintInformation & pi2 )
private

Definition at line 82 of file kis_particle_paintop.cpp.

83{
84 if (!painter()) return;
85
86 if (!m_dab) {
88 }
89 else {
90 m_dab->clear();
91 }
92
93
94 if (m_first) {
96 m_first = false;
97 }
98
99 m_particleBrush.draw(m_dab, painter()->paintColor(), pi2.pos());
100 QRect rc = m_dab->extent();
101
102 painter()->bitBlt(rc.x(), rc.y(), m_dab, rc.x(), rc.y(), rc.width(), rc.height());
104}
virtual void clear()
KisPaintDeviceSP createCompositionSourceDevice() const
QRect extent() const
const QPointF & pos() const
void renderMirrorMask(QRect rc, KisFixedPaintDeviceSP dab)
void bitBlt(qint32 dstX, qint32 dstY, const KisPaintDeviceSP srcDev, qint32 srcX, qint32 srcY, qint32 srcWidth, qint32 srcHeight)
void draw(KisPaintDeviceSP dab, const KoColor &color, const QPointF &pos)
void setInitialPosition(const QPointF &pos)
KisPaintDeviceSP source() const

References KisPainter::bitBlt(), KisPaintDevice::clear(), KisPaintDevice::createCompositionSourceDevice(), ParticleBrush::draw(), KisPaintDevice::extent(), m_dab, m_first, m_particleBrush, KisPaintOp::painter, KisPaintInformation::pos(), KisPainter::renderMirrorMask(), ParticleBrush::setInitialPosition(), and KisPaintOp::source().

◆ paintAt()

KisSpacingInformation KisParticlePaintOp::paintAt ( const KisPaintInformation & info)
overrideprotectedvirtual

The implementation of painting of a dab and updating spacing. This does NOT need to update the timing information.

Implements KisPaintOp.

Definition at line 52 of file kis_particle_paintop.cpp.

53{
54 doPaintLine(info, info);
55 return updateSpacingImpl(info);
56}
void doPaintLine(const KisPaintInformation &pi1, const KisPaintInformation &pi2)
KisSpacingInformation updateSpacingImpl(const KisPaintInformation &info) const override

References doPaintLine(), and updateSpacingImpl().

◆ paintLine()

void KisParticlePaintOp::paintLine ( const KisPaintInformation & pi1,
const KisPaintInformation & pi2,
KisDistanceInformation * currentDistance )
overridevirtual

Draw a line between pos1 and pos2 using the currently set brush and color. If savedDist is less than zero, the brush is painted at pos1 before being painted along the line using the spacing setting.

Returns
the drag distance, that is the remains of the distance between p1 and p2 not covered because the currently set brush has a spacing greater than that distance.

Reimplemented from KisPaintOp.

Definition at line 70 of file kis_particle_paintop.cpp.

72{
73 // Use superclass behavior for lines of zero length. Otherwise, airbrushing can happen faster
74 // than it is supposed to.
75 if (pi1.pos() == pi2.pos()) {
76 KisPaintOp::paintLine(pi1, pi2, currentDistance);
77 } else {
78 doPaintLine(pi1, pi2);
79 }
80}
virtual void paintLine(const KisPaintInformation &pi1, const KisPaintInformation &pi2, KisDistanceInformation *currentDistance)

References doPaintLine(), KisPaintOp::paintLine(), and KisPaintInformation::pos().

◆ updateSpacingImpl()

KisSpacingInformation KisParticlePaintOp::updateSpacingImpl ( const KisPaintInformation & info) const
overrideprotectedvirtual

Implementation of a spacing update

Implements KisPaintOp.

Definition at line 58 of file kis_particle_paintop.cpp.

59{
60 return KisPaintOpPluginUtils::effectiveSpacing(0.0, 0.0, true, 0.0, false, 0.0, false, 0.0,
62 &m_airbrushData, nullptr, info);
63}
static qreal lodToScale(int levelOfDetail)
KisSpacingInformation effectiveSpacing(qreal dabWidth, qreal dabHeight, bool isotropicSpacing, qreal rotation, bool axesFlipped, qreal spacingVal, bool autoSpacingActive, qreal autoSpacingCoeff, qreal lodScale, const KisAirbrushOptionData *airbrushOption, const KisSpacingOption *spacingOption, const KisPaintInformation &pi)

References KisPaintOpPluginUtils::effectiveSpacing(), KisLodTransformBase::lodToScale(), m_airbrushData, and KisPaintOp::painter.

◆ updateTimingImpl()

KisTimingInformation KisParticlePaintOp::updateTimingImpl ( const KisPaintInformation & info) const
overrideprotectedvirtual

Implementation of a timing update. The default implementation always disables timing. This is suitable for paintops that do not support airbrushing.

Reimplemented from KisPaintOp.

Definition at line 65 of file kis_particle_paintop.cpp.

66{
68}
KisTimingInformation effectiveTiming(const KisAirbrushOptionData *airbrushOption, const KisRateOption *rateOption, const KisPaintInformation &pi)

References KisPaintOpPluginUtils::effectiveTiming(), m_airbrushData, and m_rateOption.

Member Data Documentation

◆ m_airbrushData

KisAirbrushOptionData KisParticlePaintOp::m_airbrushData
private

Definition at line 45 of file kis_particle_paintop.h.

◆ m_dab

KisPaintDeviceSP KisParticlePaintOp::m_dab
private

Definition at line 43 of file kis_particle_paintop.h.

◆ m_first

bool KisParticlePaintOp::m_first
private

Definition at line 47 of file kis_particle_paintop.h.

◆ m_particleBrush

ParticleBrush KisParticlePaintOp::m_particleBrush
private

Definition at line 44 of file kis_particle_paintop.h.

◆ m_particleOpData

KisParticleOpOptionData KisParticlePaintOp::m_particleOpData
private

Definition at line 42 of file kis_particle_paintop.h.

◆ m_rateOption

KisRateOption KisParticlePaintOp::m_rateOption
private

Definition at line 46 of file kis_particle_paintop.h.


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