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

#include <kis_brush_based_paintop.h>

+ Inheritance diagram for KisBrushBasedPaintOp:

Public Member Functions

bool canPaint () const override
 Reimplemented, false if brush is 0.
 
bool checkSizeTooSmall (qreal scale)
 
KisSpacingInformation effectiveSpacing (qreal scale) const
 
KisSpacingInformation effectiveSpacing (qreal scale, qreal rotation, const KisAirbrushOptionData *airbrushOption, const KisSpacingOption *spacingOption, const KisPaintInformation &pi) const
 
KisSpacingInformation effectiveSpacing (qreal scale, qreal rotation, const KisPaintInformation &pi) const
 
KisSpacingInformation effectiveSpacing (qreal scale, qreal rotation, const KisSpacingOption &spacingOption, const KisPaintInformation &pi) const
 
 KisBrushBasedPaintOp (const KisPaintOpSettingsSP settings, KisPainter *painter, KisBrushTextureFlags textureFlags=None)
 
 ~KisBrushBasedPaintOp () override
 
- Public Member Functions inherited from KisPaintOp
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< KoResourceLoadResultprepareEmbeddedResources (const KisPaintOpSettingsSP settings, KisResourcesInterfaceSP resourcesInterface)
 
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 Attributes

KisBrushSP m_brush
 
KisDabCachem_dabCache
 
KisMirrorOption m_mirrorOption
 
KisPrecisionOption m_precisionOption
 

Private Member Functions

KisSpacingInformation effectiveSpacing (qreal dabWidth, qreal dabHeight, qreal extraScale, bool isotropicSpacing, qreal rotation, bool axesFlipped) const
 

Private Attributes

KisTextureOption m_textureOption
 

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

Detailed Description

This is a base class for paintops that use a KisBrush or derived brush to paint with. This is mainly important for the spacing generation.

Definition at line 48 of file kis_brush_based_paintop.h.

Constructor & Destructor Documentation

◆ KisBrushBasedPaintOp()

KisBrushBasedPaintOp::KisBrushBasedPaintOp ( const KisPaintOpSettingsSP settings,
KisPainter * painter,
KisBrushTextureFlags textureFlags = None )

Definition at line 68 of file kis_brush_based_paintop.cpp.

70 m_textureOption(settings.data(),
71 settings->resourcesInterface(),
72 settings->canvasResourcesInterface(),
74 textureFlags),
75 m_mirrorOption(settings.data()),
76 m_precisionOption(settings.data())
77{
78 Q_ASSERT(settings);
79
80#ifdef HAVE_THREADED_TEXT_RENDERING_WORKAROUND
82#endif /* HAVE_THREADED_TEXT_RENDERING_WORKAROUND */
83
84 if (!m_brush) {
85 const KisBrushBasedPaintOpSettings *brushBasedSettings =
86 dynamic_cast<const KisBrushBasedPaintOpSettings*>(settings.data());
87
88 if (brushBasedSettings) {
89 // we don't use KisBrushOptionProperties manually here because
90 // we want the properties to cache this brush in m_savedBrush
91 m_brush = brushBasedSettings->brush();
92 }
93
94 if (!m_brush) {
95 qWarning() << "Could not find brush tip " << settings->getString("brush_definition") << ", will use a default brush instead";
96 QString brushDefinition("<Brush useAutoSpacing=\"1\" angle=\"0\" spacing=\"0.1\" density=\"1\" BrushVersion=\"2\" type=\"auto_brush\" randomness=\"0\" autoSpacingCoeff=\"0.8\"> <MaskGenerator spikes=\"2\" hfade=\"1\" ratio=\"1\" diameter=\"40\" id=\"default\" type=\"circle\" antialiasEdges=\"1\" vfade=\"1\"/> </Brush> ");
97 QDomDocument d;
98 d.setContent(brushDefinition, false);
99 QDomElement element = d.firstChildElement("Brush");
100 m_brush = KisBrushRegistry::instance()->createBrush(element, settings->resourcesInterface()).resource<KisBrush>();
101 Q_ASSERT(m_brush);
102 }
103 }
104
105 m_brush->notifyStrokeStarted();
106
111
115}
KisPrecisionOption m_precisionOption
static KisBrushRegistry * instance()
KoResourceLoadResult createBrush(const QDomElement &element, KisResourcesInterfaceSP resourcesInterface)
bool isChecked() const
void setPrecisionOption(KisPrecisionOption *option)
void setMirrorPostprocessing(KisMirrorOption *option)
The KisDabCache class provides caching for dabs into the brush paintop.
void setTexturePostprocessing(KisTextureOption *option)
virtual int currentLevelOfDetail() const =0
KisDefaultBoundsBaseSP defaultBounds() const
KisPaintDeviceSP device
bool hasImprecisePositionOptions() const
void setHasImprecisePositionOptions(bool value)
KoResourceSP resource() const noexcept
static TextBrushInitializationWorkaround * instance()
KisBrushSP tryGetBrush(const KisPropertiesConfigurationSP settings)
KisPainter * painter
KisPaintOp(KisPainter *painter)
Private *const d

