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

#include <KoClipMask.h>

+ Inheritance diagram for KoClipMask:

Public Member Functions

KoClipMaskclone () const
 
KoFlake::CoordinateSystem contentCoordinates () const
 
KoFlake::CoordinateSystem coordinates () const
 
void drawMask (QPainter *painter, KoShape *shape)
 
bool isEmpty () const
 
 KoClipMask ()
 
 KoClipMask (const KoClipMask &)
 
QRectF maskRect () const
 
KoClipMaskoperator= (const KoClipMask &)
 
 Private ()
 
 Private (const Private &rhs)
 
void setContentCoordinates (KoFlake::CoordinateSystem value)
 
void setCoordinates (KoFlake::CoordinateSystem value)
 
void setExtraShapeOffset (const QPointF &value)
 
void setMaskRect (const QRectF &value)
 
void setShapes (const QList< KoShape * > &value)
 
QList< KoShape * > shapes () const
 
 ~KoClipMask ()
 
 ~Private ()
 

Public Attributes

KoFlake::CoordinateSystem contentCoordinates = KoFlake::UserSpaceOnUse
 
KoFlake::CoordinateSystem coordinates = KoFlake::ObjectBoundingBox
 
QTransform extraShapeTransform
 
QRectF maskRect = QRectF(-0.1, -0.1, 1.2, 1.2)
 
QList< KoShape * > shapes
 

Private Attributes

QSharedDataPointer< Privatem_d
 

Detailed Description

Definition at line 19 of file KoClipMask.cpp.

Constructor & Destructor Documentation

◆ ~Private()

KoClipMask::~Private ( )
inline

Definition at line 40 of file KoClipMask.cpp.

40 {
41 qDeleteAll(shapes);
42 shapes.clear();
43 }
QList< KoShape * > shapes

◆ KoClipMask() [1/2]

KoClipMask::KoClipMask ( )

Definition at line 56 of file KoClipMask.cpp.

57 : m_d(new Private)
58{
59}
QSharedDataPointer< Private > m_d
Definition KoClipMask.h:55

◆ ~KoClipMask()

KoClipMask::~KoClipMask ( )

Definition at line 61 of file KoClipMask.cpp.

62{
63}

◆ KoClipMask() [2/2]

KoClipMask::KoClipMask ( const KoClipMask & rhs)

Definition at line 65 of file KoClipMask.cpp.

66 : m_d(new Private(*rhs.m_d))
67{
68}

Member Function Documentation

◆ clone()

KoClipMask * KoClipMask::clone ( ) const

Definition at line 76 of file KoClipMask.cpp.

77{
78 return new KoClipMask(*this);
79}

References KoClipMask().

◆ contentCoordinates()

KoFlake::CoordinateSystem KoClipMask::contentCoordinates ( ) const

◆ coordinates()

KoFlake::CoordinateSystem KoClipMask::coordinates ( ) const

◆ drawMask()

void KoClipMask::drawMask ( QPainter * painter,
KoShape * shape )

Definition at line 146 of file KoClipMask.cpp.

147{
148 painter->save();
149
150 QPainterPath clipPathInShapeSpace;
151
152 if (m_d->coordinates == KoFlake::ObjectBoundingBox) {
153 QTransform relativeToShape = KisAlgebra2D::mapToRect(shape->outlineRect());
154 clipPathInShapeSpace.addPolygon(relativeToShape.map(m_d->maskRect));
155 } else {
156 clipPathInShapeSpace.addRect(m_d->maskRect);
157 clipPathInShapeSpace = m_d->extraShapeTransform.map(clipPathInShapeSpace);
158 }
159
160 painter->setClipPath(clipPathInShapeSpace, Qt::IntersectClip);
161
162 if (m_d->contentCoordinates == KoFlake::ObjectBoundingBox) {
163 QTransform relativeToShape = KisAlgebra2D::mapToRect(shape->outlineRect());
164
165 painter->setTransform(relativeToShape, true);
166 } else {
167 painter->setTransform(m_d->extraShapeTransform, true);
168 }
169
171 p.setShapes(m_d->shapes);
172 p.paint(*painter);
173
174 painter->restore();
175}
const Params2D p
void setShapes(const QList< KoShape * > &shapes)
virtual QRectF outlineRect() const
Definition KoShape.cpp:637
QTransform mapToRect(const QRectF &rect)

References m_d, KisAlgebra2D::mapToRect(), KoFlake::ObjectBoundingBox, KoShape::outlineRect(), p, and KoShapePainter::setShapes().

◆ isEmpty()

