Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsgloweffect.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 QGSGLOWEFFECT_H 18 : : #define QGSGLOWEFFECT_H 19 : : 20 : : #include "qgis_core.h" 21 : : #include "qgis.h" 22 : : #include "qgspainteffect.h" 23 : : #include "qgssymbol.h" 24 : : #include "qgscolorramp.h" 25 : : 26 : : #include <QPainter> 27 : : 28 : : 29 : : /** 30 : : * \ingroup core 31 : : * \class QgsGlowEffect 32 : : * \brief Base class for paint effect which draw a glow inside or outside a 33 : : * picture. 34 : : * 35 : : * \since QGIS 2.9 36 : : */ 37 : : 38 : : class CORE_EXPORT QgsGlowEffect : public QgsPaintEffect 39 : : { 40 : : 41 : : public: 42 : : 43 : : //! Color sources for the glow 44 : : enum GlowColorType 45 : : { 46 : : SingleColor, //!< Use a single color and fade the color to totally transparent 47 : : ColorRamp //!< Use colors from a color ramp 48 : : }; 49 : : 50 : : QgsGlowEffect(); 51 : : QgsGlowEffect( const QgsGlowEffect &other ); 52 : : ~QgsGlowEffect() override; 53 : : 54 : : QVariantMap properties() const override; 55 : : void readProperties( const QVariantMap &props ) override; 56 : : 57 : : /** 58 : : * Sets the spread distance for drawing the glow effect. 59 : : * \param spread spread distance. Units are specified via setSpreadUnit() 60 : : * \see spread 61 : : * \see setSpreadUnit 62 : : * \see setSpreadMapUnitScale 63 : : */ 64 : 0 : void setSpread( const double spread ) { mSpread = spread; } 65 : : 66 : : /** 67 : : * Returns the spread distance used for drawing the glow effect. 68 : : * \returns spread distance. Units are retrieved via spreadUnit() 69 : : * \see setSpread 70 : : * \see spreadUnit 71 : : * \see spreadMapUnitScale 72 : : */ 73 : 0 : double spread() const { return mSpread; } 74 : : 75 : : /** 76 : : * Sets the units used for the glow spread distance. 77 : : * \param unit units for spread distance 78 : : * \see spreadUnit 79 : : * \see setSpread 80 : : * \see setSpreadMapUnitScale 81 : : */ 82 : 0 : void setSpreadUnit( const QgsUnitTypes::RenderUnit unit ) { mSpreadUnit = unit; } 83 : : 84 : : /** 85 : : * Returns the units used for the glow spread distance. 86 : : * \returns units for spread distance 87 : : * \see setSpreadUnit 88 : : * \see spread 89 : : * \see spreadMapUnitScale 90 : : */ 91 : 0 : QgsUnitTypes::RenderUnit spreadUnit() const { return mSpreadUnit; } 92 : : 93 : : /** 94 : : * Sets the map unit scale used for the spread distance. 95 : : * \param scale map unit scale for spread distance 96 : : * \see spreadMapUnitScale 97 : : * \see setSpread 98 : : * \see setSpreadUnit 99 : : */ 100 : : void setSpreadMapUnitScale( const QgsMapUnitScale &scale ) { mSpreadMapUnitScale = scale; } 101 : : 102 : : /** 103 : : * Returns the map unit scale used for the spread distance. 104 : : * \returns map unit scale for spread distance 105 : : * \see setSpreadMapUnitScale 106 : : * \see spread 107 : : * \see spreadUnit 108 : : */ 109 : 0 : const QgsMapUnitScale &spreadMapUnitScale() const { return mSpreadMapUnitScale; } 110 : : 111 : : /** 112 : : * Sets blur level (radius) for the glow. This can be used to smooth the 113 : : * output from the glow effect. 114 : : * \param level blur level. 115 : : * \see blurLevel 116 : : * \see setBlurUnit 117 : : * \see setBlurMapUnitScale 118 : : */ 119 : 0 : void setBlurLevel( const double level ) { mBlurLevel = level; } 120 : : 121 : : /** 122 : : * Returns the blur level (radius) for the glow. 123 : : * \returns blur level. 124 : : * \see setBlurLevel 125 : : * \see blurUnit 126 : : * \see blurMapUnitScale 127 : : */ 128 : 0 : double blurLevel() const { return mBlurLevel; } 129 : : 130 : : /** 131 : : * Sets the units used for the glow blur level (radius). 132 : : * \param unit units for blur level 133 : : * \see blurUnit 134 : : * \see setBlurLevel 135 : : * \see setBlurMapUnitScale 136 : : * \since QGIS 3.4.9 137 : : */ 138 : : void setBlurUnit( const QgsUnitTypes::RenderUnit unit ) { mBlurUnit = unit; } 139 : : 140 : : /** 141 : : * Returns the units used for the glow blur level (radius). 142 : : * \returns units for blur level 143 : : * \see setBlurUnit 144 : : * \see blurLevel 145 : : * \see blurMapUnitScale 146 : : * \since QGIS 3.4.9 147 : : */ 148 : : QgsUnitTypes::RenderUnit blurUnit() const { return mBlurUnit; } 149 : : 150 : : /** 151 : : * Sets the map unit scale used for the glow blur strength (radius). 152 : : * \param scale map unit scale for blur strength 153 : : * \see blurMapUnitScale 154 : : * \see setBlurLevel 155 : : * \see setBlurUnit 156 : : * \since QGIS 3.4.9 157 : : */ 158 : : void setBlurMapUnitScale( const QgsMapUnitScale &scale ) { mBlurMapUnitScale = scale; } 159 : : 160 : : /** 161 : : * Returns the map unit scale used for the glow blur strength (radius). 162 : : * \returns map unit scale for blur strength 163 : : * \see setBlurMapUnitScale 164 : : * \see blurLevel 165 : : * \see blurUnit 166 : : * \since QGIS 3.4.9 167 : : */ 168 : : const QgsMapUnitScale &blurMapUnitScale() const { return mBlurMapUnitScale; } 169 : : 170 : : /** 171 : : * Sets the \a opacity for the effect. 172 : : * \param opacity double between 0 and 1 inclusive, where 0 is fully transparent 173 : : * and 1 is fully opaque 174 : : * \see opacity() 175 : : */ 176 : : void setOpacity( const double opacity ) { mOpacity = opacity; } 177 : : 178 : : /** 179 : : * Returns the opacity for the effect. 180 : : * \returns opacity value between 0 and 1 inclusive, where 0 is fully transparent 181 : : * and 1 is fully opaque 182 : : * \see setOpacity(). 183 : : */ 184 : 0 : double opacity() const { return mOpacity; } 185 : : 186 : : /** 187 : : * Sets the color for the glow. This only applies if the colorType() 188 : : * is set to SingleColor. The glow will fade between the specified color and 189 : : * a totally transparent version of the color. 190 : : * \param color glow color 191 : : * \see color 192 : : * \see setColorType 193 : : */ 194 : 0 : void setColor( const QColor &color ) { mColor = color; } 195 : : 196 : : /** 197 : : * Returns the color for the glow. This only applies if the colorType() 198 : : * is set to SingleColor. The glow will fade between the specified color and 199 : : * a totally transparent version of the color. 200 : : * \returns glow color 201 : : * \see setColor 202 : : * \see colorType 203 : : */ 204 : 0 : QColor color() const { return mColor; } 205 : : 206 : : /** 207 : : * Sets the color ramp for the glow. This only applies if the colorType() 208 : : * is set to ColorRamp. The glow will utilize colors from the ramp. 209 : : * \param ramp color ramp for glow. Ownership of the ramp is transferred to the effect. 210 : : * \see ramp 211 : : * \see setColorType 212 : : */ 213 : : void setRamp( QgsColorRamp *ramp SIP_TRANSFER ); 214 : : 215 : : /** 216 : : * Returns the color ramp used for the glow. This only applies if the colorType() 217 : : * is set to ColorRamp. The glow will utilize colors from the ramp. 218 : : * \returns color ramp for glow 219 : : * \see setRamp 220 : : * \see colorType 221 : : */ 222 : 0 : QgsColorRamp *ramp() const { return mRamp; } 223 : : 224 : : /** 225 : : * Sets the blend mode for the effect 226 : : * \param mode blend mode used for drawing the effect on to a destination 227 : : * paint device 228 : : * \see blendMode 229 : : */ 230 : : void setBlendMode( const QPainter::CompositionMode mode ) { mBlendMode = mode; } 231 : : 232 : : /** 233 : : * Returns the blend mode for the effect 234 : : * \returns blend mode used for drawing the effect on to a destination 235 : : * paint device 236 : : * \see setBlendMode 237 : : */ 238 : 0 : QPainter::CompositionMode blendMode() const { return mBlendMode; } 239 : : 240 : : /** 241 : : * Sets the color mode to use for the glow. The glow can either be drawn using a QgsColorRamp 242 : : * color ramp or by simply specificing a single color. setColorType is used to specify which mode to use 243 : : * for the glow. 244 : : * \param colorType color type to use for glow 245 : : * \see colorType 246 : : * \see setColor 247 : : * \see setRamp 248 : : */ 249 : : void setColorType( GlowColorType colorType ) { mColorType = colorType; } 250 : : 251 : : /** 252 : : * Returns the color mode used for the glow. The glow can either be drawn using a QgsColorRamp 253 : : * color ramp or by specificing a single color. 254 : : * \returns current color mode used for the glow 255 : : * \see setColorType 256 : : * \see color 257 : : * \see ramp 258 : : */ 259 : 0 : GlowColorType colorType() const { return mColorType; } 260 : : 261 : : QgsGlowEffect &operator=( const QgsGlowEffect &rhs ); 262 : : 263 : : protected: 264 : : 265 : : QRectF boundingRect( const QRectF &rect, const QgsRenderContext &context ) const override; 266 : : void draw( QgsRenderContext &context ) override; 267 : : 268 : : /** 269 : : * Specifies whether the glow is drawn outside the picture or within 270 : : * the picture. 271 : : * \returns TRUE if glow is to be drawn outside the picture, or FALSE 272 : : * to draw glow within the picture 273 : : */ 274 : : virtual bool shadeExterior() const = 0; 275 : : 276 : : double mSpread = 2.0; 277 : : QgsUnitTypes::RenderUnit mSpreadUnit = QgsUnitTypes::RenderMillimeters; 278 : : QgsMapUnitScale mSpreadMapUnitScale; 279 : : QgsColorRamp *mRamp = nullptr; 280 : : double mBlurLevel = 2.645; 281 : : QgsUnitTypes::RenderUnit mBlurUnit = QgsUnitTypes::RenderMillimeters; 282 : : QgsMapUnitScale mBlurMapUnitScale; 283 : : double mOpacity = 0.5; 284 : : QColor mColor; 285 : : QPainter::CompositionMode mBlendMode = QPainter::CompositionMode_SourceOver; 286 : : GlowColorType mColorType = SingleColor; 287 : : 288 : : }; 289 : : 290 : : 291 : : /** 292 : : * \ingroup core 293 : : * \class QgsOuterGlowEffect 294 : : * \brief A paint effect which draws a glow outside of a picture. 295 : : * 296 : : * \since QGIS 2.9 297 : : */ 298 : : 299 : 166 : class CORE_EXPORT QgsOuterGlowEffect : public QgsGlowEffect 300 : : { 301 : : 302 : : public: 303 : : 304 : : /** 305 : : * Creates a new QgsOuterGlowEffect effect from a properties string map. 306 : : * \param map encoded properties string map 307 : : * \returns new QgsOuterGlowEffect 308 : : */ 309 : : static QgsPaintEffect *create( const QVariantMap &map ) SIP_FACTORY; 310 : : 311 : : QgsOuterGlowEffect(); 312 : : 313 : 0 : QString type() const override { return QStringLiteral( "outerGlow" ); } 314 : : QgsOuterGlowEffect *clone() const override SIP_FACTORY; 315 : : 316 : : protected: 317 : : 318 : 0 : bool shadeExterior() const override { return true; } 319 : : 320 : : }; 321 : : 322 : : 323 : : /** 324 : : * \ingroup core 325 : : * \class QgsInnerGlowEffect 326 : : * \brief A paint effect which draws a glow within a picture. 327 : : * 328 : : * \since QGIS 2.9 329 : : */ 330 : : 331 : 166 : class CORE_EXPORT QgsInnerGlowEffect : public QgsGlowEffect 332 : : { 333 : : 334 : : public: 335 : : 336 : : /** 337 : : * Creates a new QgsInnerGlowEffect effect from a properties string map. 338 : : * \param map encoded properties string map 339 : : * \returns new QgsInnerGlowEffect 340 : : */ 341 : : static QgsPaintEffect *create( const QVariantMap &map ) SIP_FACTORY; 342 : : 343 : : QgsInnerGlowEffect(); 344 : : 345 : 0 : QString type() const override { return QStringLiteral( "innerGlow" ); } 346 : : QgsInnerGlowEffect *clone() const override SIP_FACTORY; 347 : : 348 : : protected: 349 : : 350 : 0 : bool shadeExterior() const override { return false; } 351 : : 352 : : }; 353 : : 354 : : #endif // QGSGLOWEFFECT_H 355 : :