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

#include <kis_hairy_paintop.h>

+ Inheritance diagram for KisHairyPaintOp:

Public Member Functions

 KisHairyPaintOp (const KisPaintOpSettingsSP settings, KisPainter *painter, KisNodeSP node, KisImageSP image)
 
void paintLine (const KisPaintInformation &pi1, const KisPaintInformation &pi2, KisDistanceInformation *currentDistance) 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 ()
 

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
 
- Protected Member Functions inherited from KisPaintOp
KisFixedPaintDeviceSP cachedDab ()
 
KisFixedPaintDeviceSP cachedDab (const KoColorSpace *cs)
 
KisPainterpainter () const
 
KisPaintDeviceSP source () const
 
virtual KisTimingInformation updateTimingImpl (const KisPaintInformation &info) const
 
- Protected Member Functions inherited from KisShared
 KisShared ()
 
 ~KisShared ()
 

Private Member Functions

void loadSettings ()
 

Private Attributes

HairyBrush m_brush
 
KisPaintDeviceSP m_dab
 
KisPaintDeviceSP m_dev
 
KisHairyBristleOptionData m_hairyBristleOption
 
KisHairyInkOptionData m_hairyInkOption
 
KisOpacityOption m_opacityOption
 
KisHairyProperties m_properties
 
KisRotationOption m_rotationOption
 
KisSizeOption m_sizeOption
 

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 28 of file kis_hairy_paintop.h.

Constructor & Destructor Documentation

◆ KisHairyPaintOp()

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

Definition at line 32 of file kis_hairy_paintop.cpp.

34 , m_opacityOption(settings.data(), node)
35 , m_sizeOption(settings.data())
36 , m_rotationOption(settings.data())
37{
38 Q_UNUSED(image);
39 Q_ASSERT(settings);
40
41 m_hairyBristleOption.read(settings.data());
42 m_hairyInkOption.read(settings.data());
43
44 m_dev = node ? node->paintDevice() : 0;
45
46 KisBrushOptionProperties brushOption;
47 brushOption.readOptionSetting(settings, settings->resourcesInterface(), settings->canvasResourcesInterface());
48 KisBrushSP brush = brushOption.brush();
50
51 // properly initialize fake paint information to avoid warnings
52 KisPaintInformation fakePaintInformation;
53 fakePaintInformation.setRandomSource(new KisRandomSource());
54 fakePaintInformation.setPerStrokeRandomSource(new KisPerStrokeRandomSource());
55
56 if (brush->brushApplication() == IMAGESTAMP) {
57 dab = brush->paintDevice(source()->colorSpace(), KisDabShape(), fakePaintInformation);
58 } else {
59 brush->mask(dab, painter->paintColor(), KisDabShape(), fakePaintInformation);
60 }
61
64
67}
void setInkColor(const KoColor &color)
set ink color for the whole bristle shape
Definition hairy_brush.h:65
void fromDabWithDensity(KisFixedPaintDeviceSP dab, qreal density)
set the shape of the bristles according the dab
void setProperties(KisHairyProperties *properties)
set parameters for the brush engine
Definition hairy_brush.h:69
KisOpacityOption m_opacityOption
KisHairyProperties m_properties
KisHairyBristleOptionData m_hairyBristleOption
KisPaintDeviceSP m_dev
KisHairyInkOptionData m_hairyInkOption
KisRotationOption m_rotationOption
KisSizeOption m_sizeOption
virtual const KoColorSpace * compositionSourceColorSpace() const
void setRandomSource(KisRandomSourceSP value)
void setPerStrokeRandomSource(KisPerStrokeRandomSourceSP value)
KoColor paintColor
KisPaintDeviceSP device
void readOptionSetting(KisPropertiesConfigurationPointer settings, KisResourcesInterfaceSP resourcesInterface, KoCanvasResourcesInterfaceSP canvasResourcesInterface)
@ IMAGESTAMP
Definition kis_brush.h:40
virtual KisPaintDeviceSP paintDevice() const =0
bool read(const KisPropertiesConfiguration *setting)
bool read(const KisPropertiesConfiguration *setting)
KisPainter * painter
KisFixedPaintDeviceSP dab
KisPaintOp(KisPainter *painter)
KisPaintDeviceSP source() const
KisFixedPaintDeviceSP cachedDab()

