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

#include <kis_spray_paintop.h>

+ Inheritance diagram for KisSprayPaintOp:

Public Member Functions

 KisSprayPaintOp (const KisPaintOpSettingsSP settings, KisPainter *painter, KisNodeSP node, KisImageSP image)
 
 ~KisSprayPaintOp () 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)
 
virtual void paintLine (const KisPaintInformation &pi1, 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 ()
 

Static Public Member Functions

static QList< KoResourceLoadResultprepareLinkedResources (const KisPaintOpSettingsSP settings, KisResourcesInterfaceSP resourcesInterface)
 
- Static Public Member Functions inherited from KisPaintOp
static void splitCoordinate (qreal coordinate, qint32 *whole, qreal *fraction)
 

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

KisSpacingInformation computeSpacing (const KisPaintInformation &info, qreal lodScale) const
 

Private Attributes

KisAirbrushOptionData m_airbrushData
 
KisBrushOptionProperties m_brushOption
 
KisColorOptionData m_colorProperties
 
KisPaintDeviceSP m_dab
 
bool m_isPresetValid
 
KisNodeSP m_node
 
KisOpacityOption m_opacityOption
 
KisRateOption m_rateOption
 
KisRotationOption m_rotationOption
 
KisSprayShapeDynamicsOptionData m_shapeDynamicsProperties
 
KisSprayShapeOptionData m_shapeProperties
 
KisSizeOption m_sizeOption
 
qreal m_spacing
 
SprayBrush m_sprayBrush
 
KisSprayOpOption m_sprayOpOption
 
qreal m_xSpacing
 
qreal m_ySpacing
 

Additional Inherited Members

- 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 27 of file kis_spray_paintop.h.

Constructor & Destructor Documentation

◆ KisSprayPaintOp()

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

Definition at line 27 of file kis_spray_paintop.cpp.

29 , m_sprayOpOption(settings.data())
30 , m_isPresetValid(true)
31 , m_rotationOption(settings.data())
32 , m_sizeOption(settings.data())
33 , m_opacityOption(settings.data(), node)
34 , m_rateOption(settings.data())
35 , m_node(node)
36
37{
38 Q_ASSERT(settings);
39 Q_ASSERT(painter);
40 Q_UNUSED(image);
41
42 m_airbrushData.read(settings.data());
43
44 m_brushOption.readOptionSetting(settings, settings->resourcesInterface(), settings->canvasResourcesInterface());
45
46 m_colorProperties.read(settings.data());
47 // create the actual distribution objects
49 // first load tip properties as shape properties are dependent on diameter/scale/aspect
50 m_shapeProperties.read(settings.data());
51
52 // TODO: what to do with proportional sizes?
54
56 // in case the preset does not contain the definition for KisBrush
57 m_isPresetValid = false;
58 dbgKrita << "Preset is not valid. Painting is not possible. Use the preset editor to fix current brush engine preset.";
59 }
60
63
65
66 // spacing
67 if ((m_sprayOpOption.data.diameter * 0.5) > 1) {
69 }
70 else {
71 m_ySpacing = m_xSpacing = 1.0;
72 }
74}
void readOptionSetting(KisPropertiesConfigurationPointer settings, KisResourcesInterfaceSP resourcesInterface, KoCanvasResourcesInterfaceSP canvasResourcesInterface)
KisSprayOpOptionData data
KisSprayOpOption m_sprayOpOption
KisOpacityOption m_opacityOption
KisBrushOptionProperties m_brushOption
KisRotationOption m_rotationOption
SprayBrush m_sprayBrush
KisAirbrushOptionData m_airbrushData
KisSprayShapeDynamicsOptionData m_shapeDynamicsProperties
KisColorOptionData m_colorProperties
KisSprayShapeOptionData m_shapeProperties
KisSizeOption m_sizeOption
KisRateOption m_rateOption
void setFixedDab(KisFixedPaintDeviceSP dab)
void setProperties(KisSprayOpOptionData *properties, KisColorOptionData *colorProperties, KisSprayShapeOptionData *shapeProperties, KisSprayShapeDynamicsOptionData *shapeDynamicsProperties, KisBrushSP brush)
#define dbgKrita
Definition kis_debug.h:45
bool read(const KisPropertiesConfiguration *setting)
bool read(const KisPropertiesConfiguration *setting)
KisPainter * painter
KisPaintOp(KisPainter *painter)
KisFixedPaintDeviceSP cachedDab()
bool read(const KisPropertiesConfiguration *setting)
bool read(const KisPropertiesConfiguration *setting)