References KisBrushBasedPaintOpSettings::brush(), KisBrushRegistry::createBrush(), KisPaintOp::d, KisSharedPtr< T >::data(), KisPrecisionOption::hasImprecisePositionOptions(), KisBrushRegistry::instance(), TextBrushInitializationWorkaround::instance(), KisCurveOption::isChecked(), m_brush, m_dabCache, KisTextureOption::m_enabled, m_mirrorOption, m_precisionOption, m_textureOption, KoResourceLoadResult::resource(), KisPrecisionOption::setHasImprecisePositionOptions(), KisDabCacheBase::setMirrorPostprocessing(), KisDabCacheBase::setPrecisionOption(), KisDabCache::setTexturePostprocessing(), and TextBrushInitializationWorkaround::tryGetBrush().

◆ ~KisBrushBasedPaintOp()

KisBrushBasedPaintOp::~KisBrushBasedPaintOp ( )
override

Definition at line 117 of file kis_brush_based_paintop.cpp.

118{
119 delete m_dabCache;
120}

References m_dabCache.

Member Function Documentation

◆ canPaint()

bool KisBrushBasedPaintOp::canPaint ( ) const
overridevirtual

Reimplemented, false if brush is 0.

Reimplemented from KisPaintOp.

Definition at line 206 of file kis_brush_based_paintop.cpp.

207{
208 return m_brush != 0;
209}

References m_brush.

◆ checkSizeTooSmall()

bool KisBrushBasedPaintOp::checkSizeTooSmall ( qreal scale)

Definition at line 143 of file kis_brush_based_paintop.cpp.

144{
145 scale *= m_brush->scale();
146 return KisPaintOpUtils::checkSizeTooSmall(scale, m_brush->width(), m_brush->height());
147}
bool checkSizeTooSmall(qreal scale, qreal width, qreal height)

References KisPaintOpUtils::checkSizeTooSmall(), and m_brush.

◆ effectiveSpacing() [1/5]

KisSpacingInformation KisBrushBasedPaintOp::effectiveSpacing ( qreal dabWidth,
qreal dabHeight,
qreal extraScale,
bool isotropicSpacing,
qreal rotation,
bool axesFlipped ) const
private

Definition at line 189 of file kis_brush_based_paintop.cpp.

