@@ -73,8 +73,8 @@ QgsLayerTreeModelLegendNode::ItemMetrics QgsLayerTreeModelLegendNode::draw( cons
73
73
74
74
void QgsLayerTreeModelLegendNode::draw ( const QgsLegendSettings &settings, QJsonObject &json )
75
75
{
76
+ drawSymbol ( settings, json );
76
77
drawSymbolText ( settings, json );
77
- json[ " symbol" ] = " TODO" ;
78
78
}
79
79
80
80
QSizeF QgsLayerTreeModelLegendNode::drawSymbol ( const QgsLegendSettings &settings, ItemContext *ctx, double itemHeight ) const
@@ -89,6 +89,19 @@ QSizeF QgsLayerTreeModelLegendNode::drawSymbol( const QgsLegendSettings &setting
89
89
return settings.symbolSize ();
90
90
}
91
91
92
+ void QgsLayerTreeModelLegendNode::drawSymbol ( const QgsLegendSettings &settings, QJsonObject &json ) const
93
+ {
94
+ QIcon icon = data ( Qt::DecorationRole ).value <QIcon>();
95
+ if ( icon.isNull () )
96
+ return ;
97
+
98
+ QImage image ( icon.pixmap ( settings.symbolSize ().width (), settings.symbolSize ().height () ).toImage () );
99
+ QByteArray byteArray;
100
+ QBuffer buffer ( &byteArray );
101
+ image.save ( &buffer, " PNG" );
102
+ QString base64 = QString::fromLatin1 ( byteArray.toBase64 ().data () );
103
+ json[ " symbol" ] = base64;
104
+ }
92
105
93
106
QSizeF QgsLayerTreeModelLegendNode::drawSymbolText ( const QgsLegendSettings &settings, ItemContext *ctx, QSizeF symbolSize ) const
94
107
{
@@ -134,7 +147,7 @@ QSizeF QgsLayerTreeModelLegendNode::drawSymbolText( const QgsLegendSettings &set
134
147
return labelSize;
135
148
}
136
149
137
- void QgsLayerTreeModelLegendNode::drawSymbolText ( const QgsLegendSettings &settings , QJsonObject &json ) const
150
+ void QgsLayerTreeModelLegendNode::drawSymbolText ( const QgsLegendSettings &, QJsonObject &json ) const
138
151
{
139
152
QgsExpressionContext tempContext;
140
153
const QString text = data ( Qt::DisplayRole ).toString ();
@@ -502,6 +515,40 @@ QSizeF QgsSymbolLegendNode::drawSymbol( const QgsLegendSettings &settings, ItemC
502
515
std::max ( height + 2 * heightOffset, static_cast < double >( settings.symbolSize ().height () ) ) );
503
516
}
504
517
518
+ void QgsSymbolLegendNode::drawSymbol ( const QgsLegendSettings &settings, QJsonObject &json ) const
519
+ {
520
+ QgsSymbol *s = mItem .symbol ();
521
+ if ( !s )
522
+ {
523
+ return ;
524
+ }
525
+
526
+ QgsRenderContext context;
527
+ context.setScaleFactor ( settings.dpi () / 25.4 );
528
+ context.setRendererScale ( settings.mapScale () );
529
+ context.setMapToPixel ( QgsMapToPixel ( 1 / ( settings.mmPerMapUnit () * context.scaleFactor () ) ) );
530
+ context.setForceVectorOutput ( true );
531
+
532
+ // setup a minimal expression context
533
+ QgsExpressionContext expContext;
534
+ expContext.appendScopes ( QgsExpressionContextUtils::globalProjectLayerScopes ( nullptr ) );
535
+ context.setExpressionContext ( expContext );
536
+
537
+ QImage tempImage = QImage ( minimumIconSize (), QImage::Format_ARGB32 );
538
+ tempImage.fill ( Qt::transparent );
539
+ QPainter imagePainter ( &tempImage );
540
+ imagePainter.setRenderHint ( QPainter::Antialiasing );
541
+ context.setPainter ( &imagePainter );
542
+
543
+ QPixmap pix = QgsSymbolLayerUtils::symbolPreviewPixmap ( mItem .symbol (), minimumIconSize (), 0 , &context );
544
+
545
+ QByteArray byteArray;
546
+ QBuffer buffer ( &byteArray );
547
+ QImage img ( pix.toImage ().convertToFormat ( QImage::Format_ARGB32_Premultiplied ) );
548
+ img.save ( &buffer, " PNG" );
549
+ QString base64 = QString::fromLatin1 ( byteArray.toBase64 ().data () );
550
+ json[ " icon" ] = base64;
551
+ }
505
552
506
553
void QgsSymbolLegendNode::setEmbeddedInParent ( bool embedded )
507
554
{
@@ -610,6 +657,10 @@ QSizeF QgsImageLegendNode::drawSymbol( const QgsLegendSettings &settings, ItemCo
610
657
return settings.wmsLegendSize ();
611
658
}
612
659
660
+ void QgsImageLegendNode::drawSymbol ( const QgsLegendSettings &, QJsonObject & ) const
661
+ {
662
+ }
663
+
613
664
// -------------------------------------------------------------------------
614
665
615
666
QgsRasterSymbolLegendNode::QgsRasterSymbolLegendNode ( QgsLayerTreeLayer *nodeLayer, const QColor &color, const QString &label, QObject *parent )
@@ -666,6 +717,10 @@ QSizeF QgsRasterSymbolLegendNode::drawSymbol( const QgsLegendSettings &settings,
666
717
return settings.symbolSize ();
667
718
}
668
719
720
+ void QgsRasterSymbolLegendNode::drawSymbol ( const QgsLegendSettings &, QJsonObject & ) const
721
+ {
722
+ }
723
+
669
724
// -------------------------------------------------------------------------
670
725
671
726
QgsWmsLegendNode::QgsWmsLegendNode ( QgsLayerTreeLayer *nodeLayer, QObject *parent )
@@ -734,6 +789,10 @@ QSizeF QgsWmsLegendNode::drawSymbol( const QgsLegendSettings &settings, ItemCont
734
789
return settings.wmsLegendSize ();
735
790
}
736
791
792
+ void QgsWmsLegendNode::drawSymbol ( const QgsLegendSettings &, QJsonObject & ) const
793
+ {
794
+ }
795
+
737
796
/* private */
738
797
QImage QgsWmsLegendNode::renderMessage ( const QString &msg ) const
739
798
{
0 commit comments