Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgseffectstack.h 3 : : ---------------- 4 : : begin : December 2014 5 : : copyright : (C) 2014 Nyall Dawson 6 : : email : nyall dot dawson at gmail dot com 7 : : ***************************************************************************/ 8 : : 9 : : /*************************************************************************** 10 : : * * 11 : : * This program is free software; you can redistribute it and/or modify * 12 : : * it under the terms of the GNU General Public License as published by * 13 : : * the Free Software Foundation; either version 2 of the License, or * 14 : : * (at your option) any later version. * 15 : : * * 16 : : ***************************************************************************/ 17 : : #ifndef QGSEFFECTSTACK_H 18 : : #define QGSEFFECTSTACK_H 19 : : 20 : : #include "qgis_core.h" 21 : : #include "qgis_sip.h" 22 : : #include "qgspainteffect.h" 23 : : 24 : : /** 25 : : * \ingroup core 26 : : * \class QgsEffectStack 27 : : * \brief A paint effect which consists of a stack of other chained paint effects 28 : : * 29 : : * Effect stacks can be used to apply multiple paint effects to a QPicture. For 30 : : * instance, an effect stack may blur then apply a drop shadow. 31 : : * 32 : : * The way in which effects apply to a stack is controlled by the effect's drawMode. 33 : : * Effects can either render their results onto the destination paint device, 34 : : * or just modify the source picture which is drawn by subsequent effects in the 35 : : * stack. For instance, a blur effect with a Modifier drawMode will blur the source 36 : : * picture for the following drop shadow effect without actually drawing the blurred 37 : : * picture to the paint device. If the blur effect had a Render drawMode then the 38 : : * blurred picture will be drawn on the paint device, but the following drop shadow 39 : : * effect will be drawn using the original picture, not the blurred version. 40 : : * 41 : : * \since QGIS 2.9 42 : : */ 43 : : 44 : : class CORE_EXPORT QgsEffectStack : public QgsPaintEffect SIP_NODEFAULTCTORS 45 : : { 46 : : 47 : : public: 48 : : 49 : : /** 50 : : * Creates a new QgsEffectStack effect. This method ignores 51 : : * the map parameter, and always returns an empty effect stack. 52 : : * \param map unused encoded properties string map 53 : : * \returns new QgsEffectStack 54 : : */ 55 : : static QgsPaintEffect *create( const QVariantMap &map ) SIP_FACTORY; 56 : : 57 : : /** 58 : : * Constructor for empty QgsEffectStack. 59 : : */ 60 : 128 : QgsEffectStack() = default; 61 : : 62 : : QgsEffectStack( const QgsEffectStack &other ); 63 : : 64 : : /** 65 : : * Move constructor. 66 : : */ 67 : : QgsEffectStack( QgsEffectStack &&other ) SIP_SKIP; 68 : : 69 : : /** 70 : : * Creates a new QgsEffectStack effect from a single initial effect. 71 : : * \param effect initial effect to add to the stack. The effect will 72 : : * be cloned, so ownership is not transferred to the stack. 73 : : * \returns new QgsEffectStack containing initial effect 74 : : */ 75 : : explicit QgsEffectStack( const QgsPaintEffect &effect ); 76 : : 77 : : ~QgsEffectStack() override; 78 : : 79 : 0 : QString type() const override { return QStringLiteral( "effectStack" ); } 80 : : QgsEffectStack *clone() const override SIP_FACTORY; 81 : : bool saveProperties( QDomDocument &doc, QDomElement &element ) const override; 82 : : bool readProperties( const QDomElement &element ) override; 83 : : 84 : : /** 85 : : * Unused for QgsEffectStack, will always return an empty string map 86 : : */ 87 : : QVariantMap properties() const override; 88 : : 89 : : /** 90 : : * Unused for QgsEffectStack, props parameter will be ignored 91 : : */ 92 : : void readProperties( const QVariantMap &props ) override; 93 : : 94 : : /** 95 : : * Appends an effect to the end of the stack. 96 : : * \param effect QgsPaintEffect to append. Ownership of the effect will be 97 : : * transferred to the stack object. 98 : : * \see insertEffect 99 : : */ 100 : : void appendEffect( QgsPaintEffect *effect SIP_TRANSFER ); 101 : : 102 : : /** 103 : : * Inserts an effect at a specified index within the stack. 104 : : * \param index position to insert the effect 105 : : * \param effect QgsPaintEffect to insert. Ownership of the effect will be 106 : : * transferred to the stack object. 107 : : * \see appendEffect 108 : : */ 109 : : bool insertEffect( int index, QgsPaintEffect *effect SIP_TRANSFER ); 110 : : 111 : : /** 112 : : * Replaces the effect at a specified position within the stack. 113 : : * \param index position of effect to replace 114 : : * \param effect QgsPaintEffect to replace with. Ownership of the effect will be 115 : : * transferred to the stack object. 116 : : */ 117 : : bool changeEffect( int index, QgsPaintEffect *effect SIP_TRANSFER ); 118 : : 119 : : /** 120 : : * Removes an effect from the stack and returns a pointer to it. 121 : : * \param index position of effect to take 122 : : */ 123 : : QgsPaintEffect *takeEffect( int index SIP_TRANSFERBACK ); 124 : : 125 : : /** 126 : : * Returns a pointer to the list of effects currently contained by 127 : : * the stack 128 : : * \returns list of QgsPaintEffects within the stack 129 : : */ 130 : : QList< QgsPaintEffect * > *effectList(); 131 : : 132 : : /** 133 : : * Returns count of effects contained by the stack 134 : : * \returns count of effects 135 : : */ 136 : 50 : int count() const { return mEffectList.count(); } 137 : : 138 : : /** 139 : : * Returns a pointer to the effect at a specified index within the stack 140 : : * \param index position of effect to return 141 : : * \returns QgsPaintEffect at specified position 142 : : */ 143 : : QgsPaintEffect *effect( int index ) const; 144 : : 145 : : QgsEffectStack &operator=( const QgsEffectStack &rhs ); 146 : : 147 : : QgsEffectStack &operator=( QgsEffectStack &&other ) SIP_SKIP; 148 : : 149 : : 150 : : protected: 151 : : 152 : : void draw( QgsRenderContext &context ) override; 153 : : 154 : : private: 155 : : 156 : : QList< QgsPaintEffect * > mEffectList; 157 : : 158 : : void clearStack(); 159 : : }; 160 : : 161 : : #endif // QGSEFFECTSTACK_H 162 : :