LCOV - code coverage report
Current view: top level - core/textrenderer - qgstextshadowsettings.cpp (source / functions) Hit Total Coverage
Test: coverage.info.cleaned Lines: 5 268 1.9 %
Date: 2021-04-10 08:29:14 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /***************************************************************************
       2                 :            :   qgstextshadowsettings.cpp
       3                 :            :   -----------------
       4                 :            :    begin                : May 2020
       5                 :            :    copyright            : (C) Nyall Dawson
       6                 :            :    email                : nyall dot dawson at gmail dot com
       7                 :            :  ***************************************************************************
       8                 :            :  *                                                                         *
       9                 :            :  *   This program is free software; you can redistribute it and/or modify  *
      10                 :            :  *   it under the terms of the GNU General Public License as published by  *
      11                 :            :  *   the Free Software Foundation; either version 2 of the License, or     *
      12                 :            :  *   (at your option) any later version.                                   *
      13                 :            :  *                                                                         *
      14                 :            :  ***************************************************************************/
      15                 :            : 
      16                 :            : #include "qgstextshadowsettings.h"
      17                 :            : #include "qgstextrenderer_p.h"
      18                 :            : #include "qgsvectorlayer.h"
      19                 :            : #include "qgssymbollayerutils.h"
      20                 :            : #include "qgspainting.h"
      21                 :            : #include "qgspallabeling.h"
      22                 :            : #include "qgstextrendererutils.h"
      23                 :            : 
      24                 :         78 : QgsTextShadowSettings::QgsTextShadowSettings()
      25                 :            : {
      26                 :         78 :   d = new QgsTextShadowSettingsPrivate();
      27                 :         78 : }
      28                 :            : 
      29                 :          0 : QgsTextShadowSettings::QgsTextShadowSettings( const QgsTextShadowSettings &other ) //NOLINT
      30                 :          0 :   : d( other.d )
      31                 :            : {
      32                 :            : 
      33                 :          0 : }
      34                 :            : 
      35                 :          0 : QgsTextShadowSettings &QgsTextShadowSettings::operator=( const QgsTextShadowSettings &other )  //NOLINT
      36                 :            : {
      37                 :          0 :   d = other.d;
      38                 :          0 :   return *this;
      39                 :            : }
      40                 :            : 
      41                 :         62 : QgsTextShadowSettings::~QgsTextShadowSettings() //NOLINT
      42                 :            : {
      43                 :            : 
      44                 :         62 : }
      45                 :            : 
      46                 :          0 : bool QgsTextShadowSettings::operator==( const QgsTextShadowSettings &other ) const
      47                 :            : {
      48                 :          0 :   if ( d->enabled != other.enabled()
      49                 :          0 :        || d->shadowUnder != other.shadowPlacement()
      50                 :          0 :        || d->offsetAngle != other.offsetAngle()
      51                 :          0 :        || d->offsetDist != other.offsetDistance()
      52                 :          0 :        || d->offsetUnits != other.offsetUnit()
      53                 :          0 :        || d->offsetMapUnitScale != other.offsetMapUnitScale()
      54                 :          0 :        || d->offsetGlobal != other.offsetGlobal()
      55                 :          0 :        || d->radius != other.blurRadius()
      56                 :          0 :        || d->radiusUnits != other.blurRadiusUnit()
      57                 :          0 :        || d->radiusMapUnitScale != other.blurRadiusMapUnitScale()
      58                 :          0 :        || d->radiusAlphaOnly != other.blurAlphaOnly()
      59                 :          0 :        || d->scale != other.scale()
      60                 :          0 :        || d->color != other.color()
      61                 :          0 :        || d->opacity != other.opacity()
      62                 :          0 :        || d->blendMode != other.blendMode() )
      63                 :          0 :     return false;
      64                 :            : 
      65                 :          0 :   return true;
      66                 :          0 : }
      67                 :            : 
      68                 :          0 : bool QgsTextShadowSettings::operator!=( const QgsTextShadowSettings &other ) const
      69                 :            : {
      70                 :          0 :   return !( *this == other );
      71                 :            : }
      72                 :            : 
      73                 :          0 : bool QgsTextShadowSettings::enabled() const
      74                 :            : {
      75                 :          0 :   return d->enabled;
      76                 :            : }
      77                 :            : 
      78                 :          0 : void QgsTextShadowSettings::setEnabled( bool enabled )
      79                 :            : {
      80                 :          0 :   d->enabled = enabled;
      81                 :          0 : }
      82                 :            : 
      83                 :          0 : QgsTextShadowSettings::ShadowPlacement QgsTextShadowSettings::shadowPlacement() const
      84                 :            : {
      85                 :          0 :   return d->shadowUnder;
      86                 :            : }
      87                 :            : 
      88                 :          0 : void QgsTextShadowSettings::setShadowPlacement( QgsTextShadowSettings::ShadowPlacement placement )
      89                 :            : {
      90                 :          0 :   d->shadowUnder = placement;
      91                 :          0 : }
      92                 :            : 
      93                 :          0 : int QgsTextShadowSettings::offsetAngle() const
      94                 :            : {
      95                 :          0 :   return d->offsetAngle;
      96                 :            : }
      97                 :            : 
      98                 :          0 : void QgsTextShadowSettings::setOffsetAngle( int angle )
      99                 :            : {
     100                 :          0 :   d->offsetAngle = angle;
     101                 :          0 : }
     102                 :            : 
     103                 :          0 : double QgsTextShadowSettings::offsetDistance() const
     104                 :            : {
     105                 :          0 :   return d->offsetDist;
     106                 :            : }
     107                 :            : 
     108                 :          0 : void QgsTextShadowSettings::setOffsetDistance( double distance )
     109                 :            : {
     110                 :          0 :   d->offsetDist = distance;
     111                 :          0 : }
     112                 :            : 
     113                 :          0 : QgsUnitTypes::RenderUnit QgsTextShadowSettings::offsetUnit() const
     114                 :            : {
     115                 :          0 :   return d->offsetUnits;
     116                 :            : }
     117                 :            : 
     118                 :          0 : void QgsTextShadowSettings::setOffsetUnit( QgsUnitTypes::RenderUnit units )
     119                 :            : {
     120                 :          0 :   d->offsetUnits = units;
     121                 :          0 : }
     122                 :            : 
     123                 :          0 : QgsMapUnitScale QgsTextShadowSettings::offsetMapUnitScale() const
     124                 :            : {
     125                 :          0 :   return d->offsetMapUnitScale;
     126                 :            : }
     127                 :            : 
     128                 :          0 : void QgsTextShadowSettings::setOffsetMapUnitScale( const QgsMapUnitScale &scale )
     129                 :            : {
     130                 :          0 :   d->offsetMapUnitScale = scale;
     131                 :          0 : }
     132                 :            : 
     133                 :          0 : bool QgsTextShadowSettings::offsetGlobal() const
     134                 :            : {
     135                 :          0 :   return d->offsetGlobal;
     136                 :            : }
     137                 :            : 
     138                 :          0 : void QgsTextShadowSettings::setOffsetGlobal( bool global )
     139                 :            : {
     140                 :          0 :   d->offsetGlobal = global;
     141                 :          0 : }
     142                 :            : 
     143                 :          0 : double QgsTextShadowSettings::blurRadius() const
     144                 :            : {
     145                 :          0 :   return d->radius;
     146                 :            : }
     147                 :            : 
     148                 :          0 : void QgsTextShadowSettings::setBlurRadius( double radius )
     149                 :            : {
     150                 :          0 :   d->radius = radius;
     151                 :          0 : }
     152                 :            : 
     153                 :          0 : QgsUnitTypes::RenderUnit QgsTextShadowSettings::blurRadiusUnit() const
     154                 :            : {
     155                 :          0 :   return d->radiusUnits;
     156                 :            : }
     157                 :            : 
     158                 :          0 : void QgsTextShadowSettings::setBlurRadiusUnit( QgsUnitTypes::RenderUnit units )
     159                 :            : {
     160                 :          0 :   d->radiusUnits = units;
     161                 :          0 : }
     162                 :            : 
     163                 :          0 : QgsMapUnitScale QgsTextShadowSettings::blurRadiusMapUnitScale() const
     164                 :            : {
     165                 :          0 :   return d->radiusMapUnitScale;
     166                 :            : }
     167                 :            : 
     168                 :          0 : void QgsTextShadowSettings::setBlurRadiusMapUnitScale( const QgsMapUnitScale &scale )
     169                 :            : {
     170                 :          0 :   d->radiusMapUnitScale = scale;
     171                 :          0 : }
     172                 :            : 
     173                 :          0 : bool QgsTextShadowSettings::blurAlphaOnly() const
     174                 :            : {
     175                 :          0 :   return d->radiusAlphaOnly;
     176                 :            : }
     177                 :            : 
     178                 :          0 : void QgsTextShadowSettings::setBlurAlphaOnly( bool alphaOnly )
     179                 :            : {
     180                 :          0 :   d->radiusAlphaOnly = alphaOnly;
     181                 :          0 : }
     182                 :            : 
     183                 :          0 : double QgsTextShadowSettings::opacity() const
     184                 :            : {
     185                 :          0 :   return d->opacity;
     186                 :            : }
     187                 :            : 
     188                 :          0 : void QgsTextShadowSettings::setOpacity( double opacity )
     189                 :            : {
     190                 :          0 :   d->opacity = opacity;
     191                 :          0 : }
     192                 :            : 
     193                 :          0 : int QgsTextShadowSettings::scale() const
     194                 :            : {
     195                 :          0 :   return d->scale;
     196                 :            : }
     197                 :            : 
     198                 :          0 : void QgsTextShadowSettings::setScale( int scale )
     199                 :            : {
     200                 :          0 :   d->scale = scale;
     201                 :          0 : }
     202                 :            : 
     203                 :          0 : QColor QgsTextShadowSettings::color() const
     204                 :            : {
     205                 :          0 :   return d->color;
     206                 :            : }
     207                 :            : 
     208                 :          0 : void QgsTextShadowSettings::setColor( const QColor &color )
     209                 :            : {
     210                 :          0 :   d->color = color;
     211                 :          0 : }
     212                 :            : 
     213                 :          0 : QPainter::CompositionMode QgsTextShadowSettings::blendMode() const
     214                 :            : {
     215                 :          0 :   return d->blendMode;
     216                 :            : }
     217                 :            : 
     218                 :          0 : void QgsTextShadowSettings::setBlendMode( QPainter::CompositionMode mode )
     219                 :            : {
     220                 :          0 :   d->blendMode = mode;
     221                 :          0 : }
     222                 :            : 
     223                 :          0 : void QgsTextShadowSettings::readFromLayer( QgsVectorLayer *layer )
     224                 :            : {
     225                 :          0 :   d->enabled = layer->customProperty( QStringLiteral( "labeling/shadowDraw" ), QVariant( false ) ).toBool();
     226                 :          0 :   d->shadowUnder = static_cast< ShadowPlacement >( layer->customProperty( QStringLiteral( "labeling/shadowUnder" ), QVariant( ShadowLowest ) ).toUInt() );//ShadowLowest;
     227                 :          0 :   d->offsetAngle = layer->customProperty( QStringLiteral( "labeling/shadowOffsetAngle" ), QVariant( 135 ) ).toInt();
     228                 :          0 :   d->offsetDist = layer->customProperty( QStringLiteral( "labeling/shadowOffsetDist" ), QVariant( 1.0 ) ).toDouble();
     229                 :            : 
     230                 :          0 :   if ( layer->customProperty( QStringLiteral( "labeling/shadowOffsetUnit" ) ).toString().isEmpty() )
     231                 :            :   {
     232                 :          0 :     d->offsetUnits = QgsTextRendererUtils::convertFromOldLabelUnit( layer->customProperty( QStringLiteral( "labeling/shadowOffsetUnits" ), 0 ).toUInt() );
     233                 :          0 :   }
     234                 :            :   else
     235                 :            :   {
     236                 :          0 :     d->offsetUnits = QgsUnitTypes::decodeRenderUnit( layer->customProperty( QStringLiteral( "labeling/shadowOffsetUnit" ) ).toString() );
     237                 :            :   }
     238                 :          0 :   if ( layer->customProperty( QStringLiteral( "labeling/shadowOffsetMapUnitScale" ) ).toString().isEmpty() )
     239                 :            :   {
     240                 :            :     //fallback to older property
     241                 :          0 :     double oldMin = layer->customProperty( QStringLiteral( "labeling/shadowOffsetMapUnitMinScale" ), 0.0 ).toDouble();
     242                 :          0 :     d->offsetMapUnitScale.minScale = oldMin != 0 ? 1.0 / oldMin : 0;
     243                 :          0 :     double oldMax = layer->customProperty( QStringLiteral( "labeling/shadowOffsetMapUnitMaxScale" ), 0.0 ).toDouble();
     244                 :          0 :     d->offsetMapUnitScale.maxScale = oldMax != 0 ? 1.0 / oldMax : 0;
     245                 :          0 :   }
     246                 :            :   else
     247                 :            :   {
     248                 :          0 :     d->offsetMapUnitScale = QgsSymbolLayerUtils::decodeMapUnitScale( layer->customProperty( QStringLiteral( "labeling/shadowOffsetMapUnitScale" ) ).toString() );
     249                 :            :   }
     250                 :          0 :   d->offsetGlobal = layer->customProperty( QStringLiteral( "labeling/shadowOffsetGlobal" ), QVariant( true ) ).toBool();
     251                 :          0 :   d->radius = layer->customProperty( QStringLiteral( "labeling/shadowRadius" ), QVariant( 1.5 ) ).toDouble();
     252                 :            : 
     253                 :          0 :   if ( layer->customProperty( QStringLiteral( "labeling/shadowRadiusUnit" ) ).toString().isEmpty() )
     254                 :            :   {
     255                 :          0 :     d->radiusUnits = QgsTextRendererUtils::convertFromOldLabelUnit( layer->customProperty( QStringLiteral( "labeling/shadowRadiusUnits" ), 0 ).toUInt() );
     256                 :          0 :   }
     257                 :            :   else
     258                 :            :   {
     259                 :          0 :     d->radiusUnits = QgsUnitTypes::decodeRenderUnit( layer->customProperty( QStringLiteral( "labeling/shadowRadiusUnit" ) ).toString() );
     260                 :            :   }
     261                 :          0 :   if ( layer->customProperty( QStringLiteral( "labeling/shadowRadiusMapUnitScale" ) ).toString().isEmpty() )
     262                 :            :   {
     263                 :            :     //fallback to older property
     264                 :          0 :     double oldMin = layer->customProperty( QStringLiteral( "labeling/shadowRadiusMapUnitMinScale" ), 0.0 ).toDouble();
     265                 :          0 :     d->radiusMapUnitScale.minScale = oldMin != 0 ? 1.0 / oldMin : 0;
     266                 :          0 :     double oldMax = layer->customProperty( QStringLiteral( "labeling/shadowRadiusMapUnitMaxScale" ), 0.0 ).toDouble();
     267                 :          0 :     d->radiusMapUnitScale.maxScale = oldMax != 0 ? 1.0 / oldMax : 0;
     268                 :          0 :   }
     269                 :            :   else
     270                 :            :   {
     271                 :          0 :     d->radiusMapUnitScale = QgsSymbolLayerUtils::decodeMapUnitScale( layer->customProperty( QStringLiteral( "labeling/shadowRadiusMapUnitScale" ) ).toString() );
     272                 :            :   }
     273                 :          0 :   d->radiusAlphaOnly = layer->customProperty( QStringLiteral( "labeling/shadowRadiusAlphaOnly" ), QVariant( false ) ).toBool();
     274                 :            : 
     275                 :          0 :   if ( layer->customProperty( QStringLiteral( "labeling/shadowOpacity" ) ).toString().isEmpty() )
     276                 :            :   {
     277                 :          0 :     d->opacity = ( 1 - layer->customProperty( QStringLiteral( "labeling/shadowTransparency" ) ).toInt() / 100.0 ); //0 -100
     278                 :          0 :   }
     279                 :            :   else
     280                 :            :   {
     281                 :          0 :     d->opacity = ( layer->customProperty( QStringLiteral( "labeling/shadowOpacity" ) ).toDouble() );
     282                 :            :   }
     283                 :          0 :   d->scale = layer->customProperty( QStringLiteral( "labeling/shadowScale" ), QVariant( 100 ) ).toInt();
     284                 :          0 :   d->color = QgsTextRendererUtils::readColor( layer, QStringLiteral( "labeling/shadowColor" ), Qt::black, false );
     285                 :          0 :   d->blendMode = QgsPainting::getCompositionMode(
     286                 :          0 :                    static_cast< QgsPainting::BlendMode >( layer->customProperty( QStringLiteral( "labeling/shadowBlendMode" ), QVariant( QgsPainting::BlendMultiply ) ).toUInt() ) );
     287                 :          0 : }
     288                 :            : 
     289                 :          0 : void QgsTextShadowSettings::readXml( const QDomElement &elem )
     290                 :            : {
     291                 :          0 :   QDomElement shadowElem = elem.firstChildElement( QStringLiteral( "shadow" ) );
     292                 :          0 :   d->enabled = shadowElem.attribute( QStringLiteral( "shadowDraw" ), QStringLiteral( "0" ) ).toInt();
     293                 :          0 :   d->shadowUnder = static_cast< ShadowPlacement >( shadowElem.attribute( QStringLiteral( "shadowUnder" ), QString::number( ShadowLowest ) ).toUInt() );//ShadowLowest;
     294                 :          0 :   d->offsetAngle = shadowElem.attribute( QStringLiteral( "shadowOffsetAngle" ), QStringLiteral( "135" ) ).toInt();
     295                 :          0 :   d->offsetDist = shadowElem.attribute( QStringLiteral( "shadowOffsetDist" ), QStringLiteral( "1" ) ).toDouble();
     296                 :            : 
     297                 :          0 :   if ( !shadowElem.hasAttribute( QStringLiteral( "shadowOffsetUnit" ) ) )
     298                 :            :   {
     299                 :          0 :     d->offsetUnits = QgsTextRendererUtils::convertFromOldLabelUnit( shadowElem.attribute( QStringLiteral( "shadowOffsetUnits" ) ).toUInt() );
     300                 :          0 :   }
     301                 :            :   else
     302                 :            :   {
     303                 :          0 :     d->offsetUnits = QgsUnitTypes::decodeRenderUnit( shadowElem.attribute( QStringLiteral( "shadowOffsetUnit" ) ) );
     304                 :            :   }
     305                 :            : 
     306                 :          0 :   if ( !shadowElem.hasAttribute( QStringLiteral( "shadowOffsetMapUnitScale" ) ) )
     307                 :            :   {
     308                 :            :     //fallback to older property
     309                 :          0 :     double oldMin = shadowElem.attribute( QStringLiteral( "shadowOffsetMapUnitMinScale" ), QStringLiteral( "0" ) ).toDouble();
     310                 :          0 :     d->offsetMapUnitScale.minScale = oldMin != 0 ? 1.0 / oldMin : 0;
     311                 :          0 :     double oldMax = shadowElem.attribute( QStringLiteral( "shadowOffsetMapUnitMaxScale" ), QStringLiteral( "0" ) ).toDouble();
     312                 :          0 :     d->offsetMapUnitScale.maxScale = oldMax != 0 ? 1.0 / oldMax : 0;
     313                 :          0 :   }
     314                 :            :   else
     315                 :            :   {
     316                 :          0 :     d->offsetMapUnitScale = QgsSymbolLayerUtils::decodeMapUnitScale( shadowElem.attribute( QStringLiteral( "shadowOffsetMapUnitScale" ) ) );
     317                 :            :   }
     318                 :          0 :   d->offsetGlobal = shadowElem.attribute( QStringLiteral( "shadowOffsetGlobal" ), QStringLiteral( "1" ) ).toInt();
     319                 :          0 :   d->radius = shadowElem.attribute( QStringLiteral( "shadowRadius" ), QStringLiteral( "1.5" ) ).toDouble();
     320                 :            : 
     321                 :          0 :   if ( !shadowElem.hasAttribute( QStringLiteral( "shadowRadiusUnit" ) ) )
     322                 :            :   {
     323                 :          0 :     d->radiusUnits = QgsTextRendererUtils::convertFromOldLabelUnit( shadowElem.attribute( QStringLiteral( "shadowRadiusUnits" ) ).toUInt() );
     324                 :          0 :   }
     325                 :            :   else
     326                 :            :   {
     327                 :          0 :     d->radiusUnits = QgsUnitTypes::decodeRenderUnit( shadowElem.attribute( QStringLiteral( "shadowRadiusUnit" ) ) );
     328                 :            :   }
     329                 :          0 :   if ( !shadowElem.hasAttribute( QStringLiteral( "shadowRadiusMapUnitScale" ) ) )
     330                 :            :   {
     331                 :            :     //fallback to older property
     332                 :          0 :     double oldMin = shadowElem.attribute( QStringLiteral( "shadowRadiusMapUnitMinScale" ), QStringLiteral( "0" ) ).toDouble();
     333                 :          0 :     d->radiusMapUnitScale.minScale = oldMin != 0 ? 1.0 / oldMin : 0;
     334                 :          0 :     double oldMax = shadowElem.attribute( QStringLiteral( "shadowRadiusMapUnitMaxScale" ), QStringLiteral( "0" ) ).toDouble();
     335                 :          0 :     d->radiusMapUnitScale.maxScale = oldMax != 0 ? 1.0 / oldMax : 0;
     336                 :          0 :   }
     337                 :            :   else
     338                 :            :   {
     339                 :          0 :     d->radiusMapUnitScale = QgsSymbolLayerUtils::decodeMapUnitScale( shadowElem.attribute( QStringLiteral( "shadowRadiusMapUnitScale" ) ) );
     340                 :            :   }
     341                 :          0 :   d->radiusAlphaOnly = shadowElem.attribute( QStringLiteral( "shadowRadiusAlphaOnly" ), QStringLiteral( "0" ) ).toInt();
     342                 :            : 
     343                 :          0 :   if ( !shadowElem.hasAttribute( QStringLiteral( "shadowOpacity" ) ) )
     344                 :            :   {
     345                 :          0 :     d->opacity = ( 1 - shadowElem.attribute( QStringLiteral( "shadowTransparency" ) ).toInt() / 100.0 ); //0 -100
     346                 :          0 :   }
     347                 :            :   else
     348                 :            :   {
     349                 :          0 :     d->opacity = ( shadowElem.attribute( QStringLiteral( "shadowOpacity" ) ).toDouble() );
     350                 :            :   }
     351                 :          0 :   d->scale = shadowElem.attribute( QStringLiteral( "shadowScale" ), QStringLiteral( "100" ) ).toInt();
     352                 :          0 :   d->color = QgsSymbolLayerUtils::decodeColor( shadowElem.attribute( QStringLiteral( "shadowColor" ), QgsSymbolLayerUtils::encodeColor( Qt::black ) ) );
     353                 :          0 :   d->blendMode = QgsPainting::getCompositionMode(
     354                 :          0 :                    static_cast< QgsPainting::BlendMode >( shadowElem.attribute( QStringLiteral( "shadowBlendMode" ), QString::number( QgsPainting::BlendMultiply ) ).toUInt() ) );
     355                 :          0 : }
     356                 :            : 
     357                 :          0 : QDomElement QgsTextShadowSettings::writeXml( QDomDocument &doc ) const
     358                 :            : {
     359                 :          0 :   QDomElement shadowElem = doc.createElement( QStringLiteral( "shadow" ) );
     360                 :          0 :   shadowElem.setAttribute( QStringLiteral( "shadowDraw" ), d->enabled );
     361                 :          0 :   shadowElem.setAttribute( QStringLiteral( "shadowUnder" ), static_cast< unsigned int >( d->shadowUnder ) );
     362                 :          0 :   shadowElem.setAttribute( QStringLiteral( "shadowOffsetAngle" ), d->offsetAngle );
     363                 :          0 :   shadowElem.setAttribute( QStringLiteral( "shadowOffsetDist" ), d->offsetDist );
     364                 :          0 :   shadowElem.setAttribute( QStringLiteral( "shadowOffsetUnit" ), QgsUnitTypes::encodeUnit( d->offsetUnits ) );
     365                 :          0 :   shadowElem.setAttribute( QStringLiteral( "shadowOffsetMapUnitScale" ), QgsSymbolLayerUtils::encodeMapUnitScale( d->offsetMapUnitScale ) );
     366                 :          0 :   shadowElem.setAttribute( QStringLiteral( "shadowOffsetGlobal" ), d->offsetGlobal );
     367                 :          0 :   shadowElem.setAttribute( QStringLiteral( "shadowRadius" ), d->radius );
     368                 :          0 :   shadowElem.setAttribute( QStringLiteral( "shadowRadiusUnit" ), QgsUnitTypes::encodeUnit( d->radiusUnits ) );
     369                 :          0 :   shadowElem.setAttribute( QStringLiteral( "shadowRadiusMapUnitScale" ), QgsSymbolLayerUtils::encodeMapUnitScale( d->radiusMapUnitScale ) );
     370                 :          0 :   shadowElem.setAttribute( QStringLiteral( "shadowRadiusAlphaOnly" ), d->radiusAlphaOnly );
     371                 :          0 :   shadowElem.setAttribute( QStringLiteral( "shadowOpacity" ), d->opacity );
     372                 :          0 :   shadowElem.setAttribute( QStringLiteral( "shadowScale" ), d->scale );
     373                 :          0 :   shadowElem.setAttribute( QStringLiteral( "shadowColor" ), QgsSymbolLayerUtils::encodeColor( d->color ) );
     374                 :          0 :   shadowElem.setAttribute( QStringLiteral( "shadowBlendMode" ), QgsPainting::getBlendModeEnum( d->blendMode ) );
     375                 :          0 :   return shadowElem;
     376                 :          0 : }
     377                 :            : 
     378                 :          0 : void QgsTextShadowSettings::updateDataDefinedProperties( QgsRenderContext &context, const QgsPropertyCollection &properties )
     379                 :            : {
     380                 :          0 :   if ( properties.isActive( QgsPalLayerSettings::ShadowDraw ) )
     381                 :            :   {
     382                 :          0 :     context.expressionContext().setOriginalValueVariable( d->enabled );
     383                 :          0 :     d->enabled = properties.valueAsBool( QgsPalLayerSettings::ShadowDraw, context.expressionContext(), d->enabled );
     384                 :          0 :   }
     385                 :            : 
     386                 :            :   // data defined shadow under type?
     387                 :          0 :   QVariant exprVal = properties.value( QgsPalLayerSettings::ShadowUnder, context.expressionContext() );
     388                 :          0 :   if ( exprVal.isValid() )
     389                 :            :   {
     390                 :          0 :     QString str = exprVal.toString().trimmed();
     391                 :          0 :     if ( !str.isEmpty() )
     392                 :            :     {
     393                 :          0 :       d->shadowUnder = QgsTextRendererUtils::decodeShadowPlacementType( str );
     394                 :          0 :     }
     395                 :          0 :   }
     396                 :            : 
     397                 :          0 :   if ( properties.isActive( QgsPalLayerSettings::ShadowOffsetAngle ) )
     398                 :            :   {
     399                 :          0 :     context.expressionContext().setOriginalValueVariable( d->offsetAngle );
     400                 :          0 :     d->offsetAngle = properties.valueAsInt( QgsPalLayerSettings::ShadowOffsetAngle, context.expressionContext(), d->offsetAngle );
     401                 :          0 :   }
     402                 :          0 :   if ( properties.isActive( QgsPalLayerSettings::ShadowOffsetDist ) )
     403                 :            :   {
     404                 :          0 :     context.expressionContext().setOriginalValueVariable( d->offsetDist );
     405                 :          0 :     d->offsetDist = properties.valueAsDouble( QgsPalLayerSettings::ShadowOffsetDist, context.expressionContext(), d->offsetDist );
     406                 :          0 :   }
     407                 :            : 
     408                 :          0 :   exprVal = properties.value( QgsPalLayerSettings::ShadowOffsetUnits, context.expressionContext() );
     409                 :          0 :   if ( exprVal.isValid() )
     410                 :            :   {
     411                 :          0 :     QString units = exprVal.toString();
     412                 :          0 :     if ( !units.isEmpty() )
     413                 :            :     {
     414                 :            :       bool ok;
     415                 :          0 :       QgsUnitTypes::RenderUnit res = QgsUnitTypes::decodeRenderUnit( units, &ok );
     416                 :          0 :       if ( ok )
     417                 :          0 :         d->offsetUnits = res;
     418                 :          0 :     }
     419                 :          0 :   }
     420                 :            : 
     421                 :          0 :   if ( properties.isActive( QgsPalLayerSettings::ShadowRadius ) )
     422                 :            :   {
     423                 :          0 :     context.expressionContext().setOriginalValueVariable( d->radius );
     424                 :          0 :     d->radius = properties.valueAsDouble( QgsPalLayerSettings::ShadowRadius, context.expressionContext(), d->radius );
     425                 :          0 :   }
     426                 :            : 
     427                 :          0 :   exprVal = properties.value( QgsPalLayerSettings::ShadowRadiusUnits, context.expressionContext() );
     428                 :          0 :   if ( exprVal.isValid() )
     429                 :            :   {
     430                 :          0 :     QString units = exprVal.toString();
     431                 :          0 :     if ( !units.isEmpty() )
     432                 :            :     {
     433                 :            :       bool ok;
     434                 :          0 :       QgsUnitTypes::RenderUnit res = QgsUnitTypes::decodeRenderUnit( units, &ok );
     435                 :          0 :       if ( ok )
     436                 :          0 :         d->radiusUnits = res;
     437                 :          0 :     }
     438                 :          0 :   }
     439                 :            : 
     440                 :          0 :   if ( properties.isActive( QgsPalLayerSettings::ShadowOpacity ) )
     441                 :            :   {
     442                 :          0 :     context.expressionContext().setOriginalValueVariable( d->opacity * 100 );
     443                 :          0 :     d->opacity = properties.value( QgsPalLayerSettings::ShadowOpacity, context.expressionContext(), d->opacity * 100 ).toDouble() / 100.0;
     444                 :          0 :   }
     445                 :            : 
     446                 :          0 :   if ( properties.isActive( QgsPalLayerSettings::ShadowScale ) )
     447                 :            :   {
     448                 :          0 :     context.expressionContext().setOriginalValueVariable( d->scale );
     449                 :          0 :     d->scale = properties.valueAsInt( QgsPalLayerSettings::ShadowScale, context.expressionContext(), d->scale );
     450                 :          0 :   }
     451                 :            : 
     452                 :          0 :   if ( properties.isActive( QgsPalLayerSettings::ShadowColor ) )
     453                 :            :   {
     454                 :          0 :     context.expressionContext().setOriginalValueVariable( QgsSymbolLayerUtils::encodeColor( d->color ) );
     455                 :          0 :     d->color = properties.valueAsColor( QgsPalLayerSettings::ShadowColor, context.expressionContext(), d->color );
     456                 :          0 :   }
     457                 :            : 
     458                 :          0 :   if ( properties.isActive( QgsPalLayerSettings::ShadowBlendMode ) )
     459                 :            :   {
     460                 :          0 :     exprVal = properties.value( QgsPalLayerSettings::ShadowBlendMode, context.expressionContext() );
     461                 :          0 :     QString blendstr = exprVal.toString().trimmed();
     462                 :          0 :     if ( !blendstr.isEmpty() )
     463                 :          0 :       d->blendMode = QgsSymbolLayerUtils::decodeBlendMode( blendstr );
     464                 :          0 :   }
     465                 :          0 : }
     466                 :            : 
     467                 :          0 : QSet<QString> QgsTextShadowSettings::referencedFields( const QgsRenderContext & ) const
     468                 :            : {
     469                 :          0 :   return QSet< QString >(); // nothing for now
     470                 :            : }

Generated by: LCOV version 1.14