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

#include <KisColorSmudgeStrategyLightness.h>

+ Inheritance diagram for KisColorSmudgeStrategyLightness:

Public Member Functions

DabColoringStrategycoloringStrategy () override
 
void initializePainting () override
 
 KisColorSmudgeStrategyLightness (KisPainter *painter, bool smearAlpha, bool useDullingMode, KisPaintThicknessOptionData::ThicknessMode thicknessMode)
 
QVector< QRect > paintDab (const QRect &srcRect, const QRect &dstRect, const KoColor &currentPaintColor, qreal opacity, qreal colorRateValue, qreal smudgeRateValue, qreal maxPossibleSmudgeRateValue, qreal lightnessStrengthValue, qreal smudgeRadiusValue) override
 
void updateMask (KisDabCache *dabCache, const KisPaintInformation &info, const KisDabShape &shape, const QPointF &cursorPoint, QRect *dstDabRect, qreal lightnessStrength) override
 
- Public Member Functions inherited from KisColorSmudgeStrategyBase
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 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
 KisColorSmudgeStrategy ()
 
virtual ~KisColorSmudgeStrategy ()=default
 

Private Attributes

DabColoringStrategyMask m_coloringStrategy
 
KisPaintDeviceSP m_colorOnlyDevice
 
KisPainter m_finalPainter
 
KisPaintDeviceSP m_heightmapDevice
 
KisPainter m_heightmapPainter
 
KisPainterm_initializationPainter {nullptr}
 
KisOverlayPaintDeviceWrapperm_layerOverlayDevice {nullptr}
 
KisFixedPaintDeviceSP m_maskDab
 
KisFixedPaintDeviceSP m_origDab
 
KisPaintDeviceSP m_projectionDevice
 
bool m_shouldPreserveOriginalDab {true}
 
bool m_smearAlpha {true}
 
KisColorSmudgeSourceSP m_sourceWrapperDevice
 
KisPaintThicknessOptionData::ThicknessMode m_thicknessMode
 

Additional Inherited Members

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

Detailed Description

Definition at line 14 of file KisColorSmudgeStrategyLightness.h.

Constructor & Destructor Documentation

◆ KisColorSmudgeStrategyLightness()

KisColorSmudgeStrategyLightness::KisColorSmudgeStrategyLightness ( KisPainter * painter,
bool smearAlpha,
bool useDullingMode,
KisPaintThicknessOptionData::ThicknessMode thicknessMode )

Definition at line 20 of file KisColorSmudgeStrategyLightness.cpp.

22 : KisColorSmudgeStrategyBase(useDullingMode)
25 , m_smearAlpha(smearAlpha)
27 , m_thicknessMode(thicknessMode)
28{
29 KIS_SAFE_ASSERT_RECOVER(thicknessMode == KisPaintThicknessOptionData::OVERLAY ||
30 thicknessMode == KisPaintThicknessOptionData::OVERWRITE) {
31
32 thicknessMode = KisPaintThicknessOptionData::OVERLAY;
33 }
34}
KisPaintThicknessOptionData::ThicknessMode m_thicknessMode
#define KIS_SAFE_ASSERT_RECOVER(cond)
Definition kis_assert.h:126
static KoColorSpaceRegistry * instance()

References KIS_SAFE_ASSERT_RECOVER.

Member Function Documentation

◆ coloringStrategy()

KisColorSmudgeStrategyBase::DabColoringStrategy & KisColorSmudgeStrategyLightness::coloringStrategy ( )
overridevirtual

Implements KisColorSmudgeStrategyBase.

Definition at line 85 of file KisColorSmudgeStrategyLightness.cpp.

86{
87 return m_coloringStrategy;
88}

References m_coloringStrategy.

◆ initializePainting()

void KisColorSmudgeStrategyLightness::initializePainting ( )
overridevirtual

Implements KisColorSmudgeStrategy.

Definition at line 36 of file KisColorSmudgeStrategyLightness.cpp.

