@@ -143,6 +143,7 @@ QgsPalLayerSettings::QgsPalLayerSettings()
143143 placementFlags = 0 ;
144144 // textFont = QFont();
145145 textColor = Qt::black;
146+ textTransp = 0 ;
146147 enabled = false ;
147148 priority = 5 ;
148149 obstacle = true ;
@@ -151,6 +152,7 @@ QgsPalLayerSettings::QgsPalLayerSettings()
151152 scaleMax = 0 ;
152153 bufferSize = 1 ;
153154 bufferColor = Qt::white;
155+ bufferTransp = 0 ;
154156 formatNumbers = false ;
155157 decimals = 3 ;
156158 plusSign = false ;
@@ -175,6 +177,7 @@ QgsPalLayerSettings::QgsPalLayerSettings( const QgsPalLayerSettings& s )
175177 placementFlags = s.placementFlags ;
176178 textFont = s.textFont ;
177179 textColor = s.textColor ;
180+ textTransp = s.textTransp ;
178181 enabled = s.enabled ;
179182 priority = s.priority ;
180183 obstacle = s.obstacle ;
@@ -183,6 +186,7 @@ QgsPalLayerSettings::QgsPalLayerSettings( const QgsPalLayerSettings& s )
183186 scaleMax = s.scaleMax ;
184187 bufferSize = s.bufferSize ;
185188 bufferColor = s.bufferColor ;
189+ bufferTransp = s.bufferTransp ;
186190 formatNumbers = s.formatNumbers ;
187191 decimals = s.decimals ;
188192 plusSign = s.plusSign ;
@@ -245,7 +249,7 @@ static void _writeDataDefinedPropertyMap( QgsVectorLayer* layer, const QMap< Qgs
245249 {
246250 return ;
247251 }
248- for ( int i = 0 ; i < 18 ; ++i )
252+ for ( int i = 0 ; i < 20 ; ++i )
249253 {
250254 QMap< QgsPalLayerSettings::DataDefinedProperties, int >::const_iterator it = propertyMap.find (( QgsPalLayerSettings::DataDefinedProperties )i );
251255 QVariant propertyValue;
@@ -303,6 +307,8 @@ static void _readDataDefinedPropertyMap( QgsVectorLayer* layer, QMap< QgsPalLaye
303307 _readDataDefinedProperty ( layer, QgsPalLayerSettings::Show, propertyMap );
304308 _readDataDefinedProperty ( layer, QgsPalLayerSettings::MinScale, propertyMap );
305309 _readDataDefinedProperty ( layer, QgsPalLayerSettings::MaxScale, propertyMap );
310+ _readDataDefinedProperty ( layer, QgsPalLayerSettings::FontTransp, propertyMap );
311+ _readDataDefinedProperty ( layer, QgsPalLayerSettings::BufferTransp, propertyMap );
306312}
307313
308314void QgsPalLayerSettings::readFromLayer ( QgsVectorLayer* layer )
@@ -323,6 +329,7 @@ void QgsPalLayerSettings::readFromLayer( QgsVectorLayer* layer )
323329 textFont.setStrikeOut ( layer->customProperty ( " labeling/fontStrikeout" ).toBool () );
324330 textFont.setPointSizeF ( fontSize ); // double precision needed because of map units
325331 textColor = _readColor ( layer, " labeling/textColor" );
332+ textTransp = layer->customProperty ( " labeling/textTransp" ).toInt ();
326333 enabled = layer->customProperty ( " labeling/enabled" ).toBool ();
327334 priority = layer->customProperty ( " labeling/priority" ).toInt ();
328335 obstacle = layer->customProperty ( " labeling/obstacle" ).toBool ();
@@ -331,6 +338,7 @@ void QgsPalLayerSettings::readFromLayer( QgsVectorLayer* layer )
331338 scaleMax = layer->customProperty ( " labeling/scaleMax" ).toInt ();
332339 bufferSize = layer->customProperty ( " labeling/bufferSize" ).toDouble ();
333340 bufferColor = _readColor ( layer, " labeling/bufferColor" );
341+ bufferTransp = layer->customProperty ( " labeling/bufferTransp" ).toInt ();
334342 formatNumbers = layer->customProperty ( " labeling/formatNumbers" ).toBool ();
335343 decimals = layer->customProperty ( " labeling/decimals" ).toInt ();
336344 plusSign = layer->customProperty ( " labeling/plussign" ).toInt ();
@@ -363,6 +371,7 @@ void QgsPalLayerSettings::writeToLayer( QgsVectorLayer* layer )
363371 layer->setCustomProperty ( " labeling/fontUnderline" , textFont.underline () );
364372
365373 _writeColor ( layer, " labeling/textColor" , textColor );
374+ layer->setCustomProperty ( " labeling/textTransp" , textTransp );
366375 layer->setCustomProperty ( " labeling/enabled" , enabled );
367376 layer->setCustomProperty ( " labeling/priority" , priority );
368377 layer->setCustomProperty ( " labeling/obstacle" , obstacle );
@@ -371,6 +380,7 @@ void QgsPalLayerSettings::writeToLayer( QgsVectorLayer* layer )
371380 layer->setCustomProperty ( " labeling/scaleMax" , scaleMax );
372381 layer->setCustomProperty ( " labeling/bufferSize" , bufferSize );
373382 _writeColor ( layer, " labeling/bufferColor" , bufferColor );
383+ layer->setCustomProperty ( " labeling/bufferTransp" , bufferTransp );
374384 layer->setCustomProperty ( " labeling/formatNumbers" , formatNumbers );
375385 layer->setCustomProperty ( " labeling/decimals" , decimals );
376386 layer->setCustomProperty ( " labeling/plussign" , plusSign );
@@ -1223,8 +1233,10 @@ void QgsPalLabeling::drawLabeling( QgsRenderContext& context )
12231233 const QgsPalLayerSettings& lyr = layer ( layerNameUtf8 );
12241234 QFont fontForLabel = lyr.textFont ;
12251235 QColor fontColor = lyr.textColor ;
1236+ int fontTransp = lyr.textTransp ;
12261237 double bufferSize = lyr.bufferSize ;
12271238 QColor bufferColor = lyr.bufferColor ;
1239+ int bufferTransp = lyr.bufferTransp ;
12281240
12291241 // apply data defined settings for the label
12301242 // font size
@@ -1243,6 +1255,19 @@ void QgsPalLabeling::drawLabeling( QgsRenderContext& context )
12431255 fontColor = lyr.textColor ;
12441256 }
12451257 }
1258+ // font transparency
1259+ QVariant dataDefinedFontTransp = palGeometry->dataDefinedValues ().value ( QgsPalLayerSettings::FontTransp );
1260+ if ( dataDefinedFontTransp.isValid () )
1261+ {
1262+ bool ftOk = false ;
1263+ int ft = dataDefinedFontTransp.toInt ( &ftOk );
1264+ if ( ftOk && ft >= 0 && ft <= 100 )
1265+ {
1266+ fontTransp = ft;
1267+ }
1268+ }
1269+ fontColor.setAlphaF ( ( 100.0 - (double )(fontTransp) ) / 100.0 );
1270+
12461271 // font bold
12471272 QVariant dataDefinedBold = palGeometry->dataDefinedValues ().value ( QgsPalLayerSettings::Bold );
12481273 if ( dataDefinedBold.isValid () )
@@ -1290,6 +1315,18 @@ void QgsPalLabeling::drawLabeling( QgsRenderContext& context )
12901315 bufferColor = lyr.bufferColor ;
12911316 }
12921317 }
1318+ // buffer transparency
1319+ QVariant dataDefinedBufTransp = palGeometry->dataDefinedValues ().value ( QgsPalLayerSettings::BufferTransp );
1320+ if ( dataDefinedBufTransp.isValid () )
1321+ {
1322+ bool btOk = false ;
1323+ int bt = dataDefinedBufTransp.toInt ( &btOk );
1324+ if ( btOk && bt >= 0 && bt <= 100 )
1325+ {
1326+ bufferTransp = bt;
1327+ }
1328+ }
1329+ bufferColor.setAlphaF ( ( 100.0 - (double )(bufferTransp) ) / 100.0 );
12931330
12941331 if ( lyr.bufferSize != 0 )
12951332 drawLabel ( *it, painter, fontForLabel, fontColor, xform, bufferSize, bufferColor, true );
@@ -1482,10 +1519,11 @@ void QgsPalLabeling::drawLabelBuffer( QPainter* p, QString text, const QFont& fo
14821519{
14831520 QPainterPath path;
14841521 path.addText ( 0 , 0 , font, text );
1485- // color.setAlpha( 125 );
14861522 QPen pen ( color );
14871523 pen.setWidthF ( size );
14881524 p->setPen ( pen );
1525+ // TODO: make pref for whether to fill buffer
1526+ // color.setAlpha( 0 );
14891527 p->setBrush ( color );
14901528 p->drawPath ( path );
14911529}
0 commit comments