Krita Source Code Documentation
Loading...
Searching...
No Matches
KisColorSmudgeStrategyBase Class Referenceabstract

#include <KisColorSmudgeStrategyBase.h>

+ Inheritance diagram for KisColorSmudgeStrategyBase:

Classes

struct  DabColoringStrategy
 
struct  DabColoringStrategyMask
 
struct  DabColoringStrategyStamp
 

Public Member Functions

void blendBrush (const QVector< KisPainter * > dstPainters, KisColorSmudgeSourceSP srcSampleDevice, KisFixedPaintDeviceSP maskDab, bool preserveMaskDab, const QRect &srcRect, const QRect &dstRect, const KoColor &currentPaintColor, qreal opacity, qreal smudgeRateValue, qreal maxPossibleSmudgeRateValue, qreal colorRateValue, qreal smudgeRadiusValue)
 
void blendInBackgroundWithDulling (KisFixedPaintDeviceSP dst, KisColorSmudgeSourceSP src, const QRect &dstRect, const KoColor &preparedDullingColor, const qreal smudgeRateOpacity)
 
void blendInBackgroundWithSmearing (KisFixedPaintDeviceSP dst, KisColorSmudgeSourceSP src, const QRect &srcRect, const QRect &dstRect, const qreal smudgeRateOpacity)
 
virtual DabColoringStrategycoloringStrategy ()=0
 
virtual qreal colorRateOpacity (qreal opacity, qreal smudgeRateValue, qreal colorRateValue, qreal maxPossibleSmudgeRateValue)
 
virtual qreal dullingRateOpacity (qreal opacity, qreal smudgeRateValue)
 
virtual QString finalCompositeOp (bool smearAlpha) const
 
virtual qreal finalPainterOpacity (qreal opacity, qreal smudgeRateValue)
 
void initializePaintingImpl (const KoColorSpace *dstColorSpace, bool smearAlpha, const QString &colorRateCompositeOpId)
 
 KisColorSmudgeStrategyBase (bool useDullingMode)
 
const KoColorSpacepreciseColorSpace () const override
 
virtual void sampleDullingColor (const QRect &srcRect, qreal sampleRadiusValue, KisColorSmudgeSourceSP sourceDevice, KisFixedPaintDeviceSP tempFixedDevice, KisFixedPaintDeviceSP maskDab, KoColor *resultColor)
 
virtual QString smearCompositeOp (bool smearAlpha) const
 
virtual qreal smearRateOpacity (qreal opacity, qreal smudgeRateValue)
 
- Public Member Functions inherited from KisColorSmudgeStrategy
virtual void initializePainting ()=0
 
 KisColorSmudgeStrategy ()
 
virtual QVector< QRect > paintDab (const QRect &srcRect, const QRect &dstRect, const KoColor &currentPaintColor, qreal opacity, qreal colorRateValue, qreal smudgeRateValue, qreal maxPossibleSmudgeRateValue, qreal lightnessStrengthValue, qreal smudgeRadiusValue)=0
 
virtual void updateMask (KisDabCache *dabCache, const KisPaintInformation &info, const KisDabShape &shape, const QPointF &cursorPoint, QRect *dstDabRect, qreal lightnessStrength)=0
 
virtual ~KisColorSmudgeStrategy ()=default
 

Protected Attributes

const KoCompositeOpm_colorRateOp {nullptr}
 
KoColor m_preparedDullingColor
 
const KoCompositeOpm_smearOp {nullptr}
 
- Protected Attributes inherited from KisColorSmudgeStrategy
KisOptimizedByteArray::MemoryAllocatorSP m_memoryAllocator
 

Private Attributes

KisFixedPaintDeviceSP m_blendDevice
 
bool m_useDullingMode {true}
 

Detailed Description

Definition at line 18 of file KisColorSmudgeStrategyBase.h.

Constructor & Destructor Documentation

◆ KisColorSmudgeStrategyBase()

KisColorSmudgeStrategyBase::KisColorSmudgeStrategyBase ( bool useDullingMode)

Definition at line 113 of file KisColorSmudgeStrategyBase.cpp.

114 : m_useDullingMode(useDullingMode)
115{
116}

Member Function Documentation

◆ blendBrush()

