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

This class manages a stack of filter effects. More...

#include <KoFilterEffectStack.h>

+ Inheritance diagram for KoFilterEffectStack:

Public Member Functions

void appendFilterEffect (KoFilterEffect *filter)
 
QRectF clipRect () const
 Returns the clipping rectangle used for this filter in bounding box units.
 
QRectF clipRectForBoundingRect (const QRectF &boundingRect) const
 Returns the clipping rectangle for the given bounding rect.
 
bool deref ()
 
QList< KoFilterEffect * > filterEffects () const
 
void insertFilterEffect (int index, KoFilterEffect *filter)
 
bool isEmpty () const
 
 KoFilterEffectStack ()
 Creates an empty filter effect stack.
 
 Private ()
 
bool ref ()
 
void removeFilterEffect (int index)
 
QSet< QString > requiredStandardsInputs () const
 Returns list of required standard inputs.
 
void save (KoXmlWriter &writer, const QString &filterId)
 
void setClipRect (const QRectF &clipRect)
 Sets the clipping rectangle used for this filter in bounding box units.
 
KoFilterEffecttakeFilterEffect (int index)
 
int useCount () const
 Return reference counter.
 
 ~KoFilterEffectStack ()
 Destroys the filter effect stack, deleting all filter effects.
 
 ~Private ()
 

Public Attributes

QRectF clipRect
 
QList< KoFilterEffect * > filterEffects
 
QAtomicInt refCount
 

Private Attributes

Private *const d
 
- Private Attributes inherited from Private
KisCanvas2canvas
 
int displayedFrame
 
int intendedFrame
 

Additional Inherited Members

- Private Member Functions inherited from Private
 Private (KisCanvas2 *c)
 

Detailed Description

This class manages a stack of filter effects.

Definition at line 16 of file KoFilterEffectStack.cpp.

Constructor & Destructor Documentation

◆ ~Private()

KoFilterEffectStack::~Private ( )
inline

Definition at line 24 of file KoFilterEffectStack.cpp.

25 {
26 qDeleteAll(filterEffects);
27 }
QList< KoFilterEffect * > filterEffects

◆ KoFilterEffectStack()

KoFilterEffectStack::KoFilterEffectStack ( )

Creates an empty filter effect stack.

Definition at line 34 of file KoFilterEffectStack.cpp.

◆ ~KoFilterEffectStack()

KoFilterEffectStack::~KoFilterEffectStack ( )

Destroys the filter effect stack, deleting all filter effects.

Definition at line 39 of file KoFilterEffectStack.cpp.

40{
41 delete d;
42}

References d.

Member Function Documentation

◆ appendFilterEffect()

void KoFilterEffectStack::appendFilterEffect ( KoFilterEffect * filter)

Appends a new filter at the end of the filter list.

The filter stack take ownership of the appended filter effect.

Parameters
filterthe new filter to append

Definition at line 60 of file KoFilterEffectStack.cpp.

61{
62 if (filter)
63 d->filterEffects.append(filter);
64}

References d.

◆ clipRect()

QRectF KoFilterEffectStack::clipRect ( ) const

Returns the clipping rectangle used for this filter in bounding box units.

◆ clipRectForBoundingRect()

QRectF KoFilterEffectStack::clipRectForBoundingRect ( const QRectF & boundingRect) const

Returns the clipping rectangle for the given bounding rect.

Definition at line 89 of file KoFilterEffectStack.cpp.

90{
91 qreal x = boundingRect.x() + d->clipRect.x() * boundingRect.width();
92 qreal y = boundingRect.y() + d->clipRect.y() * boundingRect.height();
93 qreal w = d->clipRect.width() * boundingRect.width();
94 qreal h = d->clipRect.height() * boundingRect.height();
95 return QRectF(x, y, w, h);
96}

References d.

◆ deref()

bool KoFilterEffectStack::deref ( )

Decrements the use-value. Returns true if the new value is non-zero, false otherwise.

Definition at line 103 of file KoFilterEffectStack.cpp.

104{
105 return d->refCount.deref();
106}

References d.

◆ filterEffects()

QList< KoFilterEffect * > KoFilterEffectStack::filterEffects ( ) const

The first filter of the list is the first to be applied.

Returns
the list of filter effects applied on the shape when rendering.

◆ insertFilterEffect()

void KoFilterEffectStack::insertFilterEffect ( int index,
KoFilterEffect * filter )

Inserts a new filter at the given position in the filter list.

The filter stack take ownership of the inserted filter effect.

Parameters
indexthe list index to insert the new filter at
filterthe new filter to insert

Definition at line 54 of file KoFilterEffectStack.cpp.

55{
56 if (filter)
57 d->filterEffects.insert(index, filter);
58}

References d.

◆ isEmpty()

bool KoFilterEffectStack::isEmpty ( ) const

Returns if the filter effect stack is empty.

Returns
false if the stack contains filter effects, otherwise true

Definition at line 49 of file KoFilterEffectStack.cpp.