37{
38 KisColorSmudgeInterstrokeData *colorSmudgeData =
40
41 if (colorSmudgeData) {
42 m_projectionDevice = colorSmudgeData->projectionDevice;
43 m_colorOnlyDevice = colorSmudgeData->colorBlendDevice;
44 m_heightmapDevice = colorSmudgeData->heightmapDevice;
46 }
47
48 KIS_SAFE_ASSERT_RECOVER(colorSmudgeData) {
50
54 cs->colorModelId().id(),
56 cs->profile()));
57
62 }
63
67
69
70 // we should read data from the color layer, not from the final projection layer
72
78
82
83}
const KoID Integer16BitsColorDepthID("U16", ki18n("16-bit integer/channel"))
const QString COMPOSITE_OVER
const QString COMPOSITE_COPY
void initializePaintingImpl(const KoColorSpace *dstColorSpace, bool smearAlpha, const QString &colorRateCompositeOpId)
KisOverlayPaintDeviceWrapper * m_layerOverlayDevice
bool supportsWraproundMode() const
void setDefaultBounds(KisDefaultBoundsBaseSP bounds)
KisInterstrokeDataSP interstrokeData() const
const KoColorSpace * colorSpace() const
void setSupportsWraparoundMode(bool value)
KisDefaultBoundsBaseSP defaultBounds() const
void convertTo(const KoColorSpace *dstColorSpace, KoColorConversionTransformation::Intent renderingIntent=KoColorConversionTransformation::internalRenderingIntent(), KoColorConversionTransformation::ConversionFlags conversionFlags=KoColorConversionTransformation::internalConversionFlags(), KUndo2Command *parentCommand=nullptr, KoUpdater *progressUpdater=nullptr)
QString compositeOpId
void copyMirrorInformationFrom(const KisPainter *other)
QBitArray channelFlags()
void setSelection(KisSelectionSP selection)
KisSelectionSP selection
void begin(KisPaintDeviceSP device)
KisPaintDeviceSP device
void setChannelFlags(QBitArray channelFlags)
void setCompositeOpId(const KoCompositeOp *op)
virtual KoID colorModelId() const =0
virtual const KoColorProfile * profile() const =0
QString id() const
Definition KoID.cpp:63
QSharedPointer< T > toQShared(T *ptr)
KisOverlayPaintDeviceWrapper overlayDeviceWrapper

References KisPainter::begin(), KisPainter::channelFlags(), KisColorSmudgeInterstrokeData::colorBlendDevice, KoColorSpace::colorModelId(), KisPaintDevice::colorSpace(), COMPOSITE_COPY, COMPOSITE_OVER, KisPainter::compositeOpId, KisPaintDevice::convertTo(), KisPainter::copyMirrorInformationFrom(), KisPaintDevice::defaultBounds(), KisPainter::device, KisColorSmudgeInterstrokeData::heightmapDevice, KoID::id(), KisColorSmudgeStrategyBase::initializePaintingImpl(), KoColorSpaceRegistry::instance(), Integer16BitsColorDepthID, KisPaintDevice::interstrokeData(), KIS_SAFE_ASSERT_RECOVER, m_colorOnlyDevice, m_finalPainter, m_heightmapDevice, m_heightmapPainter, m_initializationPainter, m_layerOverlayDevice, m_projectionDevice, m_smearAlpha, m_sourceWrapperDevice, KisColorSmudgeInterstrokeData::overlayDeviceWrapper, KoColorSpace::profile(), KisColorSmudgeInterstrokeData::projectionDevice, KisPainter::selection, KisPainter::setChannelFlags(), KisPainter::setCompositeOpId(), KisPaintDevice::setDefaultBounds(), KisPainter::setSelection(), KisPaintDevice::setSupportsWraparoundMode(), KisPaintDevice::supportsWraproundMode(), and toQShared().

◆ paintDab()

QVector< QRect > KisColorSmudgeStrategyLightness::paintDab ( const QRect & srcRect,
const QRect & dstRect,
const KoColor & currentPaintColor,
qreal opacity,
qreal colorRateValue,
qreal smudgeRateValue,
qreal maxPossibleSmudgeRateValue,
qreal lightnessStrengthValue,
qreal smudgeRadiusValue )
overridevirtual

Implements KisColorSmudgeStrategy.

Definition at line 138 of file KisColorSmudgeStrategyLightness.cpp.