void KisColorSmudgeStrategyBase::blendBrush ( const QVector< KisPainter * > dstPainters,
KisColorSmudgeSourceSP srcSampleDevice,
KisFixedPaintDeviceSP maskDab,
bool preserveMaskDab,
const QRect & srcRect,
const QRect & dstRect,
const KoColor & currentPaintColor,
qreal opacity,
qreal smudgeRateValue,
qreal maxPossibleSmudgeRateValue,
qreal colorRateValue,
qreal smudgeRadiusValue )

Definition at line 184 of file KisColorSmudgeStrategyBase.cpp.

189{
190 const qreal colorRateOpacity = this->colorRateOpacity(opacity, smudgeRateValue, colorRateValue, maxPossibleSmudgeRateValue);
191
192 if (m_useDullingMode) {
193 this->sampleDullingColor(srcRect,
194 smudgeRadiusValue,
195 srcSampleDevice, m_blendDevice,
196 maskDab, &m_preparedDullingColor);
197
200 }
201 }
202
203 m_blendDevice->setRect(dstRect);
205
206 DabColoringStrategy &coloringStrategy = this->coloringStrategy();
207
208 const qreal dullingRateOpacity = this->dullingRateOpacity(opacity, smudgeRateValue);
209
210 if (colorRateOpacity > 0 &&
213 ((m_smearOp->id() == COMPOSITE_OVER &&
215 (m_smearOp->id() == COMPOSITE_COPY &&
216 qFuzzyCompare(dullingRateOpacity, OPACITY_OPAQUE_F)))) {
217
219 srcSampleDevice,
220 dstRect,
222 m_smearOp,
224 currentPaintColor.convertedTo(
228
229 } else {
230 if (!m_useDullingMode) {
231 const qreal smudgeRateOpacity = this->smearRateOpacity(opacity, smudgeRateValue);
233 srcRect, dstRect, smudgeRateOpacity);
234 } else {
236 dstRect,
238 }
239
240 if (colorRateOpacity > 0) {
242 currentPaintColor.convertedTo(m_preparedDullingColor.colorSpace()),
245 m_blendDevice, dstRect);
246 }
247 }
248
249 const bool preserveDab = preserveMaskDab && dstPainters.size() > 1;
250
251 Q_FOREACH (KisPainter *dstPainter, dstPainters) {
252 dstPainter->setOpacityF(finalPainterOpacity(opacity, smudgeRateValue));
253
254 dstPainter->bltFixedWithFixedSelection(dstRect.x(), dstRect.y(),
255 m_blendDevice, maskDab,
256 maskDab->bounds().x(), maskDab->bounds().y(),
258 dstRect.width(), dstRect.height());
259 dstPainter->renderMirrorMaskSafe(dstRect, m_blendDevice, maskDab, preserveDab);
260 }
261
262}
const qreal OPACITY_OPAQUE_F
const QString COMPOSITE_OVER
const QString COMPOSITE_COPY
virtual void sampleDullingColor(const QRect &srcRect, qreal sampleRadiusValue, KisColorSmudgeSourceSP sourceDevice, KisFixedPaintDeviceSP tempFixedDevice, KisFixedPaintDeviceSP maskDab, KoColor *resultColor)
void blendInBackgroundWithDulling(KisFixedPaintDeviceSP dst, KisColorSmudgeSourceSP src, const QRect &dstRect, const KoColor &preparedDullingColor, const qreal smudgeRateOpacity)
virtual qreal colorRateOpacity(qreal opacity, qreal smudgeRateValue, qreal colorRateValue, qreal maxPossibleSmudgeRateValue)
virtual qreal smearRateOpacity(qreal opacity, qreal smudgeRateValue)
virtual qreal finalPainterOpacity(qreal opacity, qreal smudgeRateValue)
virtual qreal dullingRateOpacity(qreal opacity, qreal smudgeRateValue)
virtual DabColoringStrategy & coloringStrategy()=0
void blendInBackgroundWithSmearing(KisFixedPaintDeviceSP dst, KisColorSmudgeSourceSP src, const QRect &srcRect, const QRect &dstRect, const qreal smudgeRateOpacity)
void setRect(const QRect &rc)
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 setOpacityF(qreal opacity)
void renderMirrorMaskSafe(QRect rc, KisFixedPaintDeviceSP dab, bool preserveDab)
void convertTo(const KoColorSpace *cs, KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags)
Definition KoColor.cpp:136
KoColor convertedTo(const KoColorSpace *cs, KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags) const
Definition KoColor.cpp:163
const KoColorSpace * colorSpace() const
return the current colorSpace
Definition KoColor.h:82
#define KIS_SAFE_ASSERT_RECOVER(cond)
Definition kis_assert.h:126
virtual void blendInFusedBackgroundAndColorRateWithDulling(KisFixedPaintDeviceSP dst, KisColorSmudgeSourceSP src, const QRect &dstRect, const KoColor &preparedDullingColor, const KoCompositeOp *smearOp, const qreal smudgeRateOpacity, const KoColor &paintColor, const KoCompositeOp *colorRateOp, const qreal colorRateOpacity) const =0
virtual void blendInColorRate(const KoColor &paintColor, const KoCompositeOp *colorRateOp, qreal colorRateOpacity, KisFixedPaintDeviceSP dstDevice, const QRect &dstRect) const =0
virtual bool supportsFusedDullingBlending() const =0
const KoColorSpace * colorSpace

