@@ -115,6 +115,7 @@ void QgsPalLayerSettings::initPropertyDefinitions()
115
115
},
116
116
{ QgsPalLayerSettings::FontSizeUnit, QgsPropertyDefinition ( " FontSizeUnit" , QObject::tr ( " Font size units" ), QgsPropertyDefinition::RenderUnits ) },
117
117
{ QgsPalLayerSettings::FontTransp, QgsPropertyDefinition ( " FontTransp" , QObject::tr ( " Text transparency" ), QgsPropertyDefinition::Transparency ) },
118
+ { QgsPalLayerSettings::FontOpacity, QgsPropertyDefinition ( " FontOpacity" , QObject::tr ( " Text opacity" ), QgsPropertyDefinition::Transparency ) },
118
119
{ QgsPalLayerSettings::FontCase, QgsPropertyDefinition ( " FontCase" , QgsPropertyDefinition::DataTypeString, QObject::tr ( " Font case" ), QObject::tr ( " string " ) + QStringLiteral ( " [<b>NoChange</b>|<b>Upper</b>|<br><b>Lower</b>|<b>Capitalize</b>]" ) ) },
119
120
{ QgsPalLayerSettings::FontLetterSpacing, QgsPropertyDefinition ( " FontLetterSpacing" , QObject::tr ( " Letter spacing" ), QgsPropertyDefinition::Double ) },
120
121
{ QgsPalLayerSettings::FontWordSpacing, QgsPropertyDefinition ( " FontWordSpacing" , QObject::tr ( " Word spacing" ), QgsPropertyDefinition::Double ) },
@@ -135,6 +136,7 @@ void QgsPalLayerSettings::initPropertyDefinitions()
135
136
{ QgsPalLayerSettings::BufferUnit, QgsPropertyDefinition ( " BufferUnit" , QObject::tr ( " Buffer units" ), QgsPropertyDefinition::RenderUnits ) },
136
137
{ QgsPalLayerSettings::BufferColor, QgsPropertyDefinition ( " BufferColor" , QObject::tr ( " Buffer color" ), QgsPropertyDefinition::ColorNoAlpha ) },
137
138
{ QgsPalLayerSettings::BufferTransp, QgsPropertyDefinition ( " BufferTransp" , QObject::tr ( " Buffer transparency" ), QgsPropertyDefinition::Transparency ) },
139
+ { QgsPalLayerSettings::BufferOpacity, QgsPropertyDefinition ( " BufferOpacity" , QObject::tr ( " Buffer opacity" ), QgsPropertyDefinition::Transparency ) },
138
140
{ QgsPalLayerSettings::BufferJoinStyle, QgsPropertyDefinition ( " BufferJoinStyle" , QObject::tr ( " Buffer join style" ), QgsPropertyDefinition::PenJoinStyle ) },
139
141
{ QgsPalLayerSettings::BufferBlendMode, QgsPropertyDefinition ( " BufferBlendMode" , QObject::tr ( " Buffer blend mode" ), QgsPropertyDefinition::BlendMode ) },
140
142
{ QgsPalLayerSettings::ShapeDraw, QgsPropertyDefinition ( " ShapeDraw" , QObject::tr ( " Draw shape" ), QgsPropertyDefinition::Boolean ) },
@@ -154,6 +156,7 @@ void QgsPalLayerSettings::initPropertyDefinitions()
154
156
{ QgsPalLayerSettings::ShapeRadii, QgsPropertyDefinition ( " ShapeRadii" , QObject::tr ( " Shape radii" ), QgsPropertyDefinition::Size2D ) },
155
157
{ QgsPalLayerSettings::ShapeRadiiUnits, QgsPropertyDefinition ( " ShapeRadiiUnits" , QObject::tr ( " Symbol radii units" ), QgsPropertyDefinition::RenderUnits ) },
156
158
{ QgsPalLayerSettings::ShapeTransparency, QgsPropertyDefinition ( " ShapeTransparency" , QObject::tr ( " Shape transparency" ), QgsPropertyDefinition::Transparency ) },
159
+ { QgsPalLayerSettings::ShapeOpacity, QgsPropertyDefinition ( " ShapeOpacity" , QObject::tr ( " Shape opacity" ), QgsPropertyDefinition::Transparency ) },
157
160
{ QgsPalLayerSettings::ShapeBlendMode, QgsPropertyDefinition ( " ShapeBlendMode" , QObject::tr ( " Shape blend mode" ), QgsPropertyDefinition::BlendMode ) },
158
161
{ QgsPalLayerSettings::ShapeFillColor, QgsPropertyDefinition ( " ShapeFillColor" , QObject::tr ( " Shape fill color" ), QgsPropertyDefinition::ColorWithAlpha ) },
159
162
{ QgsPalLayerSettings::ShapeStrokeColor, QgsPropertyDefinition ( " ShapeBorderColor" , QObject::tr ( " Shape stroke color" ), QgsPropertyDefinition::ColorWithAlpha ) },
@@ -171,6 +174,7 @@ void QgsPalLayerSettings::initPropertyDefinitions()
171
174
{ QgsPalLayerSettings::ShadowRadius, QgsPropertyDefinition ( " ShadowRadius" , QObject::tr ( " Shadow blur radius" ), QgsPropertyDefinition::DoublePositive ) },
172
175
{ QgsPalLayerSettings::ShadowRadiusUnits, QgsPropertyDefinition ( " ShadowRadiusUnits" , QObject::tr ( " Shadow blur units" ), QgsPropertyDefinition::RenderUnits ) },
173
176
{ QgsPalLayerSettings::ShadowTransparency, QgsPropertyDefinition ( " ShadowTransparency" , QObject::tr ( " Shadow transparency" ), QgsPropertyDefinition::Transparency ) },
177
+ { QgsPalLayerSettings::ShadowOpacity, QgsPropertyDefinition ( " ShadowOpacity" , QObject::tr ( " Shadow opacity" ), QgsPropertyDefinition::Transparency ) },
174
178
{ QgsPalLayerSettings::ShadowScale, QgsPropertyDefinition ( " ShadowScale" , QObject::tr ( " Shadow scale" ), QgsPropertyDefinition::IntegerPositive ) },
175
179
{ QgsPalLayerSettings::ShadowColor, QgsPropertyDefinition ( " ShadowColor" , QObject::tr ( " Shadow color" ), QgsPropertyDefinition::ColorNoAlpha ) },
176
180
{ QgsPalLayerSettings::ShadowBlendMode, QgsPropertyDefinition ( " ShadowBlendMode" , QObject::tr ( " Shadow blend mode" ), QgsPropertyDefinition::BlendMode ) },
@@ -666,6 +670,27 @@ void QgsPalLayerSettings::readFromLayerCustomProperties( QgsVectorLayer *layer )
666
670
// read QGIS 2.x style data defined properties
667
671
readOldDataDefinedPropertyMap ( layer, nullptr );
668
672
}
673
+ // upgrade older data defined settings
674
+ if ( mDataDefinedProperties .isActive ( FontTransp ) )
675
+ {
676
+ mDataDefinedProperties .setProperty ( FontOpacity, QgsProperty::fromExpression ( QStringLiteral ( " 100 - (%1)" ).arg ( mDataDefinedProperties .property ( FontTransp ).asExpression () ) ) );
677
+ mDataDefinedProperties .setProperty ( FontTransp, QgsProperty () );
678
+ }
679
+ if ( mDataDefinedProperties .isActive ( BufferTransp ) )
680
+ {
681
+ mDataDefinedProperties .setProperty ( BufferOpacity, QgsProperty::fromExpression ( QStringLiteral ( " 100 - (%1)" ).arg ( mDataDefinedProperties .property ( BufferTransp ).asExpression () ) ) );
682
+ mDataDefinedProperties .setProperty ( BufferTransp, QgsProperty () );
683
+ }
684
+ if ( mDataDefinedProperties .isActive ( ShapeTransparency ) )
685
+ {
686
+ mDataDefinedProperties .setProperty ( ShapeOpacity, QgsProperty::fromExpression ( QStringLiteral ( " 100 - (%1)" ).arg ( mDataDefinedProperties .property ( ShapeTransparency ).asExpression () ) ) );
687
+ mDataDefinedProperties .setProperty ( ShapeTransparency, QgsProperty () );
688
+ }
689
+ if ( mDataDefinedProperties .isActive ( ShadowTransparency ) )
690
+ {
691
+ mDataDefinedProperties .setProperty ( ShadowOpacity, QgsProperty::fromExpression ( QStringLiteral ( " 100 - (%1)" ).arg ( mDataDefinedProperties .property ( ShadowTransparency ).asExpression () ) ) );
692
+ mDataDefinedProperties .setProperty ( ShadowTransparency, QgsProperty () );
693
+ }
669
694
}
670
695
671
696
void QgsPalLayerSettings::readXml ( QDomElement &elem, const QgsReadWriteContext &context )
@@ -785,14 +810,33 @@ void QgsPalLayerSettings::readXml( QDomElement &elem, const QgsReadWriteContext
785
810
QDomElement ddElem = elem.firstChildElement ( QStringLiteral ( " data-defined" ) );
786
811
readOldDataDefinedPropertyMap ( nullptr , &ddElem );
787
812
}
813
+ // upgrade older data defined settings
814
+ if ( mDataDefinedProperties .isActive ( FontTransp ) )
815
+ {
816
+ mDataDefinedProperties .setProperty ( FontOpacity, QgsProperty::fromExpression ( QStringLiteral ( " 100 - (%1)" ).arg ( mDataDefinedProperties .property ( FontTransp ).asExpression () ) ) );
817
+ mDataDefinedProperties .setProperty ( FontTransp, QgsProperty () );
818
+ }
819
+ if ( mDataDefinedProperties .isActive ( BufferTransp ) )
820
+ {
821
+ mDataDefinedProperties .setProperty ( BufferOpacity, QgsProperty::fromExpression ( QStringLiteral ( " 100 - (%1)" ).arg ( mDataDefinedProperties .property ( BufferTransp ).asExpression () ) ) );
822
+ mDataDefinedProperties .setProperty ( BufferTransp, QgsProperty () );
823
+ }
824
+ if ( mDataDefinedProperties .isActive ( ShapeTransparency ) )
825
+ {
826
+ mDataDefinedProperties .setProperty ( ShapeOpacity, QgsProperty::fromExpression ( QStringLiteral ( " 100 - (%1)" ).arg ( mDataDefinedProperties .property ( ShapeTransparency ).asExpression () ) ) );
827
+ mDataDefinedProperties .setProperty ( ShapeTransparency, QgsProperty () );
828
+ }
829
+ if ( mDataDefinedProperties .isActive ( ShadowTransparency ) )
830
+ {
831
+ mDataDefinedProperties .setProperty ( ShadowOpacity, QgsProperty::fromExpression ( QStringLiteral ( " 100 - (%1)" ).arg ( mDataDefinedProperties .property ( ShadowTransparency ).asExpression () ) ) );
832
+ mDataDefinedProperties .setProperty ( ShadowTransparency, QgsProperty () );
833
+ }
788
834
}
789
835
790
836
791
837
792
838
QDomElement QgsPalLayerSettings::writeXml ( QDomDocument &doc, const QgsReadWriteContext &context )
793
839
{
794
-
795
-
796
840
QDomElement textStyleElem = mFormat .writeXml ( doc, context );
797
841
798
842
// text style
@@ -1976,10 +2020,10 @@ bool QgsPalLayerSettings::dataDefinedValEval( DataDefinedValueType valType,
1976
2020
}
1977
2021
return false ;
1978
2022
}
1979
- case DDTransparency :
2023
+ case DDOpacity :
1980
2024
{
1981
2025
bool ok;
1982
- int size = exprVal.toInt ( &ok );
2026
+ int size = exprVal.toDouble ( &ok );
1983
2027
if ( ok && size >= 0 && size <= 100 )
1984
2028
{
1985
2029
dataDefinedValues.insert ( p, QVariant ( size ) );
@@ -2200,8 +2244,8 @@ void QgsPalLayerSettings::parseTextStyle( QFont &labelFont,
2200
2244
// data defined font color?
2201
2245
dataDefinedValEval ( DDColor, QgsPalLayerSettings::Color, exprVal, context.expressionContext (), QgsSymbolLayerUtils::encodeColor ( mFormat .color () ) );
2202
2246
2203
- // data defined font transparency ?
2204
- dataDefinedValEval ( DDTransparency , QgsPalLayerSettings::FontTransp , exprVal, context.expressionContext (), 100 - mFormat .opacity () * 100 );
2247
+ // data defined font opacity ?
2248
+ dataDefinedValEval ( DDOpacity , QgsPalLayerSettings::FontOpacity , exprVal, context.expressionContext (), mFormat .opacity () * 100 );
2205
2249
2206
2250
// data defined font blend mode?
2207
2251
dataDefinedValEval ( DDBlendMode, QgsPalLayerSettings::FontBlendMode, exprVal, context.expressionContext () );
@@ -2234,19 +2278,19 @@ void QgsPalLayerSettings::parseTextBuffer( QgsRenderContext &context )
2234
2278
}
2235
2279
2236
2280
// data defined buffer transparency?
2237
- int bufTransp = 100 - buffer.opacity () * 100 ;
2238
- if ( dataDefinedValEval ( DDTransparency , QgsPalLayerSettings::BufferTransp , exprVal, context.expressionContext (), bufTransp ) )
2281
+ double bufferOpacity = buffer.opacity () * 100 ;
2282
+ if ( dataDefinedValEval ( DDOpacity , QgsPalLayerSettings::BufferOpacity , exprVal, context.expressionContext (), bufferOpacity ) )
2239
2283
{
2240
- bufTransp = exprVal.toInt ();
2284
+ bufferOpacity = exprVal.toDouble ();
2241
2285
}
2242
2286
2243
- drawBuffer = ( drawBuffer && bufrSize > 0.0 && bufTransp < 100 );
2287
+ drawBuffer = ( drawBuffer && bufrSize > 0.0 && bufferOpacity > 0 );
2244
2288
2245
2289
if ( !drawBuffer )
2246
2290
{
2247
2291
dataDefinedValues.insert ( QgsPalLayerSettings::BufferDraw, QVariant ( false ) ); // trigger value
2248
2292
dataDefinedValues.remove ( QgsPalLayerSettings::BufferSize );
2249
- dataDefinedValues.remove ( QgsPalLayerSettings::BufferTransp );
2293
+ dataDefinedValues.remove ( QgsPalLayerSettings::BufferOpacity );
2250
2294
return ; // don't bother evaluating values that won't be used
2251
2295
}
2252
2296
@@ -2371,18 +2415,18 @@ void QgsPalLayerSettings::parseShapeBackground( QgsRenderContext &context )
2371
2415
}
2372
2416
2373
2417
// data defined shape transparency?
2374
- int shapeTransp = 100 - background.opacity () * 100 ;
2375
- if ( dataDefinedValEval ( DDTransparency , QgsPalLayerSettings::ShapeTransparency , exprVal, context.expressionContext (), shapeTransp ) )
2418
+ double shapeOpacity = background.opacity () * 100 ;
2419
+ if ( dataDefinedValEval ( DDOpacity , QgsPalLayerSettings::ShapeOpacity , exprVal, context.expressionContext (), shapeOpacity ) )
2376
2420
{
2377
- shapeTransp = exprVal.toInt ();
2421
+ shapeOpacity = 100.0 * exprVal.toDouble ();
2378
2422
}
2379
2423
2380
- drawShape = ( drawShape && shapeTransp < 100 ); // size is not taken into account (could be)
2424
+ drawShape = ( drawShape && shapeOpacity > 0 ); // size is not taken into account (could be)
2381
2425
2382
2426
if ( !drawShape )
2383
2427
{
2384
2428
dataDefinedValues.insert ( QgsPalLayerSettings::ShapeDraw, QVariant ( false ) ); // trigger value
2385
- dataDefinedValues.remove ( QgsPalLayerSettings::ShapeTransparency );
2429
+ dataDefinedValues.remove ( QgsPalLayerSettings::ShapeOpacity );
2386
2430
return ; // don't bother evaluating values that won't be used
2387
2431
}
2388
2432
@@ -2490,7 +2534,7 @@ void QgsPalLayerSettings::parseShapeBackground( QgsRenderContext &context )
2490
2534
if ( skip )
2491
2535
{
2492
2536
dataDefinedValues.insert ( QgsPalLayerSettings::ShapeDraw, QVariant ( false ) ); // trigger value
2493
- dataDefinedValues.remove ( QgsPalLayerSettings::ShapeTransparency );
2537
+ dataDefinedValues.remove ( QgsPalLayerSettings::ShapeOpacity );
2494
2538
dataDefinedValues.remove ( QgsPalLayerSettings::ShapeKind );
2495
2539
dataDefinedValues.remove ( QgsPalLayerSettings::ShapeSVGFile );
2496
2540
dataDefinedValues.remove ( QgsPalLayerSettings::ShapeSizeX );
@@ -2579,10 +2623,10 @@ void QgsPalLayerSettings::parseDropShadow( QgsRenderContext &context )
2579
2623
}
2580
2624
2581
2625
// data defined shadow transparency?
2582
- int shadowTransp = 100 - shadow.opacity () * 100 ;
2583
- if ( dataDefinedValEval ( DDTransparency , QgsPalLayerSettings::ShadowTransparency , exprVal, context.expressionContext (), shadowTransp ) )
2626
+ double shadowOpacity = shadow.opacity () * 100 ;
2627
+ if ( dataDefinedValEval ( DDOpacity , QgsPalLayerSettings::ShadowOpacity , exprVal, context.expressionContext (), shadowOpacity ) )
2584
2628
{
2585
- shadowTransp = exprVal.toInt ();
2629
+ shadowOpacity = exprVal.toDouble ();
2586
2630
}
2587
2631
2588
2632
// data defined shadow offset distance?
@@ -2599,12 +2643,12 @@ void QgsPalLayerSettings::parseDropShadow( QgsRenderContext &context )
2599
2643
shadowRad = exprVal.toDouble ();
2600
2644
}
2601
2645
2602
- drawShadow = ( drawShadow && shadowTransp < 100 && !( shadowOffDist == 0.0 && shadowRad == 0.0 ) );
2646
+ drawShadow = ( drawShadow && shadowOpacity > 0 && !( shadowOffDist == 0.0 && shadowRad == 0.0 ) );
2603
2647
2604
2648
if ( !drawShadow )
2605
2649
{
2606
2650
dataDefinedValues.insert ( QgsPalLayerSettings::ShadowDraw, QVariant ( false ) ); // trigger value
2607
- dataDefinedValues.remove ( QgsPalLayerSettings::ShadowTransparency );
2651
+ dataDefinedValues.remove ( QgsPalLayerSettings::ShadowOpacity );
2608
2652
dataDefinedValues.remove ( QgsPalLayerSettings::ShadowOffsetDist );
2609
2653
dataDefinedValues.remove ( QgsPalLayerSettings::ShadowRadius );
2610
2654
return ; // don't bother evaluating values that won't be used
@@ -2861,9 +2905,9 @@ void QgsPalLabeling::dataDefinedTextStyle( QgsPalLayerSettings &tmpLyr,
2861
2905
}
2862
2906
2863
2907
// font transparency
2864
- if ( ddValues.contains ( QgsPalLayerSettings::FontTransp ) )
2908
+ if ( ddValues.contains ( QgsPalLayerSettings::FontOpacity ) )
2865
2909
{
2866
- format.setOpacity ( 1.0 - ddValues.value ( QgsPalLayerSettings::FontTransp ).toInt () / 100.0 );
2910
+ format.setOpacity ( ddValues.value ( QgsPalLayerSettings::FontOpacity ).toDouble () / 100.0 );
2867
2911
changed = true ;
2868
2912
}
2869
2913
@@ -2968,10 +3012,10 @@ void QgsPalLabeling::dataDefinedTextBuffer( QgsPalLayerSettings &tmpLyr,
2968
3012
changed = true ;
2969
3013
}
2970
3014
2971
- // buffer transparency
2972
- if ( ddValues.contains ( QgsPalLayerSettings::BufferTransp ) )
3015
+ // buffer opacity
3016
+ if ( ddValues.contains ( QgsPalLayerSettings::BufferOpacity ) )
2973
3017
{
2974
- buffer.setOpacity ( 1.0 - ddValues.value ( QgsPalLayerSettings::BufferTransp ).toInt () / 100.0 );
3018
+ buffer.setOpacity ( ddValues.value ( QgsPalLayerSettings::BufferOpacity ).toDouble () / 100.0 );
2975
3019
changed = true ;
2976
3020
}
2977
3021
@@ -3132,9 +3176,9 @@ void QgsPalLabeling::dataDefinedShapeBackground( QgsPalLayerSettings &tmpLyr,
3132
3176
changed = true ;
3133
3177
}
3134
3178
3135
- if ( ddValues.contains ( QgsPalLayerSettings::ShapeTransparency ) )
3179
+ if ( ddValues.contains ( QgsPalLayerSettings::ShapeOpacity ) )
3136
3180
{
3137
- background.setOpacity ( 1.0 - ddValues.value ( QgsPalLayerSettings::ShapeTransparency ).toInt () / 100.0 );
3181
+ background.setOpacity ( ddValues.value ( QgsPalLayerSettings::ShapeOpacity ).toDouble () / 100.0 );
3138
3182
changed = true ;
3139
3183
}
3140
3184
@@ -3231,9 +3275,9 @@ void QgsPalLabeling::dataDefinedDropShadow( QgsPalLayerSettings &tmpLyr,
3231
3275
changed = true ;
3232
3276
}
3233
3277
3234
- if ( ddValues.contains ( QgsPalLayerSettings::ShadowTransparency ) )
3278
+ if ( ddValues.contains ( QgsPalLayerSettings::ShadowOpacity ) )
3235
3279
{
3236
- shadow.setOpacity ( 1.0 - ddValues.value ( QgsPalLayerSettings::ShadowTransparency ).toInt () / 100.0 );
3280
+ shadow.setOpacity ( ddValues.value ( QgsPalLayerSettings::ShadowOpacity ).toDouble () / 100.0 );
3237
3281
changed = true ;
3238
3282
}
3239
3283
0 commit comments