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

#include <KisMaskingBrushRenderer.h>

Public Member Functions

 KisMaskingBrushRenderer (KisPaintDeviceSP dstDevice, const QString &compositeOpId)
 
KisPaintDeviceSP maskDevice () const
 
KisPaintDeviceSP strokeDevice () const
 
void updateProjection (const QRect &rc)
 
 ~KisMaskingBrushRenderer ()
 

Private Attributes

QScopedPointer< KisMaskingBrushCompositeOpBasem_compositeOp
 
KisPaintDeviceSP m_dstDevice
 
KisPaintDeviceSP m_maskDevice
 
KisPaintDeviceSP m_strokeDevice
 

Detailed Description

Definition at line 15 of file KisMaskingBrushRenderer.h.

Constructor & Destructor Documentation

◆ KisMaskingBrushRenderer()

KisMaskingBrushRenderer::KisMaskingBrushRenderer ( KisPaintDeviceSP dstDevice,
const QString & compositeOpId )

Definition at line 23 of file KisMaskingBrushRenderer.cpp.

24 : m_dstDevice(dstDevice)
25{
26 m_strokeDevice = new KisPaintDevice(dstDevice->colorSpace());
30
33
34 const KoColorSpace *dstCs = m_dstDevice->colorSpace();
35 const int pixelSize = dstCs->pixelSize();
36
38 int alphaChannelOffset = -1;
39 int alphaPos = dstCs->alphaPos();
40
41 KIS_SAFE_ASSERT_RECOVER (alphaPos >= 0) {
42 alphaPos = 0;
43 }
44
45 const QList<KoChannelInfo *> channels = dstCs->channels();
46 alphaChannelOffset = channels[alphaPos]->pos()/* * channels[i]->size()*/;
47 alphaChannelType = channels[alphaPos]->channelValueType();
48
49 KIS_SAFE_ASSERT_RECOVER (alphaChannelOffset >= 0) {
50 alphaChannelOffset = 0;
51 }
52
53 m_compositeOp.reset(
55 compositeOpId, alphaChannelType, pixelSize, alphaChannelOffset));
56}
const KoID GrayAColorModelID("GRAYA", ki18n("Grayscale/Alpha"))
const KoID Integer8BitsColorDepthID("U8", ki18n("8-bit integer/channel"))
static KisMaskingBrushCompositeOpBase * create(const QString &id, KoChannelInfo::enumChannelValueType channelType, int pixelSize, int alphaOffset)
QScopedPointer< KisMaskingBrushCompositeOpBase > m_compositeOp
void setDefaultBounds(KisDefaultBoundsBaseSP bounds)
const KoColorSpace * colorSpace() const
KisDefaultBoundsBaseSP defaultBounds() const
enumChannelValueType
enum to define the value of the channel
@ UINT8
use this for an unsigned integer 8bits channel
virtual quint32 alphaPos() const =0
virtual quint32 pixelSize() const =0
QList< KoChannelInfo * > channels
QString id() const
Definition KoID.cpp:63
#define KIS_SAFE_ASSERT_RECOVER(cond)
Definition kis_assert.h:126
static KoColorSpaceRegistry * instance()

References KoColorSpace::alphaPos(), KoColorSpace::channels, KisPaintDevice::colorSpace(), KisMaskingBrushCompositeOpFactory::create(), KisPaintDevice::defaultBounds(), GrayAColorModelID, KoID::id(), KoColorSpaceRegistry::instance(), Integer8BitsColorDepthID, KIS_SAFE_ASSERT_RECOVER, m_compositeOp, m_dstDevice, m_maskDevice, m_strokeDevice, KoColorSpace::pixelSize(), KisPaintDevice::setDefaultBounds(), and KoChannelInfo::UINT8.

◆ ~KisMaskingBrushRenderer()

KisMaskingBrushRenderer::~KisMaskingBrushRenderer ( )

Definition at line 58 of file KisMaskingBrushRenderer.cpp.

59{
60}

Member Function Documentation

◆ maskDevice()

KisPaintDeviceSP KisMaskingBrushRenderer::maskDevice ( ) const

