@@ -143,6 +143,7 @@ QgsPalLayerSettings::QgsPalLayerSettings()
143
143
placementFlags = 0 ;
144
144
// textFont = QFont();
145
145
textColor = Qt::black;
146
+ textTransp = 0 ;
146
147
enabled = false ;
147
148
priority = 5 ;
148
149
obstacle = true ;
@@ -151,6 +152,7 @@ QgsPalLayerSettings::QgsPalLayerSettings()
151
152
scaleMax = 0 ;
152
153
bufferSize = 1 ;
153
154
bufferColor = Qt::white;
155
+ bufferTransp = 0 ;
154
156
formatNumbers = false ;
155
157
decimals = 3 ;
156
158
plusSign = false ;
@@ -175,6 +177,7 @@ QgsPalLayerSettings::QgsPalLayerSettings( const QgsPalLayerSettings& s )
175
177
placementFlags = s.placementFlags ;
176
178
textFont = s.textFont ;
177
179
textColor = s.textColor ;
180
+ textTransp = s.textTransp ;
178
181
enabled = s.enabled ;
179
182
priority = s.priority ;
180
183
obstacle = s.obstacle ;
@@ -183,6 +186,7 @@ QgsPalLayerSettings::QgsPalLayerSettings( const QgsPalLayerSettings& s )
183
186
scaleMax = s.scaleMax ;
184
187
bufferSize = s.bufferSize ;
185
188
bufferColor = s.bufferColor ;
189
+ bufferTransp = s.bufferTransp ;
186
190
formatNumbers = s.formatNumbers ;
187
191
decimals = s.decimals ;
188
192
plusSign = s.plusSign ;
@@ -245,7 +249,7 @@ static void _writeDataDefinedPropertyMap( QgsVectorLayer* layer, const QMap< Qgs
245
249
{
246
250
return ;
247
251
}
248
- for ( int i = 0 ; i < 18 ; ++i )
252
+ for ( int i = 0 ; i < 20 ; ++i )
249
253
{
250
254
QMap< QgsPalLayerSettings::DataDefinedProperties, int >::const_iterator it = propertyMap.find (( QgsPalLayerSettings::DataDefinedProperties )i );
251
255
QVariant propertyValue;
@@ -303,6 +307,8 @@ static void _readDataDefinedPropertyMap( QgsVectorLayer* layer, QMap< QgsPalLaye
303
307
_readDataDefinedProperty ( layer, QgsPalLayerSettings::Show, propertyMap );
304
308
_readDataDefinedProperty ( layer, QgsPalLayerSettings::MinScale, propertyMap );
305
309
_readDataDefinedProperty ( layer, QgsPalLayerSettings::MaxScale, propertyMap );
310
+ _readDataDefinedProperty ( layer, QgsPalLayerSettings::FontTransp, propertyMap );
311
+ _readDataDefinedProperty ( layer, QgsPalLayerSettings::BufferTransp, propertyMap );
306
312
}
307
313
308
314
void QgsPalLayerSettings::readFromLayer ( QgsVectorLayer* layer )
@@ -323,6 +329,7 @@ void QgsPalLayerSettings::readFromLayer( QgsVectorLayer* layer )
323
329
textFont.setStrikeOut ( layer->customProperty ( " labeling/fontStrikeout" ).toBool () );
324
330
textFont.setPointSizeF ( fontSize ); // double precision needed because of map units
325
331
textColor = _readColor ( layer, " labeling/textColor" );
332
+ textTransp = layer->customProperty ( " labeling/textTransp" ).toInt ();
326
333
enabled = layer->customProperty ( " labeling/enabled" ).toBool ();
327
334
priority = layer->customProperty ( " labeling/priority" ).toInt ();
328
335
obstacle = layer->customProperty ( " labeling/obstacle" ).toBool ();
@@ -331,6 +338,7 @@ void QgsPalLayerSettings::readFromLayer( QgsVectorLayer* layer )
331
338
scaleMax = layer->customProperty ( " labeling/scaleMax" ).toInt ();
332
339
bufferSize = layer->customProperty ( " labeling/bufferSize" ).toDouble ();
333
340
bufferColor = _readColor ( layer, " labeling/bufferColor" );
341
+ bufferTransp = layer->customProperty ( " labeling/bufferTransp" ).toInt ();
334
342
formatNumbers = layer->customProperty ( " labeling/formatNumbers" ).toBool ();
335
343
decimals = layer->customProperty ( " labeling/decimals" ).toInt ();
336
344
plusSign = layer->customProperty ( " labeling/plussign" ).toInt ();
@@ -363,6 +371,7 @@ void QgsPalLayerSettings::writeToLayer( QgsVectorLayer* layer )
363
371
layer->setCustomProperty ( " labeling/fontUnderline" , textFont.underline () );
364
372
365
373
_writeColor ( layer, " labeling/textColor" , textColor );
374
+ layer->setCustomProperty ( " labeling/textTransp" , textTransp );
366
375
layer->setCustomProperty ( " labeling/enabled" , enabled );
367
376
layer->setCustomProperty ( " labeling/priority" , priority );
368
377
layer->setCustomProperty ( " labeling/obstacle" , obstacle );
@@ -371,6 +380,7 @@ void QgsPalLayerSettings::writeToLayer( QgsVectorLayer* layer )
371
380
layer->setCustomProperty ( " labeling/scaleMax" , scaleMax );
372
381
layer->setCustomProperty ( " labeling/bufferSize" , bufferSize );
373
382
_writeColor ( layer, " labeling/bufferColor" , bufferColor );
383
+ layer->setCustomProperty ( " labeling/bufferTransp" , bufferTransp );
374
384
layer->setCustomProperty ( " labeling/formatNumbers" , formatNumbers );
375
385
layer->setCustomProperty ( " labeling/decimals" , decimals );
376
386
layer->setCustomProperty ( " labeling/plussign" , plusSign );
@@ -1223,8 +1233,10 @@ void QgsPalLabeling::drawLabeling( QgsRenderContext& context )
1223
1233
const QgsPalLayerSettings& lyr = layer ( layerNameUtf8 );
1224
1234
QFont fontForLabel = lyr.textFont ;
1225
1235
QColor fontColor = lyr.textColor ;
1236
+ int fontTransp = lyr.textTransp ;
1226
1237
double bufferSize = lyr.bufferSize ;
1227
1238
QColor bufferColor = lyr.bufferColor ;
1239
+ int bufferTransp = lyr.bufferTransp ;
1228
1240
1229
1241
// apply data defined settings for the label
1230
1242
// font size
@@ -1243,6 +1255,19 @@ void QgsPalLabeling::drawLabeling( QgsRenderContext& context )
1243
1255
fontColor = lyr.textColor ;
1244
1256
}
1245
1257
}
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
+
1246
1271
// font bold
1247
1272
QVariant dataDefinedBold = palGeometry->dataDefinedValues ().value ( QgsPalLayerSettings::Bold );
1248
1273
if ( dataDefinedBold.isValid () )
@@ -1290,6 +1315,18 @@ void QgsPalLabeling::drawLabeling( QgsRenderContext& context )
1290
1315
bufferColor = lyr.bufferColor ;
1291
1316
}
1292
1317
}
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 );
1293
1330
1294
1331
if ( lyr.bufferSize != 0 )
1295
1332
drawLabel ( *it, painter, fontForLabel, fontColor, xform, bufferSize, bufferColor, true );
@@ -1482,10 +1519,11 @@ void QgsPalLabeling::drawLabelBuffer( QPainter* p, QString text, const QFont& fo
1482
1519
{
1483
1520
QPainterPath path;
1484
1521
path.addText ( 0 , 0 , font, text );
1485
- // color.setAlpha( 125 );
1486
1522
QPen pen ( color );
1487
1523
pen.setWidthF ( size );
1488
1524
p->setPen ( pen );
1525
+ // TODO: make pref for whether to fill buffer
1526
+ // color.setAlpha( 0 );
1489
1527
p->setBrush ( color );
1490
1528
p->drawPath ( path );
1491
1529
}
0 commit comments