33 properties.insert( QStringLiteral(
"color" ), QStringLiteral(
"white" ) );
34 properties.insert( QStringLiteral(
"style" ), QStringLiteral(
"solid" ) );
35 properties.insert( QStringLiteral(
"style_border" ), QStringLiteral(
"solid" ) );
36 properties.insert( QStringLiteral(
"color_border" ), QStringLiteral(
"black" ) );
37 properties.insert( QStringLiteral(
"width_border" ), QStringLiteral(
"0.3" ) );
38 properties.insert( QStringLiteral(
"joinstyle" ), QStringLiteral(
"miter" ) );
76 if ( !
id().isEmpty() )
84 return tr(
"<Ellipse>" );
86 return tr(
"<Rectangle>" );
88 return tr(
"<Triangle>" );
91 return tr(
"<Shape>" );
103 if (
mLayout &&
id().isEmpty() )
106 mLayout->itemsModel()->updateItemDisplayName(
this );
110 void QgsLayoutItemShape::refreshSymbol()
118 updateBoundingRect();
124 void QgsLayoutItemShape::updateBoundingRect()
126 QRectF rectangle = rect();
127 rectangle.adjust( -mMaxSymbolBleed, -mMaxSymbolBleed, mMaxSymbolBleed, mMaxSymbolBleed );
128 if ( rectangle != mCurrentRectangle )
130 prepareGeometryChange();
131 mCurrentRectangle = rectangle;
140 mShapeStyleSymbol.reset( symbol->
clone() );
146 return mCurrentRectangle;
151 return mMaxSymbolBleed;
156 if ( mShapeStyleSymbol )
169 painter->setPen( Qt::NoPen );
170 painter->setBrush( Qt::NoBrush );
174 QPolygonF shapePolygon;
178 QTransform t = QTransform::fromScale( 100, 100 );
180 QTransform ti = t.inverted();
187 QPainterPath ellipsePath;
188 ellipsePath.addEllipse( QRectF( 0, 0, rect().width() * scale, rect().height() * scale ) );
189 QPolygonF ellipsePoly = ellipsePath.toFillPolygon( t );
190 shapePolygon = ti.map( ellipsePoly );
196 if ( mCornerRadius.
length() > 0 )
198 QPainterPath roundedRectPath;
199 double radius =
mLayout->convertToLayoutUnits( mCornerRadius ) * scale;
200 roundedRectPath.addRoundedRect( QRectF( 0, 0, rect().width() * scale, rect().height() * scale ), radius, radius );
201 QPolygonF roundedPoly = roundedRectPath.toFillPolygon( t );
202 shapePolygon = ti.map( roundedPoly );
206 shapePolygon = QPolygonF( QRectF( 0, 0, rect().width() * scale, rect().height() * scale ) );
212 shapePolygon << QPointF( 0, rect().height() * scale );
213 shapePolygon << QPointF( rect().width() * scale, rect().height() * scale );
214 shapePolygon << QPointF( rect().width() / 2.0 * scale, 0 );
215 shapePolygon << QPointF( 0, rect().height() * scale );
220 QList<QPolygonF> rings;
229 element.setAttribute( QStringLiteral(
"shapeType" ), mShape );
230 element.setAttribute( QStringLiteral(
"cornerRadiusMeasure" ), mCornerRadius.
encodeMeasurement() );
233 element.appendChild( shapeStyleElem );
240 mShape =
static_cast< Shape >( element.attribute( QStringLiteral(
"shapeType" ), QStringLiteral(
"0" ) ).toInt() );
241 if ( element.hasAttribute( QStringLiteral(
"cornerRadiusMeasure" ) ) )
244 mCornerRadius =
QgsLayoutMeasurement( element.attribute( QStringLiteral(
"cornerRadius" ), QStringLiteral(
"0" ) ).toDouble() );
246 QDomElement shapeStyleSymbolElem = element.firstChildElement( QStringLiteral(
"symbol" ) );
247 if ( !shapeStyleSymbolElem.isNull() )
249 mShapeStyleSymbol.reset( QgsSymbolLayerUtils::loadSymbol<QgsFillSymbol>( shapeStyleSymbolElem, context ) );
QIcon icon() const override
Returns the item's icon.
void setShapeType(QgsLayoutItemShape::Shape type)
Sets the type of shape (e.g.
The class is used as a container of context for various read/write operations on other objects...
A symbol entity for QgsStyle databases.
Base class for graphical items within a QgsLayout.
double estimatedFrameBleed() const override
Returns the estimated amount the item's frame bleeds outside the item's actual rectangle.
bool readPropertiesFromElement(const QDomElement &element, const QDomDocument &document, const QgsReadWriteContext &context) override
Sets item state from a DOM element.
QgsLayoutItemShape(QgsLayout *layout)
Constructor for QgsLayoutItemShape, with the specified parent layout.
static QgsFillSymbol * createSimple(const QgsStringMap &properties)
Create a fill symbol with one symbol layer: SimpleFill with specified properties. ...
static QIcon getThemeIcon(const QString &name)
Helper to get a theme icon.
static QDomElement saveSymbol(const QString &symbolName, const QgsSymbol *symbol, QDomDocument &doc, const QgsReadWriteContext &context)
Writes a symbol definition to XML.
An interface for classes which can visit style entity (e.g.
QgsLayoutRenderContext & renderContext()
Returns a reference to the layout's render context, which stores information relating to the current ...
QMap< QString, QString > QgsStringMap
void startRender(QgsRenderContext &context, const QgsFields &fields=QgsFields())
Begins the rendering process for the symbol.
bool accept(QgsStyleEntityVisitorInterface *visitor) const override
Accepts the specified style entity visitor, causing it to visit all style entities associated with th...
virtual bool visit(const QgsStyleEntityVisitorInterface::StyleLeaf &entity)
Called when the visitor will visit a style entity.
bool writePropertiesToElement(QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context) const override
Stores item state within an XML DOM element.
QString displayName() const override
Gets item display name.
void frameChanged()
Emitted if the item's frame style changes.
void sizePositionChanged()
Emitted when the item's size or position changes.
static QgsLayoutItemShape * create(QgsLayout *layout)
Returns a new shape item for the specified layout.
const QgsLayout * layout() const
Returns the layout the object is attached to.
This class provides a method of storing measurements for use in QGIS layouts using a variety of diffe...
void renderPolygon(const QPolygonF &points, QList< QPolygonF > *rings, const QgsFeature *f, QgsRenderContext &context, int layer=-1, bool selected=false)
Renders the symbol using the given render context.
QgsFillSymbol * clone() const override
Returns a deep copy of this symbol.
double dpi() const
Returns the dpi for outputting the layout.
QgsRenderContext & renderContext()
Returns a reference to the context's render context.
Layout item for basic filled shapes (e.g.
static QgsRenderContext createRenderContextForLayout(QgsLayout *layout, QPainter *painter, double dpi=-1)
Creates a render context suitable for the specified layout and painter destination.
QPointer< QgsLayout > mLayout
int type() const override
QRectF boundingRect() const override
static double estimateMaxSymbolBleed(QgsSymbol *symbol, const QgsRenderContext &context)
Returns the maximum estimated bleed for the symbol.
QString id() const
Returns the item's ID name.
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
void setBackgroundEnabled(bool drawBackground)
Sets whether this item has a background drawn under it or not.
Contains settings and helpers relating to a render of a QgsLayoutItem.
static QgsLayoutMeasurement decodeMeasurement(const QString &string)
Decodes a measurement from a string.
Contains information about the context of a rendering operation.
double convertToPainterUnits(double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale=QgsMapUnitScale()) const
Converts a size from the specified units to painter units (pixels).
double length() const
Returns the length of the measurement.
void setSymbol(QgsFillSymbol *symbol)
Sets the fill symbol used to draw the shape.
QPainter * painter()
Returns the destination QPainter for the render operation.
QgsFillSymbol * symbol()
Returns the fill symbol used to draw the shape.
virtual QString uuid() const
Returns the item identification string.
virtual void setFrameEnabled(bool drawFrame)
Sets whether this item has a frame drawn around it or not.
A fill symbol type, for rendering Polygon and MultiPolygon geometries.
QString encodeMeasurement() const
Encodes the layout measurement to a string.
void draw(QgsLayoutItemRenderContext &context) override
Draws the item's contents using the specified item render context.
void stopRender(QgsRenderContext &context)
Ends the rendering process.
Contains information relating to the style entity currently being visited.