Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgslegendpatchshape.h 3 : : ------------------- 4 : : begin : April 2020 5 : : copyright : (C) 2020 by 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 QGSLEGENDPATCHSHAPE_H 18 : : #define QGSLEGENDPATCHSHAPE_H 19 : : 20 : : #include "qgis_core.h" 21 : : #include "qgis_sip.h" 22 : : #include "qgssymbol.h" 23 : : 24 : : /** 25 : : * \ingroup core 26 : : * \brief Represents a patch shape for use in map legends. 27 : : * 28 : : * \since QGIS 3.14 29 : : */ 30 : 1 : class CORE_EXPORT QgsLegendPatchShape 31 : : { 32 : : public: 33 : : 34 : : /** 35 : : * Constructor for a null QgsLegendPatchShape. 36 : : * 37 : : * A null QgsLegendPatchShape indicates that the default legend patch shape 38 : : * should be used instead. 39 : : */ 40 : 1 : QgsLegendPatchShape() = default; 41 : : 42 : : /** 43 : : * Constructor for QgsLegendPatchShape. 44 : : * 45 : : * The \a type argument specifies the symbol type associated with this patch. 46 : : * 47 : : * The \a geometry argument gives the shape of the patch to render. See setGeometry() 48 : : * for further details on the geometry requirements. 49 : : * 50 : : * If \a preserveAspectRatio is TRUE, then the patch shape should preserve its aspect ratio when 51 : : * it is resized to fit a desired legend patch size. 52 : : */ 53 : : QgsLegendPatchShape( QgsSymbol::SymbolType type, 54 : : const QgsGeometry &geometry, 55 : : bool preserveAspectRatio = true ); 56 : : 57 : : /** 58 : : * Returns TRUE if the patch shape is a null QgsLegendPatchShape, 59 : : * which indicates that the default legend patch shape should be used instead. 60 : : */ 61 : : bool isNull() const; 62 : : 63 : : /** 64 : : * Returns the symbol type associated with this patch. 65 : : * 66 : : * \see setSymbolType() 67 : : */ 68 : : QgsSymbol::SymbolType symbolType() const; 69 : : 70 : : /** 71 : : * Sets the symbol \a type associated with this patch. 72 : : * 73 : : * \see symbolType() 74 : : */ 75 : : void setSymbolType( QgsSymbol::SymbolType type ); 76 : : 77 : : /** 78 : : * Returns the geometry for the patch shape. 79 : : * 80 : : * \see setGeometry() 81 : : */ 82 : : QgsGeometry geometry() const; 83 : : 84 : : /** 85 : : * Sets the \a geometry for the patch shape. 86 : : * 87 : : * The origin and size of the \a geometry is not important, as the legend 88 : : * renderer will automatically scale and transform the geometry to match 89 : : * the desired overall patch bounds. 90 : : * 91 : : * Geometries for legend patches are rendered respecting the traditional 92 : : * "y values increase toward the top of the map" convention, as opposed 93 : : * to the standard computer graphics convention of "y values increase toward 94 : : * the bottom of the display". 95 : : * 96 : : * \warning The geometry type should match the patch shape's symbolType(), 97 : : * e.g. a fill symbol type should only have Polygon or MultiPolygon geometries 98 : : * set, while a line symbol type must have LineString or MultiLineString geometries. 99 : : * 100 : : * \see geometry() 101 : : */ 102 : : void setGeometry( const QgsGeometry &geometry ); 103 : : 104 : : /** 105 : : * Returns TRUE if the patch shape should preserve its aspect ratio when 106 : : * it is resized to fit a desired legend patch size. 107 : : * 108 : : * \see setPreserveAspectRatio() 109 : : */ 110 : : bool preserveAspectRatio() const; 111 : : 112 : : /** 113 : : * Sets whether the patch shape should \a preserve its aspect ratio when 114 : : * it is resized to fit a desired legend patch size. 115 : : * 116 : : * The default behavior is to respect the geometry()'s aspect ratio. 117 : : * 118 : : * \see setPreserveAspectRatio() 119 : : */ 120 : : void setPreserveAspectRatio( bool preserve ); 121 : : 122 : : /** 123 : : * Converts the patch shape to a set of QPolygonF objects representing 124 : : * how the patch should be drawn for a symbol of the given \a type at the specified \a size (as 125 : : * geometry parts and rings). 126 : : */ 127 : : QList< QList< QPolygonF > > toQPolygonF( QgsSymbol::SymbolType type, QSizeF size ) const; 128 : : 129 : : /** 130 : : * Read settings from a DOM \a element. 131 : : * \see writeXml() 132 : : */ 133 : : void readXml( const QDomElement &element, const QgsReadWriteContext &context ); 134 : : 135 : : /** 136 : : * Write settings into a DOM \a element. 137 : : * \see readXml() 138 : : */ 139 : : void writeXml( QDomElement &element, QDomDocument &doc, const QgsReadWriteContext &context ) const; 140 : : 141 : : private: 142 : 1 : QgsSymbol::SymbolType mSymbolType = QgsSymbol::Fill; 143 : : QgsGeometry mGeometry; 144 : 1 : bool mPreserveAspectRatio = true; 145 : : 146 : : }; 147 : : 148 : : #endif // QGSLEGENDPATCHSHAPE_H