References KisBrushOptionProperties::brush(), KisPaintOp::cachedDab(), KisPaintDevice::compositionSourceColorSpace(), KisPaintOp::dab, KisSharedPtr< T >::data(), KisHairyBristleOptionData::densityFactor, KisPainter::device, HairyBrush::fromDabWithDensity(), IMAGESTAMP, loadSettings(), m_brush, m_dev, m_hairyBristleOption, m_hairyInkOption, m_properties, KisPainter::paintColor, KisBaseNode::paintDevice(), KisPaintOp::painter, KisHairyBristleOptionData::read(), KisHairyInkOptionData::read(), KisPaintopPropertiesCanvasResourcesBase::readOptionSetting(), HairyBrush::setInkColor(), KisPaintInformation::setPerStrokeRandomSource(), HairyBrush::setProperties(), KisPaintInformation::setRandomSource(), and KisPaintOp::source().

Member Function Documentation

◆ loadSettings()

void KisHairyPaintOp::loadSettings ( )
private

Definition at line 75 of file kis_hairy_paintop.cpp.

76{
78 //TODO: wait for the transfer function with variable size
79
81
86
92
101}
quint8 bristleInkAmountWeight
Definition hairy_brush.h:46
quint8 inkDepletionWeight
Definition hairy_brush.h:47
quint8 bristleLengthWeight
Definition hairy_brush.h:45
QVector< qreal > inkDepletionCurve
Definition hairy_brush.h:31
const QVector< qreal > floatTransfer(int size=256) const

References KisHairyProperties::antialias, KisHairyBristleOptionData::antialias, KisHairyProperties::bristleInkAmountWeight, KisHairyInkOptionData::bristleInkAmountWeight, KisHairyProperties::bristleLengthWeight, KisHairyInkOptionData::bristleLengthWeight, KisHairyProperties::connectedPath, KisHairyBristleOptionData::connectedPath, KisCubicCurve::floatTransfer(), KisHairyProperties::inkAmount, KisHairyInkOptionData::inkAmount, KisHairyProperties::inkDepletionCurve, KisHairyInkOptionData::inkDepletionCurve, KisHairyProperties::inkDepletionEnabled, KisHairyInkOptionData::inkDepletionEnabled, KisHairyProperties::inkDepletionWeight, KisHairyInkOptionData::inkDepletionWeight, m_hairyBristleOption, m_hairyInkOption, m_properties, KisHairyProperties::pressureWeight, KisHairyInkOptionData::pressureWeight, KisHairyProperties::randomFactor, KisHairyBristleOptionData::randomFactor, KisHairyProperties::scaleFactor, KisHairyBristleOptionData::scaleFactor, KisHairyProperties::shearFactor, KisHairyBristleOptionData::shearFactor, KisHairyProperties::threshold, KisHairyBristleOptionData::threshold, KisHairyProperties::useCompositing, KisHairyBristleOptionData::useCompositing, KisHairyProperties::useMousePressure, KisHairyBristleOptionData::useMousePressure, KisHairyProperties::useOpacity, KisHairyInkOptionData::useOpacity, KisHairyProperties::useSaturation, KisHairyInkOptionData::useSaturation, KisHairyProperties::useSoakInk, KisHairyInkOptionData::useSoakInk, KisHairyProperties::useWeights, and KisHairyInkOptionData::useWeights.

◆ paintAt()

KisSpacingInformation KisHairyPaintOp::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 104 of file kis_hairy_paintop.cpp.

105{
106 return updateSpacingImpl(info);
107}
KisSpacingInformation updateSpacingImpl(const KisPaintInformation &info) const override

References updateSpacingImpl().

◆ paintLine()

void KisHairyPaintOp::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.

Even though we don't use spacing in hairy brush, we should still initialize its distance information to ensure drawing angle and other history-based sensors work fine.

Reimplemented from KisPaintOp.

Definition at line 116 of file kis_hairy_paintop.cpp.