bool KoClipMask::isEmpty ( ) const

Definition at line 121 of file KoClipMask.cpp.

122{
123 return m_d->shapes.isEmpty();
124}

References m_d.

◆ maskRect()

QRectF KoClipMask::maskRect ( ) const

◆ operator=()

KoClipMask & KoClipMask::operator= ( const KoClipMask & rhs)

Definition at line 70 of file KoClipMask.cpp.

71{
72 m_d = rhs.m_d;
73 return *this;
74}

References m_d.

◆ Private() [1/2]

KoClipMask::Private ( )
inline

Definition at line 21 of file KoClipMask.cpp.

22 : QSharedData()
23 {}

◆ Private() [2/2]

KoClipMask::Private ( const Private & rhs)
inline

Definition at line 25 of file KoClipMask.cpp.

26 : QSharedData()
27 , coordinates(rhs.coordinates)
28 , contentCoordinates(rhs.contentCoordinates)
29 , maskRect(rhs.maskRect)
30 , extraShapeTransform(rhs.extraShapeTransform)
31 {
32 Q_FOREACH (KoShape *shape, rhs.shapes) {
33 KoShape *clonedShape = shape->cloneShape();
34 KIS_ASSERT_RECOVER(clonedShape) { continue; }
35
36 shapes << clonedShape;
37 }
38 }
virtual KoShape * cloneShape() const
creates a deep copy of the shape or shape's subtree
Definition KoShape.cpp:200
#define KIS_ASSERT_RECOVER(cond)
Definition kis_assert.h:55
QTransform extraShapeTransform
KoFlake::CoordinateSystem coordinates
KoFlake::CoordinateSystem contentCoordinates
QRectF maskRect

References KoShape::cloneShape(), and KIS_ASSERT_RECOVER.

◆ setContentCoordinates()

void KoClipMask::setContentCoordinates ( KoFlake::CoordinateSystem value)

Definition at line 96 of file KoClipMask.cpp.

97{
98 m_d->contentCoordinates = value;
99}
float value(const T *src, size_t ch)

References m_d, and value().

◆ setCoordinates()

void KoClipMask::setCoordinates ( KoFlake::CoordinateSystem value)

Definition at line 86 of file KoClipMask.cpp.

87{
88 m_d->coordinates = value;
89}

References m_d, and value().

◆ setExtraShapeOffset()

void KoClipMask::setExtraShapeOffset ( const QPointF & value)

TODO: when we implement source shapes sharing, please wrap the shapes into a group and apply this transform to the group instead

Definition at line 126 of file KoClipMask.cpp.

127{
133 if (m_d->contentCoordinates == KoFlake::UserSpaceOnUse) {
134 const QTransform t = QTransform::fromTranslate(value.x(), value.y());
135
136 Q_FOREACH (KoShape *shape, m_d->shapes) {
138 }
139 }
140
141 if (m_d->coordinates == KoFlake::UserSpaceOnUse) {
142 m_d->maskRect.translate(value);
143 }
144}
void applyAbsoluteTransformation(const QTransform &matrix)
Definition KoShape.cpp:400

References KoShape::applyAbsoluteTransformation(), m_d, KoFlake::UserSpaceOnUse, and value().

◆ setMaskRect()

void KoClipMask::setMaskRect ( const QRectF & value)

Definition at line 106 of file KoClipMask.cpp.

107{
108 m_d->maskRect = value;
109}

References m_d, and value().

◆ setShapes()

void KoClipMask::setShapes ( const QList< KoShape * > & value)

Definition at line 116 of file KoClipMask.cpp.

117{
118 m_d->shapes = value;
119}

References m_d, and value().

◆ shapes()

QList< KoShape * > KoClipMask::shapes ( ) const

Member Data Documentation

◆ contentCoordinates

KoFlake::CoordinateSystem KoClipMask::contentCoordinates = KoFlake::UserSpaceOnUse

Definition at line 47 of file KoClipMask.cpp.

◆ coordinates

Definition at line 46 of file KoClipMask.cpp.

◆ extraShapeTransform

QTransform KoClipMask::extraShapeTransform

Definition at line 52 of file KoClipMask.cpp.

◆ m_d

QSharedDataPointer<Private> KoClipMask::m_d
private

Definition at line 55 of file KoClipMask.h.

◆ maskRect

QRectF KoClipMask::maskRect = QRectF(-0.1, -0.1, 1.2, 1.2)

Definition at line 49 of file KoClipMask.cpp.

◆ shapes

QList< KoShape * > KoClipMask::shapes

Definition at line 51 of file KoClipMask.cpp.


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