193{
194 return KisPaintOpUtils::effectiveSpacing(dabWidth, dabHeight,
195 extraScale,
196 true,
197 isotropicSpacing,
198 rotation,
199 axesFlipped,
200 m_brush->spacing(),
201 m_brush->autoSpacingActive(),
202 m_brush->autoSpacingCoeff(),
204}
static qreal lodToScale(int levelOfDetail)
KisSpacingInformation effectiveSpacing(qreal dabWidth, qreal dabHeight, qreal extraScale, bool distanceSpacingEnabled, bool isotropicSpacing, qreal rotation, bool axesFlipped, qreal spacingVal, bool autoSpacingActive, qreal autoSpacingCoeff, qreal lodScale)

References KisPaintOpUtils::effectiveSpacing(), KisLodTransformBase::lodToScale(), m_brush, and KisPaintOp::painter.

◆ effectiveSpacing() [2/5]

KisSpacingInformation KisBrushBasedPaintOp::effectiveSpacing ( qreal scale) const

Definition at line 149 of file kis_brush_based_paintop.cpp.

150{
151 // we parse dab rotation separately, so don't count it
152 QSizeF metric = m_brush->characteristicSize(KisDabShape(scale, 1.0, 0));
153 return effectiveSpacing(metric.width(), metric.height(), 1.0, false, 0.0, false);
154}
KisSpacingInformation effectiveSpacing(qreal scale) const

References effectiveSpacing(), and m_brush.

◆ effectiveSpacing() [3/5]

KisSpacingInformation KisBrushBasedPaintOp::effectiveSpacing ( qreal scale,
qreal rotation,
const KisAirbrushOptionData * airbrushOption,
const KisSpacingOption * spacingOption,
const KisPaintInformation & pi ) const

Definition at line 166 of file kis_brush_based_paintop.cpp.

170{
171 bool isotropicSpacing = spacingOption && spacingOption->isotropicSpacing();
172
174 const bool implicitFlipped = prop.horizontalMirror != prop.verticalMirror;
175
176 // we parse dab rotation separately, so don't count it
177 QSizeF metric = m_brush->characteristicSize(KisDabShape(scale, 1.0, 0));
178
179 return KisPaintOpPluginUtils::effectiveSpacing(metric.width(), metric.height(),
180 isotropicSpacing, rotation, implicitFlipped,
181 m_brush->spacing(),
182 m_brush->autoSpacingActive(),
183 m_brush->autoSpacingCoeff(),
185 airbrushOption, spacingOption,
186 pi);
187}
MirrorProperties apply(const KisPaintInformation &info) const
bool isotropicSpacing() const
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 KisMirrorOption::apply(), KisPaintOpPluginUtils::effectiveSpacing(), MirrorProperties::horizontalMirror, KisSpacingOption::isotropicSpacing(), KisLodTransformBase::lodToScale(), m_brush, m_mirrorOption, KisPaintOp::painter, and MirrorProperties::verticalMirror.

◆ effectiveSpacing() [4/5]

KisSpacingInformation KisBrushBasedPaintOp::effectiveSpacing ( qreal scale,
qreal rotation,
const KisPaintInformation & pi ) const

Definition at line 156 of file kis_brush_based_paintop.cpp.

157{
158 return effectiveSpacing(scale, rotation, static_cast<KisAirbrushOptionData*>(nullptr), nullptr, pi);
159}

References effectiveSpacing().

◆ effectiveSpacing() [5/5]

KisSpacingInformation KisBrushBasedPaintOp::effectiveSpacing ( qreal scale,
qreal rotation,
const KisSpacingOption & spacingOption,
const KisPaintInformation & pi ) const

Definition at line 161 of file kis_brush_based_paintop.cpp.

162{
163 return effectiveSpacing(scale, rotation, static_cast<KisAirbrushOptionData*>(nullptr), &spacingOption, pi);
164}

References effectiveSpacing().

◆ prepareEmbeddedResources()

QList< KoResourceLoadResult > KisBrushBasedPaintOp::prepareEmbeddedResources ( const KisPaintOpSettingsSP settings,
KisResourcesInterfaceSP resourcesInterface )
static

Definition at line 134 of file kis_brush_based_paintop.cpp.

135{
137
138 resources << KisTextureOption::prepareEmbeddedResources(settings, resourcesInterface);
139
140 return resources;
141}
static QList< KoResourceLoadResult > prepareEmbeddedResources(const KisPropertiesConfigurationSP setting, KisResourcesInterfaceSP resourcesInterface)

References KisTextureOption::prepareEmbeddedResources().

◆ prepareLinkedResources()

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

Definition at line 122 of file kis_brush_based_paintop.cpp.

123{
125
126 KisBrushOptionProperties brushOption;
127 resources << brushOption.prepareLinkedResources(settings, resourcesInterface);
128
129 resources << KisTextureOption::prepareLinkedResources(settings, resourcesInterface);
130
131 return resources;
132}
QList< KoResourceLoadResult > prepareLinkedResources(const KisPropertiesConfigurationPointer settings, KisResourcesInterfaceSP resourcesInterface) const
static QList< KoResourceLoadResult > prepareLinkedResources(const KisPropertiesConfigurationSP setting, KisResourcesInterfaceSP resourcesInterface)

References KisPaintopPropertiesCanvasResourcesBase::prepareLinkedResources(), and KisTextureOption::prepareLinkedResources().

Member Data Documentation

◆ m_brush

KisBrushSP KisBrushBasedPaintOp::m_brush
protected

Definition at line 82 of file kis_brush_based_paintop.h.

◆ m_dabCache

KisDabCache* KisBrushBasedPaintOp::m_dabCache
protected

Definition at line 81 of file kis_brush_based_paintop.h.

◆ m_mirrorOption

KisMirrorOption KisBrushBasedPaintOp::m_mirrorOption
protected

Definition at line 88 of file kis_brush_based_paintop.h.

◆ m_precisionOption

KisPrecisionOption KisBrushBasedPaintOp::m_precisionOption
protected

Definition at line 89 of file kis_brush_based_paintop.h.

◆ m_textureOption

KisTextureOption KisBrushBasedPaintOp::m_textureOption
private

Definition at line 85 of file kis_brush_based_paintop.h.


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