Definition at line 67 of file KisMaskingBrushRenderer.cpp.

68{
69 return m_maskDevice;
70}

References m_maskDevice.

◆ strokeDevice()

KisPaintDeviceSP KisMaskingBrushRenderer::strokeDevice ( ) const

Definition at line 62 of file KisMaskingBrushRenderer.cpp.

63{
64 return m_strokeDevice;
65}

References m_strokeDevice.

◆ updateProjection()

void KisMaskingBrushRenderer::updateProjection ( const QRect & rc)

Definition at line 72 of file KisMaskingBrushRenderer.cpp.

73{
74 if (rc.isEmpty()) return;
75
77
80
81 qint32 dstY = rc.y();
82 qint32 rowsRemaining = rc.height();
83
84 while (rowsRemaining > 0) {
85 qint32 dstX = rc.x();
86
87 const qint32 numContiguousDstRows = dstIt->numContiguousRows(dstY);
88 const qint32 numContiguousMaskRows = maskIt->numContiguousRows(dstY);
89
90 const qint32 rows = std::min({rowsRemaining, numContiguousDstRows, numContiguousMaskRows});
91
92 qint32 columnsRemaining = rc.width();
93
94 while (columnsRemaining > 0) {
95
96 const qint32 numContiguousDstColumns = dstIt->numContiguousColumns(dstX);
97 const qint32 numContiguousMaskColumns = maskIt->numContiguousColumns(dstX);
98 const qint32 columns = std::min({columnsRemaining, numContiguousDstColumns, numContiguousMaskColumns});
99
100 const qint32 dstRowStride = dstIt->rowStride(dstX, dstY);
101 const qint32 maskRowStride = maskIt->rowStride(dstX, dstY);
102
103 dstIt->moveTo(dstX, dstY);
104 maskIt->moveTo(dstX, dstY);
105
106 m_compositeOp->composite(maskIt->rawDataConst(), maskRowStride,
107 dstIt->rawData(), dstRowStride,
108 columns, rows);
109
110 dstX += columns;
111 columnsRemaining -= columns;
112 }
113
114 dstY += rows;
115 rowsRemaining -= rows;
116 }
117}
virtual quint8 * rawData()=0
virtual const quint8 * rawDataConst() const =0
KisRandomConstAccessorSP createRandomConstAccessorNG() const
KisRandomAccessorSP createRandomAccessorNG()
static void copyAreaOptimized(const QPoint &dstPt, KisPaintDeviceSP src, KisPaintDeviceSP dst, const QRect &originalSrcRect)
virtual qint32 rowStride(qint32 x, qint32 y) const =0
virtual qint32 numContiguousRows(qint32 y) const =0
virtual void moveTo(qint32 x, qint32 y)=0
virtual qint32 numContiguousColumns(qint32 x) const =0

References KisPainter::copyAreaOptimized(), KisPaintDevice::createRandomAccessorNG(), KisPaintDevice::createRandomConstAccessorNG(), m_compositeOp, m_dstDevice, m_maskDevice, m_strokeDevice, KisRandomConstAccessorNG::moveTo(), KisRandomConstAccessorNG::numContiguousColumns(), KisRandomConstAccessorNG::numContiguousRows(), KisBaseAccessor::rawData(), KisBaseConstAccessor::rawDataConst(), and KisRandomConstAccessorNG::rowStride().

Member Data Documentation

◆ m_compositeOp

QScopedPointer<KisMaskingBrushCompositeOpBase> KisMaskingBrushRenderer::m_compositeOp
private

Definition at line 32 of file KisMaskingBrushRenderer.h.

◆ m_dstDevice

KisPaintDeviceSP KisMaskingBrushRenderer::m_dstDevice
private

Definition at line 30 of file KisMaskingBrushRenderer.h.

◆ m_maskDevice

KisPaintDeviceSP KisMaskingBrushRenderer::m_maskDevice
private

Definition at line 29 of file KisMaskingBrushRenderer.h.

◆ m_strokeDevice

KisPaintDeviceSP KisMaskingBrushRenderer::m_strokeDevice
private

Definition at line 28 of file KisMaskingBrushRenderer.h.


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