References blendInBackgroundWithDulling(), blendInBackgroundWithSmearing(), KisColorSmudgeStrategyBase::DabColoringStrategy::blendInColorRate(), KisColorSmudgeStrategyBase::DabColoringStrategy::blendInFusedBackgroundAndColorRateWithDulling(), KisPainter::bltFixedWithFixedSelection(), KisFixedPaintDevice::bounds(), coloringStrategy(), colorRateOpacity(), KoColor::colorSpace(), KoCompositeOp::colorSpace, COMPOSITE_COPY, COMPOSITE_OVER, KoColor::convertedTo(), KoColor::convertTo(), dullingRateOpacity(), finalPainterOpacity(), KoCompositeOp::id, KIS_SAFE_ASSERT_RECOVER, KisFixedPaintDevice::lazyGrowBufferWithoutInitialization(), m_blendDevice, m_colorRateOp, m_preparedDullingColor, m_smearOp, m_useDullingMode, OPACITY_OPAQUE_F, KisPainter::renderMirrorMaskSafe(), sampleDullingColor(), KisPainter::setOpacityF(), KisFixedPaintDevice::setRect(), smearRateOpacity(), and KisColorSmudgeStrategyBase::DabColoringStrategy::supportsFusedDullingBlending().

◆ blendInBackgroundWithDulling()

void KisColorSmudgeStrategyBase::blendInBackgroundWithDulling ( KisFixedPaintDeviceSP dst,
KisColorSmudgeSourceSP src,
const QRect & dstRect,
const KoColor & preparedDullingColor,
const qreal smudgeRateOpacity )

Definition at line 286 of file KisColorSmudgeStrategyBase.cpp.

289{
290 Q_UNUSED(preparedDullingColor);
291
292 if (m_smearOp->id() == COMPOSITE_COPY && qFuzzyCompare(smudgeRateOpacity, OPACITY_OPAQUE_F)) {
293 dst->fill(dst->bounds(), m_preparedDullingColor);
294 } else {
295 src->readBytes(dst->data(), dstRect);
296 m_smearOp->composite(dst->data(), dstRect.width() * dst->pixelSize(),
298 0, 0,
299 1, dstRect.width() * dstRect.height(),
300 smudgeRateOpacity);
301 }
302}
void fill(qint32 x, qint32 y, qint32 w, qint32 h, const quint8 *fillPixel)
quint8 * data()
Definition KoColor.h:144
void composite(quint8 *dstRowStart, qint32 dstRowStride, const quint8 *srcRowStart, qint32 srcRowStride, const quint8 *maskRowStart, qint32 maskRowStride, qint32 rows, qint32 numColumns, float opacity, const QBitArray &channelFlags=QBitArray()) const

References KisFixedPaintDevice::bounds(), KoCompositeOp::composite(), COMPOSITE_COPY, KisFixedPaintDevice::data(), KoColor::data(), KisFixedPaintDevice::fill(), KoCompositeOp::id, m_preparedDullingColor, m_smearOp, OPACITY_OPAQUE_F, and KisFixedPaintDevice::pixelSize().

