31 for (
int i = 0; i < other.
count(); ++i )
40 std::swap( mEffectList, other.mEffectList );
73 for (
int i = 0; i < rhs.
count(); ++i )
86 std::swap( mEffectList, other.mEffectList );
94 effect->readProperties( map );
100 QPainter *destPainter = context.
painter();
105 bool requiresRasterization =
false;
110 requiresRasterization =
true;
115 if ( requiresRasterization )
126 const QPicture sourcePic =
source();
127 const QPicture *currentPic = &sourcePic;
128 std::vector< QPicture > results;
129 results.reserve( mEffectList.count() );
130 for (
int i = mEffectList.count() - 1; i >= 0; --i )
138 const QPicture *pic =
nullptr;
139 if (
effect->type() == QLatin1String(
"drawSource" ) )
150 QPainter p( &resultPic );
154 effect->requiresQPainterDpiFix =
false;
155 effect->render( *pic, context );
156 effect->requiresQPainterDpiFix =
true;
159 results.emplace_back( std::move( resultPic ) );
162 currentPic = &results.back();
168 for (
int i = 0; i < mEffectList.count(); ++i )
170 if ( !mEffectList[i]->
enabled() )
191 if ( element.isNull() )
196 QDomElement effectElement = doc.createElement( QStringLiteral(
"effect" ) );
197 effectElement.setAttribute( QStringLiteral(
"type" ),
type() );
198 effectElement.setAttribute( QStringLiteral(
"enabled" ),
mEnabled );
204 ok = ok &&
effect->saveProperties( doc, effectElement );
207 element.appendChild( effectElement );
213 if ( element.isNull() )
218 mEnabled = ( element.attribute( QStringLiteral(
"enabled" ), QStringLiteral(
"0" ) ) != QLatin1String(
"0" ) );
223 const QDomNodeList childNodes = element.childNodes();
224 for (
int i = 0; i < childNodes.size(); ++i )
226 const QDomElement childElement = childNodes.at( i ).toElement();
245void QgsEffectStack::clearStack()
247 qDeleteAll( mEffectList );
253 mEffectList.append(
effect );
258 if ( index < 0 || index > mEffectList.count() )
263 mEffectList.insert( index,
effect );
269 if ( index < 0 || index >= mEffectList.count() )
274 delete mEffectList.at( index );
275 mEffectList[index] =
effect;
281 if ( index < 0 || index >= mEffectList.count() )
284 return mEffectList.takeAt( index );
294 if ( index >= 0 && index < mEffectList.count() )
296 return mEffectList.at( index );
@ ForceVector
Always force vector-based rendering, even when the result will be visually different to a raster-base...
@ RequiresRasterization
The effect requires raster-based rendering.
QFlags< PaintEffectFlag > PaintEffectFlags
Flags which control how paint effects behave.
static QgsPaintEffectRegistry * paintEffectRegistry()
Returns the application's paint effect registry, used for managing paint effects.
void appendEffect(QgsPaintEffect *effect)
Appends an effect to the end of the stack.
bool saveProperties(QDomDocument &doc, QDomElement &element) const override
Saves the current state of the effect to a DOM element.
void draw(QgsRenderContext &context) override
Handles drawing of the effect's result on to the specified render context.
QgsEffectStack & operator=(const QgsEffectStack &rhs)
QString type() const override
Returns the effect type.
Qgis::PaintEffectFlags flags() const override
Returns flags which specify how the paint effect behaves.
static QgsPaintEffect * create(const QVariantMap &map)
Creates a new QgsEffectStack effect.
bool readProperties(const QDomElement &element) override
Restores the effect to the state described by a DOM element.
~QgsEffectStack() override
QList< QgsPaintEffect * > * effectList()
Returns a pointer to the list of effects currently contained by the stack.
QVariantMap properties() const override
Unused for QgsEffectStack, will always return an empty string map.
int count() const
Returns count of effects contained by the stack.
QgsEffectStack * clone() const override
Duplicates an effect by creating a deep copy of the effect.
bool insertEffect(int index, QgsPaintEffect *effect)
Inserts an effect at a specified index within the stack.
QgsPaintEffect * takeEffect(int index)
Removes an effect from the stack and returns a pointer to it.
bool changeEffect(int index, QgsPaintEffect *effect)
Replaces the effect at a specified position within the stack.
QgsPaintEffect * effect(int index) const
Returns a pointer to the effect at a specified index within the stack.
QgsPaintEffect * createEffect(const QString &name, const QVariantMap &properties=QVariantMap()) const
Creates a new paint effect given the effect name and properties map.
void drawSource(QPainter &painter)
Draws the source QPicture onto the specified painter.
const QPicture & source() const
Returns the source QPicture.
bool enabled() const
Returns whether the effect is enabled.
virtual QgsPaintEffect * clone() const =0
Duplicates an effect by creating a deep copy of the effect.
@ Render
The result of the effect is rendered on the destination, but does not affect subsequent effects in th...
@ Modifier
The result of the effect is not rendered, but is passed on to following effects in the stack.
static void drawPicture(QPainter *painter, const QPointF &point, const QPicture &picture)
Draws a picture onto a painter, correctly applying workarounds to avoid issues with incorrect scaling...
Contains information about the context of a rendering operation.
QPainter * painter()
Returns the destination QPainter for the render operation.
Qgis::RasterizedRenderingPolicy rasterizedRenderingPolicy() const
Returns the policy controlling when rasterisation of content during renders is permitted.
void setPainter(QPainter *p)
Sets the destination QPainter for the render operation.