26 const KoColor &preparedDullingColor,
const KoCompositeOp *smearOp,
const qreal smudgeRateOpacity,
29 KoColor dullingFillColor(preparedDullingColor);
37 src->readBytes(dst->
data(), dstRect);
39 dullingFillColor.
data(), 0,
41 1, dstRect.width() * dstRect.height(),
50 const QRect &dstRect)
const
57 dstRect.height(), dstRect.width(),
74 const QRect &dstRect)
const
82 m_origDab->data(), dstRect.width() * m_origDab->pixelSize(),
84 dstRect.height(), dstRect.width(),
95 const KoColor &preparedDullingColor,
const KoCompositeOp *smearOp,
const qreal smudgeRateOpacity,
101 Q_UNUSED(preparedDullingColor);
103 Q_UNUSED(smudgeRateOpacity);
104 Q_UNUSED(paintColor);
105 Q_UNUSED(colorRateOp);
119 const QString &colorRateCompositeOpId)
142 Q_UNUSED(smearAlpha);
149 Q_UNUSED(smudgeRateValue);
155 qreal maxPossibleSmudgeRateValue)
157 Q_UNUSED(smudgeRateValue);
158 Q_UNUSED(maxPossibleSmudgeRateValue);
159 return colorRateValue * colorRateValue * opacity;
164 return 0.8 * smudgeRateValue * opacity;
169 return smudgeRateValue * opacity;
178 sampleColor<WeightedSampleWrapper>(srcRect, sampleRadiusValue,
179 sourceDevice, tempFixedDevice,
180 maskDab, resultColor);
186 const QRect &dstRect,
const KoColor ¤tPaintColor, qreal opacity,
187 qreal smudgeRateValue, qreal maxPossibleSmudgeRateValue, qreal colorRateValue,
188 qreal smudgeRadiusValue)
231 const qreal smudgeRateOpacity = this->
smearRateOpacity(opacity, smudgeRateValue);
233 srcRect, dstRect, smudgeRateOpacity);
249 const bool preserveDab = preserveMaskDab && dstPainters.size() > 1;
251 Q_FOREACH (
KisPainter *dstPainter, dstPainters) {
258 dstRect.width(), dstRect.height());
265 const QRect &srcRect,
const QRect &dstRect,
266 const qreal smudgeRateOpacity)
269 src->readBytes(dst->
data(), srcRect);
271 src->readBytes(dst->
data(), dstRect);
277 src->readBytes(tempDevice.
data(), srcRect);
281 1, dstRect.width() * dstRect.height(),
287 const QRect &dstRect,
const KoColor &preparedDullingColor,
288 const qreal smudgeRateOpacity)
290 Q_UNUSED(preparedDullingColor);
295 src->readBytes(dst->
data(), dstRect);
299 1, dstRect.width() * dstRect.height(),
const qreal OPACITY_OPAQUE_F
const QString COMPOSITE_OVER
const QString COMPOSITE_COPY
const KoCompositeOp * m_colorRateOp
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 QString finalCompositeOp(bool smearAlpha) const
virtual QString smearCompositeOp(bool smearAlpha) const
virtual qreal colorRateOpacity(qreal opacity, qreal smudgeRateValue, qreal colorRateValue, qreal maxPossibleSmudgeRateValue)
void blendBrush(const QVector< KisPainter * > dstPainters, KisColorSmudgeSourceSP srcSampleDevice, KisFixedPaintDeviceSP maskDab, bool preserveMaskDab, const QRect &srcRect, const QRect &dstRect, const KoColor ¤tPaintColor, qreal opacity, qreal smudgeRateValue, qreal maxPossibleSmudgeRateValue, qreal colorRateValue, qreal smudgeRadiusValue)
virtual qreal smearRateOpacity(qreal opacity, qreal smudgeRateValue)
KisColorSmudgeStrategyBase(bool useDullingMode)
KoColor m_preparedDullingColor
virtual qreal finalPainterOpacity(qreal opacity, qreal smudgeRateValue)
virtual qreal dullingRateOpacity(qreal opacity, qreal smudgeRateValue)
void initializePaintingImpl(const KoColorSpace *dstColorSpace, bool smearAlpha, const QString &colorRateCompositeOpId)
KisFixedPaintDeviceSP m_blendDevice
const KoCompositeOp * m_smearOp
virtual DabColoringStrategy & coloringStrategy()=0
const KoColorSpace * preciseColorSpace() const override
void blendInBackgroundWithSmearing(KisFixedPaintDeviceSP dst, KisColorSmudgeSourceSP src, const QRect &srcRect, const QRect &dstRect, const qreal smudgeRateOpacity)
KisOptimizedByteArray::MemoryAllocatorSP m_memoryAllocator
void setRect(const QRect &rc)
void lazyGrowBufferWithoutInitialization()
quint32 pixelSize() const
void fill(qint32 x, qint32 y, qint32 w, qint32 h, const quint8 *fillPixel)
const KoColorSpace * colorSpace() 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 setOpacityF(qreal opacity)
void renderMirrorMaskSafe(QRect rc, KisFixedPaintDeviceSP dab, bool preserveDab)
const KoCompositeOp * compositeOp(const QString &id, const KoColorSpace *srcSpace=nullptr) const
void convertTo(const KoColorSpace *cs, KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags)
KoColor convertedTo(const KoColorSpace *cs, KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags) const
const KoColorSpace * colorSpace() const
return the current colorSpace
#define KIS_ASSERT_RECOVER_RETURN_VALUE(cond, val)
#define KIS_SAFE_ASSERT_RECOVER(cond)
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
#define KIS_ASSERT_RECOVER_RETURN(cond)
void blendInColorRate(const KoColor &paintColor, const KoCompositeOp *colorRateOp, qreal colorRateOpacity, KisFixedPaintDeviceSP dstDevice, const QRect &dstRect) const override
bool supportsFusedDullingBlending() const override
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 override
void setStampDab(KisFixedPaintDeviceSP device)
void blendInColorRate(const KoColor &paintColor, const KoCompositeOp *colorRateOp, qreal colorRateOpacity, KisFixedPaintDeviceSP dstDevice, const QRect &dstRect) const override
bool supportsFusedDullingBlending() const override
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 override
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
static KoColorSpaceRegistry * instance()
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
const KoColorSpace * colorSpace