QGIS API Documentation  3.16.0-Hannover (43b64b13f3)
qgslayoutitemshape.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgslayoutitemshape.h
3  ---------------------
4  begin : July 2017
5  copyright : (C) 2017 by Nyall Dawson
6  email : nyall dot dawson at gmail dot com
7  ***************************************************************************/
8 /***************************************************************************
9  * *
10  * This program is free software; you can redistribute it and/or modify *
11  * it under the terms of the GNU General Public License as published by *
12  * the Free Software Foundation; either version 2 of the License, or *
13  * (at your option) any later version. *
14  * *
15  ***************************************************************************/
16 
17 #ifndef QGSLAYOUTITEMSHAPE_H
18 #define QGSLAYOUTITEMSHAPE_H
19 
20 #include "qgis_core.h"
21 #include "qgslayoutitem.h"
22 #include "qgslayoutitemregistry.h"
23 #include "qgssymbol.h"
24 #include "qgslayoutmeasurement.h"
25 
32 class CORE_EXPORT QgsLayoutItemShape : public QgsLayoutItem
33 {
34  Q_OBJECT
35 
36  public:
37 
39  enum Shape
40  {
43  Triangle
44  };
45 
46 
50  explicit QgsLayoutItemShape( QgsLayout *layout );
51 
57  static QgsLayoutItemShape *create( QgsLayout *layout ) SIP_FACTORY;
58 
59 
60  int type() const override;
61  QIcon icon() const override;
62 
63  //Overridden to return shape type
64  QString displayName() const override;
65  QgsLayoutItem::Flags itemFlags() const override;
66 
71  QgsLayoutItemShape::Shape shapeType() const { return mShape; }
72 
77  void setShapeType( QgsLayoutItemShape::Shape type );
78 
84  void setSymbol( QgsFillSymbol *symbol );
85 
90  QgsFillSymbol *symbol() { return mShapeStyleSymbol.get(); }
91 
96  void setCornerRadius( QgsLayoutMeasurement radius );
97 
102  QgsLayoutMeasurement cornerRadius() const { return mCornerRadius; }
103 
104  QgsGeometry clipPath() const override;
105 
106  // Depending on the symbol style, the bounding rectangle can be larger than the shape
107  QRectF boundingRect() const override;
108 
109  // Reimplement estimatedFrameBleed, since frames on shapes are drawn using symbology
110  // rather than the item's pen
111  double estimatedFrameBleed() const override;
112 
113  bool accept( QgsStyleEntityVisitorInterface *visitor ) const override;
114 
115  protected:
116 
117  void draw( QgsLayoutItemRenderContext &context ) override;
118 
119  bool writePropertiesToElement( QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context ) const override;
120  bool readPropertiesFromElement( const QDomElement &element, const QDomDocument &document, const QgsReadWriteContext &context ) override;
121 
122  private slots:
123 
128  void refreshSymbol();
129 
131  void updateBoundingRect();
132 
133  private:
134 
135  Shape mShape = Rectangle;
136 
137  std::unique_ptr< QgsFillSymbol > mShapeStyleSymbol;
138 
139  double mMaxSymbolBleed = 0.0;
141  QRectF mCurrentRectangle;
142 
143  QgsLayoutMeasurement mCornerRadius;
144 
145  QPolygonF calculatePolygon( double scale ) const;
146 };
147 
148 
149 #endif //QGSLAYOUTITEMSHAPE_H
QgsLayoutItemShape
Layout item for basic filled shapes (e.g.
Definition: qgslayoutitemshape.h:33
QgsLayoutItem::writePropertiesToElement
virtual bool writePropertiesToElement(QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context) const
Stores item state within an XML DOM element.
Definition: qgslayoutitem.cpp:1325
QgsReadWriteContext
The class is used as a container of context for various read/write operations on other objects.
Definition: qgsreadwritecontext.h:35
QgsLayoutItem::icon
virtual QIcon icon() const
Returns the item's icon.
Definition: qgslayoutitem.h:334
QgsLayoutItemRenderContext
Contains settings and helpers relating to a render of a QgsLayoutItem.
Definition: qgslayoutitem.h:45
QgsStyleEntityVisitorInterface
An interface for classes which can visit style entity (e.g.
Definition: qgsstyleentityvisitor.h:34
QgsLayoutItem::readPropertiesFromElement
virtual bool readPropertiesFromElement(const QDomElement &element, const QDomDocument &document, const QgsReadWriteContext &context)
Sets item state from a DOM element.
Definition: qgslayoutitem.cpp:1330
QgsLayoutItemShape::Ellipse
@ Ellipse
Ellipse shape.
Definition: qgslayoutitemshape.h:41
QgsLayoutItem::draw
virtual void draw(QgsLayoutItemRenderContext &context)=0
Draws the item's contents using the specified item render context.
SIP_FACTORY
#define SIP_FACTORY
Definition: qgis_sip.h:76
QgsLayoutItem::type
int type() const override
Returns a unique graphics item type identifier.
Definition: qgslayoutitem.cpp:124
QgsLayoutItem::estimatedFrameBleed
virtual double estimatedFrameBleed() const
Returns the estimated amount the item's frame bleeds outside the item's actual rectangle.
Definition: qgslayoutitem.cpp:936
qgslayoutitem.h
QgsLayoutItem::clipPath
virtual QgsGeometry clipPath() const
Returns the clipping path generated by this item, in layout coordinates.
Definition: qgslayoutitem.cpp:1171
QgsLayoutItem::accept
virtual bool accept(QgsStyleEntityVisitorInterface *visitor) const
Accepts the specified style entity visitor, causing it to visit all style entities associated with th...
Definition: qgslayoutitem.cpp:1165
QgsLayoutItem
Base class for graphical items within a QgsLayout.
Definition: qgslayoutitem.h:113
qgslayoutmeasurement.h
QgsLayoutItemShape::Rectangle
@ Rectangle
Rectangle shape.
Definition: qgslayoutitemshape.h:42
QgsLayoutItem::itemFlags
virtual Flags itemFlags() const
Returns the item's flags, which indicate how the item behaves.
Definition: qgslayoutitem.cpp:129
QgsGeometry
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:124
QgsLayout
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
Definition: qgslayout.h:50
QgsLayoutItem::displayName
virtual QString displayName() const
Gets item display name.
Definition: qgslayoutitem.cpp:107
QgsFillSymbol
A fill symbol type, for rendering Polygon and MultiPolygon geometries.
Definition: qgssymbol.h:1234
QgsLayoutItemShape::symbol
QgsFillSymbol * symbol()
Returns the fill symbol used to draw the shape.
Definition: qgslayoutitemshape.h:90
QgsLayoutItemShape::shapeType
QgsLayoutItemShape::Shape shapeType() const
Returns the type of shape (e.g.
Definition: qgslayoutitemshape.h:71
QgsLayoutItemShape::Shape
Shape
Shape type.
Definition: qgslayoutitemshape.h:40
QgsLayoutItemShape::cornerRadius
QgsLayoutMeasurement cornerRadius() const
Returns the corner radius for rounded rectangle corners.
Definition: qgslayoutitemshape.h:102
qgslayoutitemregistry.h
qgssymbol.h
QgsLayoutMeasurement
This class provides a method of storing measurements for use in QGIS layouts using a variety of diffe...
Definition: qgslayoutmeasurement.h:34