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

#include <kis_deform_paintop.h>

+ Inheritance diagram for KisDeformPaintOp:

Public Member Functions

 KisDeformPaintOp (const KisPaintOpSettingsSP settings, KisPainter *painter, KisNodeSP node, KisImageSP image)
 
 ~KisDeformPaintOp () 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 ()
 

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 Attributes

KisAirbrushOptionData m_airbrushData
 
KisBrushSizeOptionData m_brushSizeData
 
KisPaintDeviceSP m_dab
 
DeformBrush m_deformBrush
 
KisDeformOptionData m_deformData
 
KisPaintDeviceSP m_dev
 
KisOpacityOption m_opacityOption
 
KisRateOption m_rateOption
 
KisRotationOption m_rotationOption
 
KisSizeOption m_sizeOption
 
qreal m_spacing
 
qreal m_xSpacing
 
qreal m_ySpacing
 

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 25 of file kis_deform_paintop.h.

Constructor & Destructor Documentation

◆ KisDeformPaintOp()

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

Definition at line 40 of file kis_deform_paintop.cpp.

42 , m_sizeOption(settings.data())
43 , m_opacityOption(settings.data(), node)
44 , m_rotationOption(settings.data())
45 , m_rateOption(settings.data())
46{
47 Q_UNUSED(image);
48 Q_UNUSED(node);
49 Q_ASSERT(settings);
50
51 m_brushSizeData.read(settings.data());
52 m_deformData.read(settings.data());
53 m_airbrushData.read(settings.data());
54
57
59
60 m_dev = source();
61
62 if ((m_brushSizeData.brushDiameter * 0.5) > 1) {
64 }
65 else {
66 m_ySpacing = m_xSpacing = 1.0;
67 }
69
70
71
72}
void initDeformAction()
void setSizeProperties(KisBrushSizeOptionData *properties)
void setProperties(KisDeformOptionData *properties)
KisRateOption m_rateOption
KisBrushSizeOptionData m_brushSizeData
KisPaintDeviceSP m_dev
DeformBrush m_deformBrush
KisOpacityOption m_opacityOption
KisAirbrushOptionData m_airbrushData
KisDeformOptionData m_deformData
KisRotationOption m_rotationOption
KisSizeOption m_sizeOption
bool read(const KisPropertiesConfiguration *setting)
bool read(const KisPropertiesConfiguration *setting)
bool read(const KisPropertiesConfiguration *setting)
KisPainter * painter
KisPaintOp(KisPainter *painter)
KisPaintDeviceSP source() const

References KisBrushSizeOptionData::brushDiameter, KisBrushSizeOptionData::brushSpacing, KisSharedPtr< T >::data(), DeformBrush::initDeformAction(), m_airbrushData, m_brushSizeData, m_deformBrush, m_deformData, m_dev, m_spacing, m_xSpacing, m_ySpacing, KisBrushSizeOptionData::read(), KisDeformOptionData::read(), KisAirbrushOptionData::read(), DeformBrush::setProperties(), DeformBrush::setSizeProperties(), and KisPaintOp::source().

◆ ~KisDeformPaintOp()

KisDeformPaintOp::~KisDeformPaintOp ( )
override

Definition at line 74 of file kis_deform_paintop.cpp.

75{
76}

Member Function Documentation

◆ paintAt()

KisSpacingInformation KisDeformPaintOp::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 78 of file kis_deform_paintop.cpp.

79{
82
83 KisFixedPaintDeviceSP dab = cachedDab(source()->compositionSourceColorSpace());
84
85 qint32 x;
86 qreal subPixelX;
87 qint32 y;
88 qreal subPixelY;
89
90 QPointF pt = info.pos();
94 }
95
96 qreal rotation = m_rotationOption.apply(info);
97
98 // Deform Brush is capable of working with zero scale,
99 // so no additional checks for 'zero'ness are needed
100 qreal scale = m_sizeOption.apply(info);
101
102
103 rotation += m_brushSizeData.brushRotation;
105
106 QPointF pos = pt - m_deformBrush.hotSpot(scale, rotation);
107
108 splitCoordinate(pos.x(), &x, &subPixelX);
109 splitCoordinate(pos.y(), &y, &subPixelY);
110
112 scale, rotation,
113 info.pos(),
114 subPixelX, subPixelY,
115 x, y
116 );
117
118 // this happens for the first dab of the move mode, we need more information for being able to move
119 if (!mask) {
120 return updateSpacingImpl(info);
121 }
122
124 painter()->bltFixedWithFixedSelection(x, y, dab, mask, mask->bounds().width() , mask->bounds().height());
125 painter()->renderMirrorMask(QRect(QPoint(x, y), QSize(mask->bounds().width() , mask->bounds().height())), dab, mask);
126
127 return updateSpacingImpl(info);
128}
KisFixedPaintDeviceSP paintMask(KisFixedPaintDeviceSP dab, KisPaintDeviceSP layer, KisRandomSourceSP randomSource, qreal scale, qreal rotation, QPointF pos, qreal subPixelX, qreal subPixelY, int dabX, int dabY)
QPointF hotSpot(qreal scale, qreal rotation)
KisSpacingInformation updateSpacingImpl(const KisPaintInformation &info) const override
void apply(KisPainter *painter, const KisPaintInformation &info) const
KisRandomSourceSP randomSource() const
const QPointF & pos() const
void bltFixedWithFixedSelection(qint32 dstX, qint32 dstY, const KisFixedPaintDeviceSP srcDev, const KisFixedPaintDeviceSP selection, qint32 selX, qint32 selY, qint32 srcX, qint32 srcY, quint32 srcWidth, quint32 srcHeight)
void renderMirrorMask(QRect rc, KisFixedPaintDeviceSP dab)
qreal generateNormalized() const
qreal apply(const KisPaintInformation &info) const
qreal apply(const KisPaintInformation &info) const
KisFixedPaintDeviceSP dab
KisFixedPaintDeviceSP cachedDab()
static void splitCoordinate(qreal coordinate, qint32 *whole, qreal *fraction)

