Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsblureffect.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 QGSBLUREFFECT_H 18 : : #define QGSBLUREFFECT_H 19 : : 20 : : #include "qgis_core.h" 21 : : #include "qgspainteffect.h" 22 : : #include "qgis_sip.h" 23 : : #include <QPainter> 24 : : 25 : : /** 26 : : * \ingroup core 27 : : * \class QgsBlurEffect 28 : : * \brief A paint effect which blurs a source picture, using a number of different blur 29 : : * methods. 30 : : * 31 : : * \since QGIS 2.9 32 : : */ 33 : : 34 : 12 : class CORE_EXPORT QgsBlurEffect : public QgsPaintEffect SIP_NODEFAULTCTORS 35 : : { 36 : : 37 : : public: 38 : : 39 : : //! Available blur methods (algorithms) 40 : : enum BlurMethod 41 : : { 42 : : StackBlur, //!< Stack blur, a fast but low quality blur. Valid blur level values are between 0 - 16. 43 : : GaussianBlur //!< Gaussian blur, a slower but high quality blur. Blur level values are the distance in pixels for the blur operation. 44 : : }; 45 : : 46 : : /** 47 : : * Creates a new QgsBlurEffect effect from a properties string map. 48 : : * \param map encoded properties string map 49 : : * \returns new QgsBlurEffect 50 : : */ 51 : : static QgsPaintEffect *create( const QVariantMap &map ) SIP_FACTORY; 52 : : 53 : : /** 54 : : * Constructor for QgsBlurEffect. 55 : : */ 56 : 10 : QgsBlurEffect() = default; 57 : : 58 : 0 : QString type() const override { return QStringLiteral( "blur" ); } 59 : : QVariantMap properties() const override; 60 : : void readProperties( const QVariantMap &props ) override; 61 : : QgsBlurEffect *clone() const override SIP_FACTORY; 62 : : 63 : : /** 64 : : * Sets blur level (radius) 65 : : * \param level blur level. Depending on the current blurMethod(), this parameter 66 : : * has different effects 67 : : * \see blurLevel 68 : : * \see setBlurUnit 69 : : * \see setBlurMapUnitScale 70 : : * \see setBlurMethod 71 : : */ 72 : 0 : void setBlurLevel( const double level ) { mBlurLevel = level; } 73 : : 74 : : /** 75 : : * Returns the blur level (radius) 76 : : * \returns blur level. Depending on the current blurMethod(), this parameter 77 : : * has different effects 78 : : * \see setBlurLevel 79 : : * \see blurUnit 80 : : * \see blurMapUnitScale 81 : : * \see blurMethod 82 : : */ 83 : : double blurLevel() const { return mBlurLevel; } 84 : : 85 : : /** 86 : : * Sets the units used for the blur level (radius). 87 : : * \param unit units for blur level 88 : : * \see blurUnit 89 : : * \see setBlurLevel 90 : : * \see setBlurMapUnitScale 91 : : * \since QGIS 3.4.9 92 : : */ 93 : 0 : void setBlurUnit( const QgsUnitTypes::RenderUnit unit ) { mBlurUnit = unit; } 94 : : 95 : : /** 96 : : * Returns the units used for the blur level (radius). 97 : : * \returns units for blur level 98 : : * \see setBlurUnit 99 : : * \see blurLevel 100 : : * \see blurMapUnitScale 101 : : * \since QGIS 3.4.9 102 : : */ 103 : : QgsUnitTypes::RenderUnit blurUnit() const { return mBlurUnit; } 104 : : 105 : : /** 106 : : * Sets the map unit scale used for the blur strength (radius). 107 : : * \param scale map unit scale for blur strength 108 : : * \see blurMapUnitScale 109 : : * \see setBlurLevel 110 : : * \see setBlurUnit 111 : : * \since QGIS 3.4.9 112 : : */ 113 : : void setBlurMapUnitScale( const QgsMapUnitScale &scale ) { mBlurMapUnitScale = scale; } 114 : : 115 : : /** 116 : : * Returns the map unit scale used for the blur strength (radius). 117 : : * \returns map unit scale for blur strength 118 : : * \see setBlurMapUnitScale 119 : : * \see blurLevel 120 : : * \see blurUnit 121 : : * \since QGIS 3.4.9 122 : : */ 123 : : const QgsMapUnitScale &blurMapUnitScale() const { return mBlurMapUnitScale; } 124 : : 125 : : /** 126 : : * Sets the blur method (algorithm) to use for performing the blur. 127 : : * \param method blur method 128 : : * \see blurMethod 129 : : */ 130 : 0 : void setBlurMethod( const BlurMethod method ) { mBlurMethod = method; } 131 : : 132 : : /** 133 : : * Returns the blur method (algorithm) used for performing the blur. 134 : : * \returns blur method 135 : : * \see setBlurMethod 136 : : */ 137 : : BlurMethod blurMethod() const { return mBlurMethod; } 138 : : 139 : : /** 140 : : * Sets the \a opacity for the effect. 141 : : * \param opacity double between 0 and 1 inclusive, where 0 is fully transparent 142 : : * and 1 is fully opaque 143 : : * \see opacity() 144 : : */ 145 : : void setOpacity( const double opacity ) { mOpacity = opacity; } 146 : : 147 : : /** 148 : : * Returns the opacity for the effect. 149 : : * \returns opacity value between 0 and 1 inclusive, where 0 is fully transparent 150 : : * and 1 is fully opaque 151 : : * \see setOpacity() 152 : : */ 153 : : double opacity() const { return mOpacity; } 154 : : 155 : : /** 156 : : * Sets the blend mode for the effect 157 : : * \param mode blend mode used for drawing the effect on to a destination 158 : : * paint device 159 : : * \see blendMode 160 : : */ 161 : : void setBlendMode( const QPainter::CompositionMode mode ) { mBlendMode = mode; } 162 : : 163 : : /** 164 : : * Returns the blend mode for the effect 165 : : * \returns blend mode used for drawing the effect on to a destination 166 : : * paint device 167 : : * \see setBlendMode 168 : : */ 169 : : QPainter::CompositionMode blendMode() const { return mBlendMode; } 170 : : 171 : : protected: 172 : : 173 : : void draw( QgsRenderContext &context ) override; 174 : : QRectF boundingRect( const QRectF &rect, const QgsRenderContext &context ) const override; 175 : : 176 : : private: 177 : : 178 : 10 : double mBlurLevel = 2.645; 179 : 10 : QgsUnitTypes::RenderUnit mBlurUnit = QgsUnitTypes::RenderMillimeters; 180 : : QgsMapUnitScale mBlurMapUnitScale; 181 : 10 : BlurMethod mBlurMethod = StackBlur; 182 : 10 : double mOpacity = 1.0; 183 : 10 : QPainter::CompositionMode mBlendMode = QPainter::CompositionMode_SourceOver; 184 : : 185 : : void drawStackBlur( QgsRenderContext &context ); 186 : : void drawGaussianBlur( QgsRenderContext &context ); 187 : : void drawBlurredImage( QgsRenderContext &context, QImage &image ); 188 : : }; 189 : : 190 : : #endif // QGSBLUREFFECT_H 191 : :