142{
143 const int numPixels = dstRect.width() * dstRect.height();
144
145 const QVector<QRect> mirroredRects = m_finalPainter.calculateAllMirroredRects(dstRect);
146
147 QVector<QRect> readRects;
148 readRects << mirroredRects;
149 readRects << srcRect;
150 m_sourceWrapperDevice->readRects(readRects);
151
152
156 srcRect, dstRect,
157 currentPaintColor,
158 opacity,
159 smudgeRateValue,
160 maxPossibleSmudgeRateValue,
161 colorRateValue,
162 smudgeRadiusValue);
163
164
165 const qreal overlaySmearRate = smudgeRateValue - 0.01; //adjust so minimum value is 0 instead of 1%
166 const qreal overlayAdjustment =
167 (m_thicknessMode == KisPaintThicknessOptionData::ThicknessMode::OVERWRITE) ?
168 1.0 : KisAlgebra2D::lerp(overlaySmearRate, 1.0, paintThicknessValue);
169 const qreal brushHeightmapOpacity = opacity * overlayAdjustment;
170 m_heightmapPainter.setOpacityF(brushHeightmapOpacity);
171 m_heightmapPainter.bltFixed(dstRect.topLeft(), m_origDab, m_origDab->bounds());
173
174
175 KisFixedPaintDeviceSP tempColorDevice =
177
178 KisFixedPaintDeviceSP tempHeightmapDevice =
180
181 Q_FOREACH(const QRect& rc, mirroredRects) {
182 tempColorDevice->setRect(rc);
183 tempColorDevice->lazyGrowBufferWithoutInitialization();
184
185 tempHeightmapDevice->setRect(rc);
186 tempHeightmapDevice->lazyGrowBufferWithoutInitialization();
187
188 m_colorOnlyDevice->readBytes(tempColorDevice->data(), rc);
189 m_heightmapDevice->readBytes(tempHeightmapDevice->data(), rc);
190 tempColorDevice->colorSpace()->
191 modulateLightnessByGrayBrush(tempColorDevice->data(),
192 reinterpret_cast<const QRgb*>(tempHeightmapDevice->data()),
193 1.0,
194 numPixels);
195 m_projectionDevice->writeBytes(tempColorDevice->data(), tempColorDevice->bounds());
196 }
197
198 m_layerOverlayDevice->writeRects(mirroredRects);
199
200 return mirroredRects;
201}
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)
KisOptimizedByteArray::MemoryAllocatorSP m_memoryAllocator
void setRect(const QRect &rc)
const KoColorSpace * colorSpace() const
void writeRects(const QVector< QRect > &rects, int index=0)
void readBytes(quint8 *data, qint32 x, qint32 y, qint32 w, qint32 h) const
void writeBytes(const quint8 *data, qint32 x, qint32 y, qint32 w, qint32 h)
const QVector< QRect > calculateAllMirroredRects(const QRect &rc)
void setOpacityF(qreal opacity)
void renderMirrorMaskSafe(QRect rc, KisFixedPaintDeviceSP dab, bool preserveDab)
void bltFixed(qint32 dstX, qint32 dstY, const KisFixedPaintDeviceSP srcDev, qint32 srcX, qint32 srcY, qint32 srcWidth, qint32 srcHeight)
unsigned int QRgb

References KisColorSmudgeStrategyBase::blendBrush(), KisPainter::bltFixed(), KisFixedPaintDevice::bounds(), KisPainter::calculateAllMirroredRects(), KisFixedPaintDevice::colorSpace(), KisPaintDevice::colorSpace(), KisFixedPaintDevice::data(), KisFixedPaintDevice::lazyGrowBufferWithoutInitialization(), KisAlgebra2D::lerp(), m_colorOnlyDevice, m_finalPainter, m_heightmapDevice, m_heightmapPainter, m_layerOverlayDevice, m_maskDab, KisColorSmudgeStrategy::m_memoryAllocator, m_origDab, m_projectionDevice, m_shouldPreserveOriginalDab, m_sourceWrapperDevice, m_thicknessMode, KisPaintDevice::readBytes(), KisPainter::renderMirrorMaskSafe(), KisPainter::setOpacityF(), KisFixedPaintDevice::setRect(), KisPaintDevice::writeBytes(), and KisOverlayPaintDeviceWrapper::writeRects().

◆ updateMask()

void KisColorSmudgeStrategyLightness::updateMask ( KisDabCache * dabCache,
const KisPaintInformation & info,
const KisDabShape & shape,
const QPointF & cursorPoint,
QRect * dstDabRect,
qreal lightnessStrength )
overridevirtual

Implements KisColorSmudgeStrategy.

Definition at line 90 of file KisColorSmudgeStrategyLightness.cpp.