References KisRotationOption::apply(), KisStandardOption< Data >::apply(), KisOpacityOption::apply(), KisPainter::bltFixedWithFixedSelection(), KisFixedPaintDevice::bounds(), KisBrushSizeOptionData::brushDiameter, KisBrushSizeOptionData::brushJitterMovement, KisBrushSizeOptionData::brushJitterMovementEnabled, KisBrushSizeOptionData::brushRotation, KisBrushSizeOptionData::brushScale, KisPaintOp::cachedDab(), KisPaintOp::dab, KisRandomSource::generateNormalized(), DeformBrush::hotSpot(), m_brushSizeData, m_deformBrush, m_dev, m_opacityOption, m_rotationOption, m_sizeOption, m_spacing, KisPaintOp::painter, DeformBrush::paintMask(), KisPaintInformation::pos(), KisPaintInformation::randomSource(), KisPainter::renderMirrorMask(), KisPaintOp::source(), KisPaintOp::splitCoordinate(), and updateSpacingImpl().

◆ updateSpacingImpl()

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

Implementation of a spacing update

Implements KisPaintOp.

Definition at line 130 of file kis_deform_paintop.cpp.

131{
132 return KisPaintOpPluginUtils::effectiveSpacing(1.0, 1.0, true, 0.0, false, m_spacing, false,
133 1.0,
135 &m_airbrushData, nullptr, info);
136}
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, m_spacing, and KisPaintOp::painter.

◆ updateTimingImpl()

KisTimingInformation KisDeformPaintOp::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 138 of file kis_deform_paintop.cpp.

139{
141}
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 KisDeformPaintOp::m_airbrushData
private

Definition at line 48 of file kis_deform_paintop.h.

◆ m_brushSizeData

KisBrushSizeOptionData KisDeformPaintOp::m_brushSizeData
private

Definition at line 46 of file kis_deform_paintop.h.

◆ m_dab

KisPaintDeviceSP KisDeformPaintOp::m_dab
private

Definition at line 41 of file kis_deform_paintop.h.

◆ m_deformBrush

DeformBrush KisDeformPaintOp::m_deformBrush
private

Definition at line 44 of file kis_deform_paintop.h.

◆ m_deformData

KisDeformOptionData KisDeformPaintOp::m_deformData
private

Definition at line 45 of file kis_deform_paintop.h.

◆ m_dev

KisPaintDeviceSP KisDeformPaintOp::m_dev
private

Definition at line 42 of file kis_deform_paintop.h.

◆ m_opacityOption

KisOpacityOption KisDeformPaintOp::m_opacityOption
private

Definition at line 51 of file kis_deform_paintop.h.

◆ m_rateOption

KisRateOption KisDeformPaintOp::m_rateOption
private

Definition at line 53 of file kis_deform_paintop.h.

◆ m_rotationOption

KisRotationOption KisDeformPaintOp::m_rotationOption
private

Definition at line 52 of file kis_deform_paintop.h.

◆ m_sizeOption

KisSizeOption KisDeformPaintOp::m_sizeOption
private

Definition at line 50 of file kis_deform_paintop.h.

◆ m_spacing

qreal KisDeformPaintOp::m_spacing
private

Definition at line 57 of file kis_deform_paintop.h.

◆ m_xSpacing

qreal KisDeformPaintOp::m_xSpacing
private

Definition at line 55 of file kis_deform_paintop.h.

◆ m_ySpacing

qreal KisDeformPaintOp::m_ySpacing
private

Definition at line 56 of file kis_deform_paintop.h.


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