50{
51 return d->filterEffects.isEmpty();
52}

References d.

◆ Private()

KoFilterEffectStack::Private ( )
inline

Definition at line 19 of file KoFilterEffectStack.cpp.

20 : clipRect(-0.1, -0.1, 1.2, 1.2) // initialize as per svg spec
21 {
22 }

◆ ref()

bool KoFilterEffectStack::ref ( )

Increments the use-value. Returns true if the new value is non-zero, false otherwise.

Definition at line 98 of file KoFilterEffectStack.cpp.

99{
100 return d->refCount.ref();
101}

References d.

◆ removeFilterEffect()

void KoFilterEffectStack::removeFilterEffect ( int index)

Removes the filter with the given index from the filter list.

The filter gets deleted after removal from the list.

Parameters
indexthe index of the filter to remove

Definition at line 66 of file KoFilterEffectStack.cpp.

67{
68 KoFilterEffect * filter = takeFilterEffect(index);
69 delete filter;
70}
KoFilterEffect * takeFilterEffect(int index)

References takeFilterEffect().

◆ requiredStandardsInputs()

QSet< QString > KoFilterEffectStack::requiredStandardsInputs ( ) const

Returns list of required standard inputs.

Definition at line 131 of file KoFilterEffectStack.cpp.

132{
133 static QSet<QString> stdInputs = QSet<QString>()
134 << "SourceGraphic"
135 << "SourceAlpha"
136 << "BackgroundImage"
137 << "BackgroundAlpha"
138 << "FillPaint"
139 << "StrokePaint";
140
141 QSet<QString> requiredInputs;
142 if (isEmpty())
143 return requiredInputs;
144
145 if (d->filterEffects.first()->inputs().contains(QString()))
146 requiredInputs.insert("SourceGraphic");
147
148 Q_FOREACH (KoFilterEffect *effect, d->filterEffects) {
149 Q_FOREACH (const QString &input, effect->inputs()) {
150 if (stdInputs.contains(input))
151 requiredInputs.insert(input);
152 }
153 }
154
155 return requiredInputs;
156}
QList< QString > inputs

References d, KoFilterEffect::inputs, and isEmpty().

◆ save()

void KoFilterEffectStack::save ( KoXmlWriter & writer,
const QString & filterId )

Saves filter stack using given xml writer.

Parameters
writerthe xml writer to write data to
idthe filter id to write, used for referencing the filter

Definition at line 113 of file KoFilterEffectStack.cpp.

114{
115 writer.startElement("filter");
116 writer.addAttribute("id", filterId);
117 writer.addAttribute("filterUnits", "objectBoundingBox");
118 writer.addAttribute("primitiveUnits", "objectBoundingBox");
119 writer.addAttribute("x", d->clipRect.x());
120 writer.addAttribute("y", d->clipRect.y());
121 writer.addAttribute("width", d->clipRect.width());
122 writer.addAttribute("height", d->clipRect.height());
123
124 Q_FOREACH (KoFilterEffect *effect, d->filterEffects) {
125 effect->save(writer);
126 }
127
128 writer.endElement();
129}
virtual void save(KoXmlWriter &writer)=0
void startElement(const char *tagName, bool indentInside=true)
void endElement()
void addAttribute(const char *attrName, const QString &value)
Definition KoXmlWriter.h:61

References KoXmlWriter::addAttribute(), d, KoXmlWriter::endElement(), KoFilterEffect::save(), and KoXmlWriter::startElement().

◆ setClipRect()

void KoFilterEffectStack::setClipRect ( const QRectF & clipRect)

Sets the clipping rectangle used for this filter in bounding box units.

Definition at line 79 of file KoFilterEffectStack.cpp.

80{
81 d->clipRect = clipRect;
82}

References clipRect, and d.

◆ takeFilterEffect()

KoFilterEffect * KoFilterEffectStack::takeFilterEffect ( int index)

Take filter effect with given index from the stack and returns it.

Parameters
indexthe index of the filter to take
Returns
the filter effect, of 0 if no filter effect with the given index exists

Definition at line 72 of file KoFilterEffectStack.cpp.

73{
74 if (index >= d->filterEffects.size())
75 return 0;
76 return d->filterEffects.takeAt(index);
77}

References d.

◆ useCount()

int KoFilterEffectStack::useCount ( ) const

Return reference counter.

Definition at line 108 of file KoFilterEffectStack.cpp.

109{
110 return d->refCount;
111}

References d.

Member Data Documentation

◆ clipRect

QRectF KoFilterEffectStack::clipRect

Definition at line 30 of file KoFilterEffectStack.cpp.

◆ d

Private* const KoFilterEffectStack::d
private

Definition at line 112 of file KoFilterEffectStack.h.

◆ filterEffects

QList< KoFilterEffect * > KoFilterEffectStack::filterEffects

Definition at line 29 of file KoFilterEffectStack.cpp.

◆ refCount

QAtomicInt KoFilterEffectStack::refCount

Definition at line 31 of file KoFilterEffectStack.cpp.


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