◆ blendInBackgroundWithSmearing()

void KisColorSmudgeStrategyBase::blendInBackgroundWithSmearing ( KisFixedPaintDeviceSP dst,
KisColorSmudgeSourceSP src,
const QRect & srcRect,
const QRect & dstRect,
const qreal smudgeRateOpacity )

Definition at line 264 of file KisColorSmudgeStrategyBase.cpp.

267{
268 if (m_smearOp->id() == COMPOSITE_COPY && qFuzzyCompare(smudgeRateOpacity, OPACITY_OPAQUE_F)) {
269 src->readBytes(dst->data(), srcRect);
270 } else {
271 src->readBytes(dst->data(), dstRect);
272
273 KisFixedPaintDevice tempDevice(src->colorSpace(), m_memoryAllocator);
274 tempDevice.setRect(srcRect);
275 tempDevice.lazyGrowBufferWithoutInitialization();
276
277 src->readBytes(tempDevice.data(), srcRect);
278 m_smearOp->composite(dst->data(), dstRect.width() * dst->pixelSize(),
279 tempDevice.data(), dstRect.width() * tempDevice.pixelSize(), // stride should be random non-zero
280 0, 0,
281 1, dstRect.width() * dstRect.height(),
282 smudgeRateOpacity);
283 }
284}
KisOptimizedByteArray::MemoryAllocatorSP m_memoryAllocator

References KoCompositeOp::composite(), COMPOSITE_COPY, KisFixedPaintDevice::data(), KoCompositeOp::id, KisFixedPaintDevice::lazyGrowBufferWithoutInitialization(), KisColorSmudgeStrategy::m_memoryAllocator, m_smearOp, OPACITY_OPAQUE_F, KisFixedPaintDevice::pixelSize(), and KisFixedPaintDevice::setRect().

◆ coloringStrategy()

virtual DabColoringStrategy & KisColorSmudgeStrategyBase::coloringStrategy ( )
pure virtual

◆ colorRateOpacity()

qreal KisColorSmudgeStrategyBase::colorRateOpacity ( qreal opacity,
qreal smudgeRateValue,
qreal colorRateValue,
qreal maxPossibleSmudgeRateValue )
virtual

Reimplemented in KisColorSmudgeStrategyMaskLegacy.

Definition at line 154 of file KisColorSmudgeStrategyBase.cpp.

156{
157 Q_UNUSED(smudgeRateValue);
158 Q_UNUSED(maxPossibleSmudgeRateValue);
159 return colorRateValue * colorRateValue * opacity;
160}

◆ dullingRateOpacity()

qreal KisColorSmudgeStrategyBase::dullingRateOpacity ( qreal opacity,
qreal smudgeRateValue )
virtual

Reimplemented in KisColorSmudgeStrategyMaskLegacy.

Definition at line 162 of file KisColorSmudgeStrategyBase.cpp.

163{
164 return 0.8 * smudgeRateValue * opacity;
165}

◆ finalCompositeOp()

QString KisColorSmudgeStrategyBase::finalCompositeOp ( bool smearAlpha) const
virtual

Reimplemented in KisColorSmudgeStrategyMaskLegacy.

Definition at line 140 of file KisColorSmudgeStrategyBase.cpp.

141{
142 Q_UNUSED(smearAlpha);
143 return COMPOSITE_COPY;
144}

References COMPOSITE_COPY.

◆ finalPainterOpacity()

qreal KisColorSmudgeStrategyBase::finalPainterOpacity ( qreal opacity,
qreal smudgeRateValue )
virtual

Reimplemented in KisColorSmudgeStrategyMaskLegacy.

Definition at line 146 of file KisColorSmudgeStrategyBase.cpp.

147{
148 Q_UNUSED(opacity);
149 Q_UNUSED(smudgeRateValue);
150
151 return OPACITY_OPAQUE_F;
152}

References OPACITY_OPAQUE_F.

◆ initializePaintingImpl()

void KisColorSmudgeStrategyBase::initializePaintingImpl ( const KoColorSpace * dstColorSpace,
bool smearAlpha,
const QString & colorRateCompositeOpId )

