39  , mSettings( settings )
 
   40  , mMinimumValue( minimumValue )
 
   41  , mMaximumValue( maximumValue )
 
   51  connect( nodeLayer, &QObject::destroyed, 
this, [ = ]() { 
mLayerNode = 
nullptr; } );
 
   69QString QgsColorRampLegendNode::labelForMinimum()
 const 
   78QString QgsColorRampLegendNode::labelForMaximum()
 const 
   89  if ( role == Qt::DisplayRole )
 
   93  else if ( role == Qt::EditRole )
 
   97  else if ( role == Qt::DecorationRole )
 
   99    if ( mPixmap.isNull() || mPixmap.size() != mIconSize )
 
  101      const QFont font = 
data( Qt::FontRole ).value< QFont >();
 
  103      const QString minLabel = labelForMinimum();
 
  104      const QString maxLabel = labelForMaximum();
 
  106      const QFontMetrics fm( font );
 
  108      const QRect minBoundingRect = fm.boundingRect( minLabel );
 
  109      const QRect maxBoundingRect = fm.boundingRect( maxLabel );
 
  111      const int minLabelWidth = minBoundingRect.width();
 
  112      const int maxLabelWidth = maxBoundingRect.width();
 
  113      const int maxTextWidth = std::max( minLabelWidth, maxLabelWidth );
 
  114      const int labelGapFromRamp = fm.boundingRect( QStringLiteral( 
"x" ) ).width();
 
  115      const int extraAllowance = labelGapFromRamp * 0.4; 
 
  121          labelRect = QRect( mIconSize.width() + labelGapFromRamp, 0, maxTextWidth + extraAllowance, mIconSize.height() );
 
  122          mPixmap = QPixmap( mIconSize.width() + maxTextWidth + labelGapFromRamp + extraAllowance, mIconSize.height() );
 
  123          rampSize = mIconSize;
 
  127          labelRect = QRect( 0, mIconSize.height() + labelGapFromRamp, std::max( mIconSize.width(), minLabelWidth + maxLabelWidth + labelGapFromRamp ), std::max( minBoundingRect.height(),
 
  128                             maxBoundingRect.height() ) + extraAllowance );
 
  129          mPixmap = QPixmap( std::max( mIconSize.width(), minLabelWidth + maxLabelWidth + labelGapFromRamp ), mIconSize.height() + maxTextWidth + labelGapFromRamp + extraAllowance );
 
  130          rampSize = QSize( labelRect.width(), mIconSize.height() );
 
  134      mPixmap.fill( Qt::transparent );
 
  147        pix = QPixmap( rampSize );
 
  148        pix.fill( Qt::transparent );
 
  151      QPainter p( &mPixmap );
 
  152      p.drawPixmap( 0, 0, pix );
 
  189  std::unique_ptr< QgsRenderContext > tempRenderContext;
 
  194    tempRenderContext = std::make_unique< QgsRenderContext >();
 
  197    tempRenderContext->setScaleFactor( 
settings.dpi() / 25.4 );
 
  198    tempRenderContext->setRendererScale( 
settings.mapScale() );
 
  200    tempRenderContext->setMapToPixel( 
QgsMapToPixel( 1 / ( 
settings.mmPerMapUnit() * tempRenderContext->scaleFactor() ) ) );
 
  202    tempRenderContext->setForceVectorOutput( 
true );
 
  203    tempRenderContext->setPainter( ctx ? ctx->
painter : 
nullptr );
 
  208    tempRenderContext->setExpressionContext( expContext );
 
  209    context = tempRenderContext.get();
 
  213  const QString minLabel = labelForMinimum();
 
  214  const QString maxLabel = labelForMaximum();
 
  219  double minHeightMm = 0;
 
  220  double minWidthMm = 0;
 
  221  double rampHeight = 0;
 
  222  double rampWidth = 0;
 
  228      rampHeight = ctx && ctx->
patchSize.height() > 0 ? std::max( minHeightMm / 2, ctx->
patchSize.height() ) : std::max( minHeightMm, 
settings.symbolSize().height() );
 
  229      rampWidth = patchWidth;
 
  236      rampHeight = patchHeight;
 
  237      rampWidth = std::max( minWidthMm, patchWidth );
 
  243    const double currentYCoord = ctx->
top;
 
  251      opacity = layer->opacity();
 
  256    double rampLeftMm = 0;
 
  257    const double rampTopMm = currentYCoord;
 
  258    switch ( 
settings.symbolAlignment() )
 
  270    p->scale( 1.0 / dotsPerMM, 1.0 / dotsPerMM );
 
  272    QLinearGradient gradient;
 
  277        const double gradientTop = rampTopMm * dotsPerMM;
 
  278        const double gradientBottom = gradientTop + rampHeight * dotsPerMM;
 
  286        const double gradientLeft = rampLeftMm * dotsPerMM;
 
  287        const double gradientRight = gradientLeft + rampWidth * dotsPerMM;
 
  305      pen.setColor( 
settings.rasterStrokeColor() );
 
  306      pen.setWidthF( 
settings.rasterStrokeWidth() * dotsPerMM );
 
  307      pen.setJoinStyle( Qt::MiterJoin );
 
  312      ctx->