117{
118 Q_UNUSED(currentDistance);
119 if (!painter()) return;
120
121 if (!m_dab) {
123 }
124 else {
125 m_dab->clear();
126 }
127
133 KisPaintInformation pi(pi2);
135 pi.registerDistanceInformation(currentDistance);
136
137 // Hairy Brush is capable of working with zero scale,
138 // so no additional checks for 'zero'ness are needed
139 qreal scale = m_sizeOption.apply(pi);
141 qreal rotation = m_rotationOption.apply(pi);
143
144 const bool mirrorFlip = pi1.canvasMirroredH() != pi1.canvasMirroredV();
145
146 // we don't use spacing here (the brush itself is used only once
147 // during initialization), so we should just skip the distance info
148 // update
149
150 m_brush.paintLine(m_dab, m_dev, pi1, pi, scale * m_hairyBristleOption.scaleFactor, mirrorFlip ? -rotation : rotation);
151
152 //QRect rc = m_dab->exactBounds();
153 QRect rc = m_dab->extent();
154 painter()->bitBlt(rc.topLeft(), m_dab, rc);
156
157 // we don't use spacing in hairy brush, but history is
158 // still important for us
159 currentDistance->registerPaintedDab(pi,
162}
void paintLine(KisPaintDeviceSP dab, KisPaintDeviceSP layer, const KisPaintInformation &pi1, const KisPaintInformation &pi2, qreal scale, qreal rotation)
KisPaintDeviceSP m_dab
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
qreal apply(const KisPaintInformation &info) const
void registerPaintedDab(const KisPaintInformation &info, const KisSpacingInformation &spacing, const KisTimingInformation &timing)

References KisRotationOption::apply(), KisStandardOption< Data >::apply(), KisOpacityOption::apply(), KisPainter::bitBlt(), KisPaintInformation::canvasMirroredH(), KisPaintInformation::canvasMirroredV(), KisPaintDevice::clear(), KisPaintDevice::createCompositionSourceDevice(), KisPaintDevice::extent(), KisLodTransformBase::lodToScale(), m_brush, m_dab, m_dev, m_hairyBristleOption, m_opacityOption, m_rotationOption, m_sizeOption, KisPaintOp::painter, HairyBrush::paintLine(), KisPaintInformation::registerDistanceInformation(), KisDistanceInformation::registerPaintedDab(), KisPainter::renderMirrorMask(), KisHairyBristleOptionData::scaleFactor, and KisPaintOp::source().

◆ prepareLinkedResources()

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

Definition at line 69 of file kis_hairy_paintop.cpp.

70{
71 KisBrushOptionProperties brushOption;
72 return brushOption.prepareLinkedResources(settings, resourcesInterface);
73}
QList< KoResourceLoadResult > prepareLinkedResources(const KisPropertiesConfigurationPointer settings, KisResourcesInterfaceSP resourcesInterface) const

References KisPaintopPropertiesCanvasResourcesBase::prepareLinkedResources().

◆ updateSpacingImpl()

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

Implementation of a spacing update

Implements KisPaintOp.

Definition at line 109 of file kis_hairy_paintop.cpp.

110{
111 Q_UNUSED(info);
112 return KisSpacingInformation(0.5);
113}

Member Data Documentation

◆ m_brush

HairyBrush KisHairyPaintOp::m_brush
private

Definition at line 49 of file kis_hairy_paintop.h.

◆ m_dab

KisPaintDeviceSP KisHairyPaintOp::m_dab
private

Definition at line 47 of file kis_hairy_paintop.h.

◆ m_dev

KisPaintDeviceSP KisHairyPaintOp::m_dev
private

Definition at line 48 of file kis_hairy_paintop.h.

◆ m_hairyBristleOption

KisHairyBristleOptionData KisHairyPaintOp::m_hairyBristleOption
private

Definition at line 44 of file kis_hairy_paintop.h.

◆ m_hairyInkOption

KisHairyInkOptionData KisHairyPaintOp::m_hairyInkOption
private

Definition at line 45 of file kis_hairy_paintop.h.

◆ m_opacityOption

KisOpacityOption KisHairyPaintOp::m_opacityOption
private

Definition at line 50 of file kis_hairy_paintop.h.

◆ m_properties

KisHairyProperties KisHairyPaintOp::m_properties
private

Definition at line 43 of file kis_hairy_paintop.h.

◆ m_rotationOption

KisRotationOption KisHairyPaintOp::m_rotationOption
private

Definition at line 52 of file kis_hairy_paintop.h.

◆ m_sizeOption

KisSizeOption KisHairyPaintOp::m_sizeOption
private

Definition at line 51 of file kis_hairy_paintop.h.


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