References KisBrushOptionProperties::brush(), KisPaintOp::cachedDab(), KisSharedPtr< T >::data(), KisSprayOpOption::data, dbgKrita, KisSprayOpOptionData::diameter, KisSprayShapeOptionData::enabled, m_airbrushData, m_brushOption, m_colorProperties, m_isPresetValid, m_shapeDynamicsProperties, m_shapeProperties, m_spacing, m_sprayBrush, m_sprayOpOption, m_xSpacing, m_ySpacing, KisPaintOp::painter, KisAirbrushOptionData::read(), KisColorOptionData::read(), KisSprayShapeDynamicsOptionData::read(), KisSprayShapeOptionData::read(), KisPaintopPropertiesCanvasResourcesBase::readOptionSetting(), SprayBrush::setFixedDab(), SprayBrush::setProperties(), KisSprayOpOptionData::spacing, and KisSprayOpOption::updateDistributions().

◆ ~KisSprayPaintOp()

KisSprayPaintOp::~KisSprayPaintOp ( )
override

Definition at line 76 of file kis_spray_paintop.cpp.

77{
78}

Member Function Documentation

◆ computeSpacing()

KisSpacingInformation KisSprayPaintOp::computeSpacing ( const KisPaintInformation & info,
qreal lodScale ) const
private

Definition at line 132 of file kis_spray_paintop.cpp.

134{
135 return KisPaintOpPluginUtils::effectiveSpacing(1.0, 1.0, true, 0.0, false,
136 m_spacing * lodScale, false, 1.0, lodScale,
137 &m_airbrushData, nullptr, info);
138}
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(), m_airbrushData, and m_spacing.

◆ paintAt()

KisSpacingInformation KisSprayPaintOp::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 86 of file kis_spray_paintop.cpp.

87{
88 if (!painter() || !m_isPresetValid) {
90 }
91
92 if (!m_dab) {
94 }
95 else {
96 m_dab->clear();
97 }
98
99 qreal rotation = m_rotationOption.apply(info);
101 // Spray Brush is capable of working with zero scale,
102 // so no additional checks for 'zero'ness are needed
103 const qreal scale = m_sizeOption.apply(info);
104 const qreal lodScale = KisLodTransform::lodToScale(painter()->device());
105
106
109 info,
110 rotation,
111 scale, lodScale,
112 painter()->paintColor(),
113 painter()->backgroundColor());
114
115 QRect rc = m_dab->extent();
116 painter()->bitBlt(rc.topLeft(), m_dab, rc);
118
119 return computeSpacing(info, lodScale);
120}
static qreal lodToScale(int levelOfDetail)
void apply(KisPainter *painter, const KisPaintInformation &info) const
virtual void clear()
KisPaintDeviceSP createCompositionSourceDevice() const
QRect extent() const
void renderMirrorMask(QRect rc, KisFixedPaintDeviceSP dab)
void bitBlt(qint32 dstX, qint32 dstY, const KisPaintDeviceSP srcDev, qint32 srcX, qint32 srcY, qint32 srcWidth, qint32 srcHeight)
qreal apply(const KisPaintInformation &info) const
KisPaintDeviceSP m_dab
KisSpacingInformation computeSpacing(const KisPaintInformation &info, qreal lodScale) const
qreal apply(const KisPaintInformation &info) const
void paint(KisPaintDeviceSP dab, KisPaintDeviceSP source, const KisPaintInformation &info, qreal rotation, qreal scale, qreal additionalScale, const KoColor &color, const KoColor &bgColor)
virtual KisPaintDeviceSP paintDevice() const =0
KisPaintDeviceSP source() const

