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

#include <KoClipMaskPainter.h>

+ Inheritance diagram for KoClipMaskPainter:

Public Member Functions

 KoClipMaskPainter (QPainter *painter, const QRectF &globalClipRect)
 
QPainter * maskPainter ()
 
void renderOnGlobalPainter ()
 
QPainter * shapePainter ()
 
 ~KoClipMaskPainter ()
 
- Public Member Functions inherited from Private
 Private (KisCanvas2 *c)
 

Public Attributes

QRect alignedGlobalClipRect
 
QPainter * globalPainter
 
QImage maskImage
 
QPainter maskPainter
 
QImage shapeImage
 
QPainter shapePainter
 
- Public Attributes inherited from Private
KisCanvas2canvas
 
int displayedFrame
 
int intendedFrame
 

Private Attributes

const QScopedPointer< Privatem_d
 

Detailed Description

Definition at line 28 of file KoClipMaskPainter.cpp.

Constructor & Destructor Documentation

◆ KoClipMaskPainter()

KoClipMaskPainter::KoClipMaskPainter ( QPainter * painter,
const QRectF & globalClipRect )

Definition at line 41 of file KoClipMaskPainter.cpp.

42 : m_d(new Private)
43{
44 m_d->globalPainter = painter;
45 m_d->alignedGlobalClipRect = globalClipRect.toAlignedRect();
46
47 if (!m_d->alignedGlobalClipRect.isValid()) {
48 m_d->alignedGlobalClipRect = QRect();
49 }
50 m_d->shapeImage = QImage(m_d->alignedGlobalClipRect.size(), QImage::Format_ARGB32);
51 m_d->maskImage = QImage(m_d->alignedGlobalClipRect.size(), QImage::Format_ARGB32);
52
53 QTransform moveToBufferTransform =
54 QTransform::fromTranslate(-m_d->alignedGlobalClipRect.x(),
55 -m_d->alignedGlobalClipRect.y());
56
57 m_d->shapePainter.begin(&m_d->shapeImage);
58
59 m_d->shapePainter.save();
60 m_d->shapePainter.setCompositionMode(QPainter::CompositionMode_Source);
61 m_d->shapePainter.fillRect(QRect(QPoint(), m_d->alignedGlobalClipRect.size()), Qt::transparent);
62 m_d->shapePainter.restore();
63
64 m_d->shapePainter.setTransform(moveToBufferTransform);
65 m_d->shapePainter.setTransform(painter->transform(), true);
66 if (painter->hasClipping()) {
67 m_d->shapePainter.setClipPath(painter->clipPath());
68 }
69 m_d->shapePainter.setOpacity(painter->opacity());
70 m_d->shapePainter.setBrush(painter->brush());
71 m_d->shapePainter.setPen(painter->pen());
72
73 m_d->maskPainter.begin(&m_d->maskImage);
74
75 m_d->maskPainter.save();
76 m_d->maskPainter.setCompositionMode(QPainter::CompositionMode_Source);
77 m_d->maskPainter.fillRect(QRect(QPoint(), m_d->alignedGlobalClipRect.size()), Qt::transparent);
78 m_d->maskPainter.restore();
79
80 m_d->maskPainter.setTransform(moveToBufferTransform);
81 m_d->maskPainter.setTransform(painter->transform(), true);
82 if (painter->hasClipping()) {
83 m_d->maskPainter.setClipPath(painter->clipPath());
84 }
85 m_d->maskPainter.setOpacity(painter->opacity());
86 m_d->maskPainter.setBrush(painter->brush());
87 m_d->maskPainter.setPen(painter->pen());
88
89
90
91}
const QScopedPointer< Private > m_d

References m_d.

◆ ~KoClipMaskPainter()

KoClipMaskPainter::~KoClipMaskPainter ( )

Definition at line 93 of file KoClipMaskPainter.cpp.

94{
95}

Member Function Documentation

◆ maskPainter()

QPainter * KoClipMaskPainter::maskPainter ( )

◆ renderOnGlobalPainter()

void KoClipMaskPainter::renderOnGlobalPainter ( )

Definition at line 107 of file KoClipMaskPainter.cpp.

108{
109 KIS_ASSERT_RECOVER_RETURN(m_d->maskImage.size() == m_d->shapeImage.size());
110
111 const int nPixels = m_d->maskImage.height() * m_d->maskImage.width();
112
114 applicator->applyLuminanceMask(m_d->shapeImage.bits(),
115 m_d->maskImage.bits(),
116 nPixels);
117
118 KIS_ASSERT_RECOVER_RETURN(m_d->shapeImage.size() == m_d->alignedGlobalClipRect.size());
119 QPainterPath globalClipPath;
120
121 if (m_d->globalPainter->hasClipping()) {
122 globalClipPath = m_d->globalPainter->transform().map(m_d->globalPainter->clipPath());
123 }
124
125 m_d->globalPainter->save();
126
127 m_d->globalPainter->setTransform(QTransform());
128
129 if (!globalClipPath.isEmpty()) {
130 m_d->globalPainter->setClipPath(globalClipPath);
131 }
132
133 m_d->globalPainter->drawImage(m_d->alignedGlobalClipRect.topLeft(), m_d->shapeImage);
134 m_d->globalPainter->restore();
135}
#define KIS_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:75
virtual void applyLuminanceMask(quint8 *pixels, quint8 *maskPixels, const int nPixels) const =0
applyLuminanceMask This applies an ARGB32 mask to an ARGB32 image as per w3c specs....
static KoClipMaskApplicatorBase * createApplicator()

References KoClipMaskApplicatorBase::applyLuminanceMask(), KoClipMaskApplicatorFactory::createApplicator(), KIS_ASSERT_RECOVER_RETURN, and m_d.

◆ shapePainter()

QPainter * KoClipMaskPainter::shapePainter ( )

Member Data Documentation

◆ alignedGlobalClipRect

QRect KoClipMaskPainter::alignedGlobalClipRect

Definition at line 38 of file KoClipMaskPainter.cpp.

◆ globalPainter

QPainter* KoClipMaskPainter::globalPainter

Definition at line 30 of file KoClipMaskPainter.cpp.

◆ m_d

const QScopedPointer<Private> KoClipMaskPainter::m_d
private

Definition at line 32 of file KoClipMaskPainter.h.

◆ maskImage

QImage KoClipMaskPainter::maskImage

Definition at line 33 of file KoClipMaskPainter.cpp.

◆ maskPainter

QPainter * KoClipMaskPainter::maskPainter

Definition at line 36 of file KoClipMaskPainter.cpp.

◆ shapeImage

QImage KoClipMaskPainter::shapeImage

Definition at line 32 of file KoClipMaskPainter.cpp.

◆ shapePainter

QPainter * KoClipMaskPainter::shapePainter

Definition at line 35 of file KoClipMaskPainter.cpp.


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