93{
95 cursorPoint,
96 shape,
97 info,
98 1.0,
99 dstDabRect);
100
102
103 const int numPixels = m_origDab->bounds().width() * m_origDab->bounds().height();
104
105 if (paintThickness < 1.0) {
109 }
110
111 const int denormedPaintThickness = qRound(paintThickness * 255.0);
112 KoBgrU8Traits::Pixel *pixelPtr = reinterpret_cast<KoBgrU8Traits::Pixel *>(m_origDab->data());
113 for (int i = 0; i < numPixels; i++) {
114 int gray = pixelPtr->red - 127;
115
116 if (gray >= 0) {
117 gray = KoColorSpaceMaths<quint8>::multiply(gray, denormedPaintThickness);
118 } else {
119 gray = -KoColorSpaceMaths<quint8>::multiply(-gray, denormedPaintThickness);
120 }
121
122 gray = qBound(0, gray + 127, 255);
123
124 pixelPtr->red = gray;
125 pixelPtr->green = gray;
126 pixelPtr->blue = gray;
127
128 pixelPtr++;
129 }
130 }
131
135}
bool needSeparateOriginal() const
KisFixedPaintDeviceSP fetchNormalizedImageDab(const KoColorSpace *cs, const QPointF &cursorPoint, KisDabShape const &shape, const KisPaintInformation &info, qreal softnessFactor, QRect *dstDabRect)
static _Tdst multiply(_T a, _Tdst b)
virtual void copyOpacityU8(quint8 *src, quint8 *dst, qint32 nPixels) const =0

References KisFixedPaintDevice::bounds(), KisFixedPaintDevice::colorSpace(), KoColorSpace::copyOpacityU8(), KisFixedPaintDevice::data(), KisDabCache::fetchNormalizedImageDab(), KisFixedPaintDevice::lazyGrowBufferWithoutInitialization(), m_maskDab, m_origDab, m_shouldPreserveOriginalDab, KoColorSpaceMaths< _T, _Tdst >::multiply(), KisDabCache::needSeparateOriginal(), and KisFixedPaintDevice::setRect().

Member Data Documentation

◆ m_coloringStrategy

DabColoringStrategyMask KisColorSmudgeStrategyLightness::m_coloringStrategy
private

Definition at line 47 of file KisColorSmudgeStrategyLightness.h.

◆ m_colorOnlyDevice

KisPaintDeviceSP KisColorSmudgeStrategyLightness::m_colorOnlyDevice
private

Definition at line 40 of file KisColorSmudgeStrategyLightness.h.

◆ m_finalPainter

KisPainter KisColorSmudgeStrategyLightness::m_finalPainter
private

Definition at line 44 of file KisColorSmudgeStrategyLightness.h.

◆ m_heightmapDevice

KisPaintDeviceSP KisColorSmudgeStrategyLightness::m_heightmapDevice
private

Definition at line 39 of file KisColorSmudgeStrategyLightness.h.

◆ m_heightmapPainter

KisPainter KisColorSmudgeStrategyLightness::m_heightmapPainter
private

Definition at line 45 of file KisColorSmudgeStrategyLightness.h.

◆ m_initializationPainter

KisPainter* KisColorSmudgeStrategyLightness::m_initializationPainter {nullptr}
private

Definition at line 49 of file KisColorSmudgeStrategyLightness.h.

49{nullptr};

◆ m_layerOverlayDevice

KisOverlayPaintDeviceWrapper* KisColorSmudgeStrategyLightness::m_layerOverlayDevice {nullptr}
private

Definition at line 42 of file KisColorSmudgeStrategyLightness.h.

42{nullptr};

◆ m_maskDab

KisFixedPaintDeviceSP KisColorSmudgeStrategyLightness::m_maskDab
private

Definition at line 37 of file KisColorSmudgeStrategyLightness.h.

◆ m_origDab

KisFixedPaintDeviceSP KisColorSmudgeStrategyLightness::m_origDab
private

Definition at line 38 of file KisColorSmudgeStrategyLightness.h.

◆ m_projectionDevice

KisPaintDeviceSP KisColorSmudgeStrategyLightness::m_projectionDevice
private

Definition at line 41 of file KisColorSmudgeStrategyLightness.h.

◆ m_shouldPreserveOriginalDab

bool KisColorSmudgeStrategyLightness::m_shouldPreserveOriginalDab {true}
private

Definition at line 46 of file KisColorSmudgeStrategyLightness.h.

46{true};

◆ m_smearAlpha

bool KisColorSmudgeStrategyLightness::m_smearAlpha {true}
private

Definition at line 48 of file KisColorSmudgeStrategyLightness.h.

48{true};

◆ m_sourceWrapperDevice

KisColorSmudgeSourceSP KisColorSmudgeStrategyLightness::m_sourceWrapperDevice
private

Definition at line 43 of file KisColorSmudgeStrategyLightness.h.

◆ m_thicknessMode

KisPaintThicknessOptionData::ThicknessMode KisColorSmudgeStrategyLightness::m_thicknessMode
private

Definition at line 50 of file KisColorSmudgeStrategyLightness.h.


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