Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsmasksymbollayer.h 3 : : --------------------- 4 : : begin : July 2019 5 : : copyright : (C) 2019 by Hugo Mercier 6 : : email : hugo dot mercier at oslandia dot com 7 : : *************************************************************************** 8 : : * * 9 : : * This program is free software; you can redistribute it and/or modify * 10 : : * it under the terms of the GNU General Public License as published by * 11 : : * the Free Software Foundation; either version 2 of the License, or * 12 : : * (at your option) any later version. * 13 : : * * 14 : : ***************************************************************************/ 15 : : 16 : : #ifndef QGSMASKSYMBOLLAYER_H 17 : : #define QGSMASKSYMBOLLAYER_H 18 : : 19 : : #include "qgis_core.h" 20 : : #include "qgis.h" 21 : : #include "qgssymbollayer.h" 22 : : #include "qgssymbollayerreference.h" 23 : : 24 : : class QgsPaintEffect; 25 : : 26 : : /** 27 : : * \ingroup core 28 : : * \class QgsMaskMarkerSymbolLayer 29 : : * \brief Special symbol layer that uses its sub symbol as a selective mask 30 : : * \since QGIS 3.12 31 : : */ 32 : : 33 : 0 : class CORE_EXPORT QgsMaskMarkerSymbolLayer : public QgsMarkerSymbolLayer 34 : : { 35 : : public: 36 : : //! Simple constructor 37 : : QgsMaskMarkerSymbolLayer(); 38 : : 39 : : /** 40 : : * Create a new QgsMaskMarkerSymbolLayer 41 : : * 42 : : * \param properties A property map to deserialize saved information from properties() 43 : : * 44 : : * \returns A new QgsMaskMarkerSymbolLayer 45 : : */ 46 : : static QgsSymbolLayer *create( const QVariantMap &properties = QVariantMap() ) SIP_FACTORY; 47 : : 48 : : QgsMaskMarkerSymbolLayer *clone() const override SIP_FACTORY; 49 : 0 : QgsSymbol *subSymbol() override { return mSymbol.get(); } 50 : : bool setSubSymbol( QgsSymbol *symbol SIP_TRANSFER ) override; 51 : : QSet<QString> usedAttributes( const QgsRenderContext &context ) const override; 52 : : bool hasDataDefinedProperties() const override; 53 : : 54 : : QVariantMap properties() const override; 55 : : 56 : : QString layerType() const override; 57 : : void startRender( QgsSymbolRenderContext &context ) override; 58 : : void stopRender( QgsSymbolRenderContext &context ) override; 59 : : void renderPoint( QPointF point, QgsSymbolRenderContext &context ) override; 60 : : QRectF bounds( QPointF point, QgsSymbolRenderContext &context ) override; 61 : : bool usesMapUnits() const override; 62 : : 63 : : virtual void drawPreviewIcon( QgsSymbolRenderContext &context, QSize size ) override; 64 : : 65 : : //! Whether some masked symbol layers are defined 66 : : bool enabled() const { return ! mMaskedSymbolLayers.isEmpty(); } 67 : : 68 : : /** 69 : : * Returns a list of references to symbol layers that are masked by the sub symbol's shape. 70 : : * \returns a list of references to masked symbol layers 71 : : * \see setMasks 72 : : */ 73 : 0 : QgsSymbolLayerReferenceList masks() const override { return mMaskedSymbolLayers; } 74 : : 75 : : /** 76 : : * Sets the symbol layers that will be masked by the sub symbol's shape. 77 : : * \param maskedLayers list of references to symbol layers 78 : : * \see masks 79 : : */ 80 : 0 : void setMasks( QgsSymbolLayerReferenceList maskedLayers ) { mMaskedSymbolLayers = maskedLayers; } 81 : : 82 : : private: 83 : : #ifdef SIP_RUN 84 : : QgsMaskMarkerSymbolLayer( const QgsMaskMarkerSymbolLayer & ); 85 : : #endif 86 : : 87 : : //! Marker sub symbol 88 : : std::unique_ptr<QgsMarkerSymbol> mSymbol; 89 : : 90 : : //! List of symbol layers that will be masked 91 : : QgsSymbolLayerReferenceList mMaskedSymbolLayers; 92 : : 93 : : std::unique_ptr<QgsPaintEffect> mEffect; 94 : : }; 95 : : 96 : : #endif 97 : : 98 : :