painter->setPen( Qt::NoPen );
 
  315    p->setBrush( QBrush( gradient ) );
 
  316    p->drawRect( rampLeftMm * dotsPerMM, rampTopMm * dotsPerMM, rampWidth * dotsPerMM, rampHeight * dotsPerMM );
 
  319  double labelHeight = 0;
 
  325      const double currentYCoord = ctx->
top;
 
  334      p->scale( 1.0 / dotsPerMM, 1.0 / dotsPerMM );
 
  336      double labelXMin = 0;
 
  337      double labelXMax = 0;
 
  345      switch ( 
settings.symbolAlignment() )
 
  359      const QRectF textRect( labelXMin * dotsPerMM, labelYMin * dotsPerMM, ( labelXMax - labelXMin ) * dotsPerMM, labelHeight * dotsPerMM );
 
  362                                 *context, format, 
true, Qgis::TextVerticalAlignment::Top );
 
  365                                 *context, format, 
true, Qgis::TextVerticalAlignment::Bottom );
 
  377  return QSizeF( rampWidth, rampHeight + labelHeight );
 
  382  if ( !mRamp || mSettings.
orientation() == Qt::Horizontal )
 
  389  std::unique_ptr< QgsRenderContext > tempRenderContext;
 
  394    tempRenderContext = std::make_unique< QgsRenderContext >();
 
  397    tempRenderContext->setScaleFactor( 
settings.dpi() / 25.4 );
 
  398    tempRenderContext->setRendererScale( 
settings.mapScale() );
 
  400    tempRenderContext->setMapToPixel( 
QgsMapToPixel( 1 / ( 
settings.mmPerMapUnit() * tempRenderContext->scaleFactor() ) ) );
 
  402    tempRenderContext->setForceVectorOutput( 
true );
 
  403    tempRenderContext->setPainter( ctx ? ctx->
painter : 
nullptr );
 
  408    tempRenderContext->setExpressionContext( expContext );
 
  409    context = tempRenderContext.get();
 
  414  const QString minLabel = labelForMinimum();
 
  415  const QString maxLabel = labelForMaximum();
 
  417  const double rampHeight = symbolSize.height();
 
  418  const double rampWidth = symbolSize.width();
 
  419  double textWidth = 0;
 
  420  double textHeight = 0;
 
  424    const double currentYCoord = ctx->
top;
 
  433    p->scale( 1.0 / dotsPerMM, 1.0 / dotsPerMM );
 
  435    double labelXMin = 0;
 
  436    double labelXMax = 0;
 
  437    switch ( 
settings.symbolAlignment() )
 
  458    const QRectF textRect( labelXMin * dotsPerMM, currentYCoord * dotsPerMM, ( labelXMax - labelXMin ) * dotsPerMM, rampHeight * dotsPerMM );
 
  461                               *context, format, 
true, Qgis::TextVerticalAlignment::Top );
 
  464                               *context, format, 
true, Qgis::TextVerticalAlignment::Bottom );
 
  470    textHeight = rampHeight;
 
  473  return QSizeF( textWidth, textHeight );
 
@ Antialiasing
Use antialiasing while drawing.
 
Settings for a color ramp legend node.
 
void setMaximumLabel(const QString &label)
Sets the label for the maximum value on the ramp.
 
const QgsNumericFormat * numericFormat() const
Returns the numeric format used for numbers in the scalebar.
 
QString maximumLabel() const
Returns the label for the maximum value on the ramp.
 
QString suffix() const
Returns the suffix to show after legend text.
 
@ MaximumToMinimum
Maximum value on bottom, minimum value on top.
 
@ MinimumToMaximum
Minimum value on bottom, maximum value on top.
 
QString prefix() const
Returns the prefix to show before legend text.
 