References KisRotationOption::apply(), KisStandardOption< Data >::apply(), KisOpacityOption::apply(), KisPainter::bitBlt(), KisPaintDevice::clear(), computeSpacing(), KisPaintDevice::createCompositionSourceDevice(), KisPaintDevice::extent(), KisLodTransformBase::lodToScale(), m_dab, m_isPresetValid, m_node, m_opacityOption, m_rotationOption, m_sizeOption, m_spacing, m_sprayBrush, SprayBrush::paint(), KisBaseNode::paintDevice(), KisPaintOp::painter, KisPainter::renderMirrorMask(), and KisPaintOp::source().

◆ prepareLinkedResources()

QList< KoResourceLoadResult > KisSprayPaintOp::prepareLinkedResources ( const KisPaintOpSettingsSP settings,
KisResourcesInterfaceSP resourcesInterface )
static

Definition at line 80 of file kis_spray_paintop.cpp.

81{
82 KisBrushOptionProperties brushOption;
83 return brushOption.prepareLinkedResources(settings, resourcesInterface);
84}
QList< KoResourceLoadResult > prepareLinkedResources(const KisPropertiesConfigurationPointer settings, KisResourcesInterfaceSP resourcesInterface) const

References KisPaintopPropertiesCanvasResourcesBase::prepareLinkedResources().

◆ updateSpacingImpl()

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

Implementation of a spacing update

Implements KisPaintOp.

Definition at line 122 of file kis_spray_paintop.cpp.

123{
124 return computeSpacing(info, KisLodTransform::lodToScale(painter()->device()));
125}

References computeSpacing(), KisLodTransformBase::lodToScale(), and KisPaintOp::painter.

◆ updateTimingImpl()

KisTimingInformation KisSprayPaintOp::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 127 of file kis_spray_paintop.cpp.

128{
130}
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 KisSprayPaintOp::m_airbrushData
private

Definition at line 59 of file kis_spray_paintop.h.

◆ m_brushOption

KisBrushOptionProperties KisSprayPaintOp::m_brushOption
private

Definition at line 53 of file kis_spray_paintop.h.

◆ m_colorProperties

KisColorOptionData KisSprayPaintOp::m_colorProperties
private

Definition at line 52 of file kis_spray_paintop.h.

◆ m_dab

KisPaintDeviceSP KisSprayPaintOp::m_dab
private

Definition at line 55 of file kis_spray_paintop.h.

◆ m_isPresetValid

bool KisSprayPaintOp::m_isPresetValid
private

Definition at line 58 of file kis_spray_paintop.h.

◆ m_node

KisNodeSP KisSprayPaintOp::m_node
private

Definition at line 65 of file kis_spray_paintop.h.

◆ m_opacityOption

KisOpacityOption KisSprayPaintOp::m_opacityOption
private

Definition at line 63 of file kis_spray_paintop.h.

◆ m_rateOption

KisRateOption KisSprayPaintOp::m_rateOption
private

Definition at line 64 of file kis_spray_paintop.h.

◆ m_rotationOption

KisRotationOption KisSprayPaintOp::m_rotationOption
private

Definition at line 61 of file kis_spray_paintop.h.

◆ m_shapeDynamicsProperties

KisSprayShapeDynamicsOptionData KisSprayPaintOp::m_shapeDynamicsProperties
private

Definition at line 51 of file kis_spray_paintop.h.

◆ m_shapeProperties

KisSprayShapeOptionData KisSprayPaintOp::m_shapeProperties
private

Definition at line 49 of file kis_spray_paintop.h.

◆ m_sizeOption

KisSizeOption KisSprayPaintOp::m_sizeOption
private

Definition at line 62 of file kis_spray_paintop.h.

◆ m_spacing

qreal KisSprayPaintOp::m_spacing
private

Definition at line 57 of file kis_spray_paintop.h.

◆ m_sprayBrush

SprayBrush KisSprayPaintOp::m_sprayBrush
private

Definition at line 56 of file kis_spray_paintop.h.

◆ m_sprayOpOption

KisSprayOpOption KisSprayPaintOp::m_sprayOpOption
private

Definition at line 50 of file kis_spray_paintop.h.

◆ m_xSpacing

qreal KisSprayPaintOp::m_xSpacing
private

Definition at line 57 of file kis_spray_paintop.h.

◆ m_ySpacing

qreal KisSprayPaintOp::m_ySpacing
private

Definition at line 57 of file kis_spray_paintop.h.


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