Definition at line 118 of file KisColorSmudgeStrategyBase.cpp.

120{
122 m_smearOp = dstColorSpace->compositeOp(smearCompositeOp(smearAlpha));
123 m_colorRateOp = dstColorSpace->compositeOp(colorRateCompositeOpId);
124 m_preparedDullingColor.convertTo(dstColorSpace);
125}
virtual QString smearCompositeOp(bool smearAlpha) const
const KoCompositeOp * compositeOp(const QString &id, const KoColorSpace *srcSpace=nullptr) const

References KoColorSpace::compositeOp(), KoColor::convertTo(), m_blendDevice, m_colorRateOp, KisColorSmudgeStrategy::m_memoryAllocator, m_preparedDullingColor, m_smearOp, and smearCompositeOp().

◆ preciseColorSpace()

const KoColorSpace * KisColorSmudgeStrategyBase::preciseColorSpace ( ) const
overridevirtual

Implements KisColorSmudgeStrategy.

Definition at line 127 of file KisColorSmudgeStrategyBase.cpp.

128{
129 // verify that initialize() has already been called!
131
132 return m_smearOp->colorSpace();
133}
#define KIS_ASSERT_RECOVER_RETURN_VALUE(cond, val)
Definition kis_assert.h:85
static KoColorSpaceRegistry * instance()

References KoCompositeOp::colorSpace, KoColorSpaceRegistry::instance(), KIS_ASSERT_RECOVER_RETURN_VALUE, and m_smearOp.

◆ sampleDullingColor()

void KisColorSmudgeStrategyBase::sampleDullingColor ( const QRect & srcRect,
qreal sampleRadiusValue,
KisColorSmudgeSourceSP sourceDevice,
KisFixedPaintDeviceSP tempFixedDevice,
KisFixedPaintDeviceSP maskDab,
KoColor * resultColor )
virtual

Reimplemented in KisColorSmudgeStrategyMaskLegacy.

Definition at line 172 of file KisColorSmudgeStrategyBase.cpp.

176{
177 using namespace KisColorSmudgeSampleUtils;
178 sampleColor<WeightedSampleWrapper>(srcRect, sampleRadiusValue,
179 sourceDevice, tempFixedDevice,
180 maskDab, resultColor);
181}

◆ smearCompositeOp()

QString KisColorSmudgeStrategyBase::smearCompositeOp ( bool smearAlpha) const
virtual

Reimplemented in KisColorSmudgeStrategyMaskLegacy.

Definition at line 135 of file KisColorSmudgeStrategyBase.cpp.

136{
137 return smearAlpha ? COMPOSITE_COPY : COMPOSITE_OVER;
138}

References COMPOSITE_COPY, and COMPOSITE_OVER.

◆ smearRateOpacity()

qreal KisColorSmudgeStrategyBase::smearRateOpacity ( qreal opacity,
qreal smudgeRateValue )
virtual

Reimplemented in KisColorSmudgeStrategyMaskLegacy.

Definition at line 167 of file KisColorSmudgeStrategyBase.cpp.

168{
169 return smudgeRateValue * opacity;
170}

Member Data Documentation

◆ m_blendDevice

KisFixedPaintDeviceSP KisColorSmudgeStrategyBase::m_blendDevice
private

Definition at line 122 of file KisColorSmudgeStrategyBase.h.

◆ m_colorRateOp

const KoCompositeOp* KisColorSmudgeStrategyBase::m_colorRateOp {nullptr}
protected

Definition at line 118 of file KisColorSmudgeStrategyBase.h.

118{nullptr};

◆ m_preparedDullingColor

KoColor KisColorSmudgeStrategyBase::m_preparedDullingColor
protected

Definition at line 119 of file KisColorSmudgeStrategyBase.h.

◆ m_smearOp

const KoCompositeOp* KisColorSmudgeStrategyBase::m_smearOp {nullptr}
protected

Definition at line 120 of file KisColorSmudgeStrategyBase.h.

120{nullptr};

◆ m_useDullingMode

bool KisColorSmudgeStrategyBase::m_useDullingMode {true}
private

Definition at line 123 of file KisColorSmudgeStrategyBase.h.

123{true};

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