28   for ( 
int i = 0; i < other.
count(); ++i )
 
   37   std::swap( mEffectList, other.mEffectList );
 
   57   for ( 
int i = 0; i < rhs.
count(); ++i )
 
   67   std::swap( mEffectList, other.mEffectList );
 
   81   QPainter *destPainter = context.
painter();
 
   86   QPicture *sourcePic = 
new QPicture( *
source() );
 
   87   QPicture *currentPic = sourcePic;
 
   88   QList< QPicture * > results;
 
   89   for ( 
int i = mEffectList.count() - 1; i >= 0; --i )
 
   97     QPicture *pic = 
nullptr;
 
   98     if ( 
effect->
type() == QLatin1String( 
"drawSource" ) )
 
  108     QPicture *resultPic = 
new QPicture();
 
  109     QPainter p( resultPic );
 
  118     results << resultPic;
 
  121       currentPic = resultPic;
 
  129   for ( 
int i = 0; i < mEffectList.count(); ++i )
 
  131     if ( !mEffectList[i]->
enabled() )
 
  136     QPicture *pic = results.takeLast();
 
  141       context.
painter()->drawPicture( 0, 0, *pic );
 
  155   if ( element.isNull() )
 
  160   QDomElement effectElement = doc.createElement( QStringLiteral( 
"effect" ) );
 
  161   effectElement.setAttribute( QStringLiteral( 
"type" ), 
type() );
 
  162   effectElement.setAttribute( QStringLiteral( 
"enabled" ), 
mEnabled );
 
  171   element.appendChild( effectElement );
 
  177   if ( element.isNull() )
 
  182   mEnabled = ( element.attribute( QStringLiteral( 
"enabled" ), QStringLiteral( 
"0" ) ) != QLatin1String( 
"0" ) );
 
  187   const QDomNodeList childNodes = element.childNodes();
 
  188   for ( 
int i = 0; i < childNodes.size(); ++i )
 
  190     const QDomElement childElement = childNodes.at( i ).toElement();
 
  209 void QgsEffectStack::clearStack()
 
  211   qDeleteAll( mEffectList );
 
  217   mEffectList.append( 
effect );
 
  222   if ( index < 0 || index > mEffectList.count() )
 
  227   mEffectList.insert( index, 
effect );
 
  233   if ( index < 0 || index >= mEffectList.count() )
 
  238   delete mEffectList.at( index );
 
  239   mEffectList[index] = 
effect;
 
  245   if ( index < 0 || index >= mEffectList.count() )
 
  248   return mEffectList.takeAt( index );
 
  258   if ( index >= 0 && index < mEffectList.count() )
 
  260     return mEffectList.at( index );
 
static QgsPaintEffectRegistry * paintEffectRegistry()
Returns the application's paint effect registry, used for managing paint effects.
A paint effect which consists of a stack of other chained paint effects.
void appendEffect(QgsPaintEffect *effect)
Appends an effect to the end of the stack.
QgsEffectStack()=default
Constructor for empty QgsEffectStack.
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.
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.
Base class for visual effects which can be applied to QPicture drawings.
bool requiresQPainterDpiFix
virtual bool saveProperties(QDomDocument &doc, QDomElement &element) const
Saves the current state of the effect to a DOM element.
virtual void readProperties(const QVariantMap &props)=0
Reads a string map of an effect's properties and restores the effect to the state described by the pr...
const QPicture * source() const
Returns the source QPicture.
virtual QgsPaintEffect * clone() const =0
Duplicates an effect by creating a deep copy of the effect.
virtual void render(QPicture &picture, QgsRenderContext &context)
Renders a picture using the effect.
bool enabled() const
Returns whether the effect is enabled.
void fixQPictureDpi(QPainter *painter) const
Applies a workaround to a QPainter to avoid an issue with incorrect scaling when drawing QPictures.
@ 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.
virtual QString type() const =0
Returns the effect type.
Contains information about the context of a rendering operation.
QPainter * painter()
Returns the destination QPainter for the render operation.
void setPainter(QPainter *p)
Sets the destination QPainter for the render operation.
Scoped object for saving and restoring a QPainter object's state.