30using namespace Qt::StringLiterals;
34 return u
"Single Box"_s;
39 return QObject::tr(
"Single Box" );
72 QPainter *painter = context.
painter();
80 std::unique_ptr< QgsLineSymbol > lineSymbol( settings.
lineSymbol()->
clone() );
81 lineSymbol->startRender( context );
83 std::unique_ptr< QgsFillSymbol > fillSymbol1( settings.
fillSymbol()->
clone() );
84 fillSymbol1->startRender( context );
87 fillSymbol2->startRender( context );
89 painter->setPen( Qt::NoPen );
90 painter->setBrush( Qt::NoBrush );
95 const QList<double> positions =
segmentPositions( context, scaleContext, settings );
96 const QList<double> widths =
segmentWidths( scaleContext, settings );
102 for (
int i = 0; i < positions.size(); ++i )
106 currentSymbol = fillSymbol1.get();
110 currentSymbol = fillSymbol2.get();
118 if ( i == positions.size() - 1 )
119 maxX = thisX + thisWidth;
121 const QRectF segmentRect( thisX, barTopPosition, thisWidth, barHeight );
122 currentSymbol->
renderPolygon( QPolygonF() << segmentRect.topLeft() << segmentRect.topRight() << segmentRect.bottomRight() << segmentRect.bottomLeft() << segmentRect.topLeft(),
nullptr,
nullptr, context );
123 useColor = !useColor;
128 for (
int layer = 0; layer < lineSymbol->symbolLayerCount(); ++layer )
130 for (
int i = 1; i < positions.size(); ++i )
133 lineSymbol->renderPolyline( QPolygonF() << QPointF( lineX, barTopPosition ) << QPointF( lineX, barTopPosition + barHeight ),
nullptr, context, layer );
137 lineSymbol->renderPolyline(
138 QPolygonF() << QPointF( minX, barTopPosition ) << QPointF( maxX, barTopPosition ) << QPointF( maxX, barTopPosition + barHeight ) << QPointF( minX, barTopPosition + barHeight ) << QPointF( minX, barTopPosition ),
145 lineSymbol->stopRender( context );
146 fillSymbol1->stopRender( context );
147 fillSymbol2->stopRender( context );
159 if ( fill && fill->
brushStyle() == Qt::NoBrush )
161 auto fillSymbol = std::make_unique< QgsFillSymbol >();
162 auto fillSymbolLayer = std::make_unique< QgsSimpleFillSymbolLayer >();
163 fillSymbolLayer->setColor( QColor( 0, 0, 0 ) );
164 fillSymbolLayer->setBrushStyle( Qt::SolidPattern );
165 fillSymbolLayer->setStrokeStyle( Qt::SolidLine );
166 fillSymbol->changeSymbolLayer( 0, fillSymbolLayer.release() );
169 fillSymbol = std::make_unique< QgsFillSymbol >();
170 fillSymbolLayer = std::make_unique< QgsSimpleFillSymbolLayer >();
171 fillSymbolLayer->setColor( QColor( 255, 255, 255 ) );
172 fillSymbolLayer->setStrokeStyle( Qt::NoPen );
173 fillSymbol->changeSymbolLayer( 0, fillSymbolLayer.release() );
@ Millimeters
Millimeters.
A fill symbol type, for rendering Polygon and MultiPolygon geometries.
void renderPolygon(const QPolygonF &points, const QVector< 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.
QgsLineSymbol * clone() const override
Returns a deep copy of this symbol.
Contains information about the context of a rendering operation.
double convertToPainterUnits(double size, Qgis::RenderUnit unit, const QgsMapUnitScale &scale=QgsMapUnitScale(), Qgis::RenderSubcomponentProperty property=Qgis::RenderSubcomponentProperty::Generic) const
Converts a size from the specified units to painter units (pixels).
QPainter * painter()
Returns the destination QPainter for the render operation.
void setPainterFlagsUsingContext(QPainter *painter=nullptr) const
Sets relevant flags on a destination painter, using the flags and settings currently defined for the ...
double verticalOffset(QgsRenderContext &context, const QgsScaleBarSettings &settings) const
Calculates the vertical offset to the top of the bar, accounting for text placed above the bar.
void drawDefaultLabels(QgsRenderContext &context, const QgsScaleBarSettings &settings, const QgsScaleBarRenderer::ScaleBarContext &scaleContext) const
Draws default scalebar labels using the specified settings and scaleContext to a destination render c...
QList< double > segmentWidths(const QgsScaleBarRenderer::ScaleBarContext &scaleContext, const QgsScaleBarSettings &settings) const
Returns a list of widths of each segment of the scalebar.
Q_DECL_DEPRECATED QList< double > segmentPositions(const QgsScaleBarRenderer::ScaleBarContext &scaleContext, const QgsScaleBarSettings &settings) const
Returns a list of positions for each segment within the scalebar.
Q_DECL_DEPRECATED double firstLabelXOffset(const QgsScaleBarSettings &settings) const
Returns the x-offset (in millimeters) used for the first label in the scalebar.
@ FlagUsesLabelVerticalPlacement
Renderer uses the QgsScaleBarSettings::labelVerticalPlacement() setting.
@ FlagUsesLabelHorizontalPlacement
Renderer uses the QgsScaleBarSettings::labelHorizontalPlacement() setting.
@ FlagUsesLineSymbol
Renderer utilizes the scalebar line symbol (see QgsScaleBarSettings::lineSymbol() ).
@ FlagUsesUnitLabel
Renderer uses the QgsScaleBarSettings::unitLabel() setting.
@ FlagUsesSegments
Renderer uses the scalebar segments.
@ FlagUsesLabelBarSpace
Renderer uses the QgsScaleBarSettings::labelBarSpace() setting.
@ FlagUsesFillSymbol
Renderer utilizes the scalebar fill symbol (see QgsScaleBarSettings::fillSymbol() ).
@ FlagRespectsMapUnitsPerScaleBarUnit
Renderer respects the QgsScaleBarSettings::mapUnitsPerScaleBarUnit() setting.
@ FlagRespectsUnits
Renderer respects the QgsScaleBarSettings::units() setting.
@ FlagUsesAlternateFillSymbol
Renderer utilizes the alternate scalebar fill symbol (see QgsScaleBarSettings::alternateFillSymbol() ...
Stores the appearance and layout settings for scalebar drawing with QgsScaleBarRenderer.
QgsLineSymbol * lineSymbol() const
Returns the line symbol used to render the scalebar (only used for some scalebar types).
void setAlternateFillSymbol(QgsFillSymbol *symbol)
Sets the secondary fill symbol used to render the scalebar (only used for some scalebar types).
void setFillSymbol(QgsFillSymbol *symbol)
Sets the primary fill symbol used to render the scalebar (only used for some scalebar types).
QgsFillSymbol * alternateFillSymbol() const
Returns the secondary fill symbol used to render the scalebar (only used for some scalebar types).
QgsFillSymbol * fillSymbol() const
Returns the primary fill symbol used to render the scalebar (only used for some scalebar types).
double height() const
Returns the scalebar height (in millimeters).
Renders polygons using a single fill and stroke color.
Qt::BrushStyle brushStyle() const
bool applyDefaultSettings(QgsScaleBarSettings &settings) const override
Applies any default settings relating to the scalebar to the passed settings object.
QString id() const override
Returns the unique ID for this renderer.
QgsSingleBoxScaleBarRenderer()=default
QString visibleName() const override
Returns the user friendly, translated name for the renderer.
int sortKey() const override
Returns a sorting key value, where renderers with a lower sort key will be shown earlier in lists.
Flags flags() const override
Returns the scalebar rendering flags, which dictates the renderer's behavior.
QgsSingleBoxScaleBarRenderer * clone() const override
Returns a clone of the renderer.
void draw(QgsRenderContext &context, const QgsScaleBarSettings &settings, const QgsScaleBarRenderer::ScaleBarContext &scaleContext) const override
Draws the scalebar using the specified settings and scaleContext to a destination render context.
Contains parameters regarding scalebar calculations.