Qt::Orientation orientation() const
Returns the ramp orientation (i.e.
 
QgsColorRampLegendNodeSettings::Direction direction() const
Returns the direction of the ramp.
 
QgsTextFormat textFormat() const
Returns the text format used to render text in the legend item.
 
void setMinimumLabel(const QString &label)
Sets the label for the minimum value on the ramp.
 
QString minimumLabel() const
Returns the label for the minimum value on the ramp.
 
QSizeF drawSymbolText(const QgsLegendSettings &settings, ItemContext *ctx, QSizeF symbolSize) const override
Draws label on the right side of the item.
 
const QgsColorRamp * ramp() const
Returns the color ramp used by the node.
 
QSize iconSize() const
Returns the icon size, which is how large the ramp will render in a layer tree widget.
 
void setSettings(const QgsColorRampLegendNodeSettings &settings)
Sets the node's settings.
 
QgsColorRampLegendNodeSettings settings() const
Returns the node's settings.
 
QVariant data(int role) const override
Returns data associated with the item. Must be implemented in derived class.
 
QSizeF drawSymbol(const QgsLegendSettings &settings, ItemContext *ctx, double itemHeight) const override
Draws symbol on the left side of the item.
 
QgsColorRampLegendNode(QgsLayerTreeLayer *nodeLayer, QgsColorRamp *ramp, const QString &minimumLabel, const QString &maximumLabel, QObject *parent=nullptr)
Constructor for QgsColorRampLegendNode.
 
Abstract base class for color ramps.
 
static QString typeString()
Returns the string identifier for QgsCptCityColorRamp.
 
static QList< QgsExpressionContextScope * > globalProjectLayerScopes(const QgsMapLayer *layer)
Creates a list of three scopes: global, layer's project and layer.
 
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
 
void appendScopes(const QList< QgsExpressionContextScope * > &scopes)
Appends a list of scopes to the end of the context.
 
Gradient color ramp, which smoothly interpolates between two colors and also supports optional extra ...
 
static QString typeString()
Returns the string identifier for QgsGradientColorRamp.
 
void addStopsToGradient(QGradient *gradient, double opacity=1) const
Copy color ramp stops to a QGradient.
 
Layer tree node points to a map layer.
 
The QgsLegendRendererItem class is abstract interface for legend items returned from QgsMapLayerLegen...
 
@ ColorRampLegend
Color ramp legend (since QGIS 3.18)
 
QgsLayerTreeLayer * mLayerNode
 
@ NodeTypeRole
Type of node. Added in 3.16.
 
QgsLayerTreeLayer * layerNode() const
Returns pointer to the parent layer node.
 
static int scaleIconSize(int standardSize)
Scales an layer tree model icon size to compensate for display pixel density, making the icon size hi...
 
The QgsLegendSettings class stores the appearance and layout settings for legend drawing with QgsLege...
 
@ Symbol
Symbol icon (excluding label)
 
@ SymbolLabel
Symbol label (excluding icon)
 
Base class for all map layer types.
 
Perform transforms between map coordinates and device coordinates.
 
A context for numeric formats.
 
Contains information about the context of a rendering operation.
 
double scaleFactor() const
Returns the scaling factor for the render to convert painter units to physical sizes.
 
void setPainterFlagsUsingContext(QPainter *painter=nullptr) const
Sets relevant flags on a destination painter, using the flags and settings currently defined for the ...
 
Scoped object for saving and restoring a QPainter object's state.
 
static QPixmap colorRampPreviewPixmap(QgsColorRamp *ramp, QSize size, int padding=0, Qt::Orientation direction=Qt::Horizontal, bool flipDirection=false, bool drawTransparentBackground=true)
Returns a pixmap preview for a color ramp.
 
Container for all settings relating to text rendering.
 
bool isValid() const
Returns true if the format is valid.
 
static double textWidth(const QgsRenderContext &context, const QgsTextFormat &format, const QStringList &textLines, QFontMetricsF *fontMetrics=nullptr)
Returns the width of a text based on a given format.
 
static void drawText(const QRectF &rect, double rotation, Qgis::TextHorizontalAlignment alignment, const QStringList &textLines, QgsRenderContext &context, const QgsTextFormat &format, bool drawAsOutlines=true, Qgis::TextVerticalAlignment vAlignment=Qgis::TextVerticalAlignment::Top, Qgis::TextRendererFlags flags=Qgis::TextRendererFlags(), Qgis::TextLayoutMode mode=Qgis::TextLayoutMode::Rectangle)
Draws text within a rectangle using the specified settings.
 
static double textHeight(const QgsRenderContext &context, const QgsTextFormat &format, const QStringList &textLines, Qgis::TextLayoutMode mode=Qgis::TextLayoutMode::Point, QFontMetricsF *fontMetrics=nullptr, Qgis::TextRendererFlags flags=Qgis::TextRendererFlags(), double maxLineWidth=0)
Returns the height of a text based on a given format.
 
static Qgis::TextHorizontalAlignment convertQtHAlignment(Qt::Alignment alignment)
Converts a Qt horizontal alignment flag to a Qgis::TextHorizontalAlignment value.
 
#define Q_NOWARN_DEPRECATED_POP
 
#define Q_NOWARN_DEPRECATED_PUSH
 
QPainter * painter
Painter.
 
double top
Top y-position of legend item.
 
double maxSiblingSymbolWidth
Largest symbol width, considering all other sibling legend components associated with the current com...
 
QSizeF patchSize
Symbol patch size to render for the node.
 
double columnLeft
Left side of current legend column.
 
double columnRight
Right side of current legend column.
 
Q_NOWARN_DEPRECATED_POP QgsRenderContext * context
Render context, if available.