LCOV - code coverage report
Current view: top level - core/textrenderer - qgstextmasksettings.cpp (source / functions) Hit Total Coverage
Test: coverage.info.cleaned Lines: 4 135 3.0 %
Date: 2021-03-26 12:19:53 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /***************************************************************************
       2                 :            :   qgstextmasksettings.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 "qgstextmasksettings.h"
      17                 :            : #include "qgstextrenderer_p.h"
      18                 :            : #include "qgspallabeling.h"
      19                 :            : #include "qgssymbollayerutils.h"
      20                 :            : #include "qgspainteffectregistry.h"
      21                 :            : 
      22                 :         78 : QgsTextMaskSettings::QgsTextMaskSettings()
      23                 :            : {
      24                 :         78 :   d = new QgsTextMaskSettingsPrivate();
      25                 :         78 : }
      26                 :            : 
      27                 :         62 : QgsTextMaskSettings::~QgsTextMaskSettings() = default;
      28                 :            : 
      29                 :          0 : QgsTextMaskSettings::QgsTextMaskSettings( const QgsTextMaskSettings &other ) //NOLINT
      30                 :          0 :   : d( other.d )
      31                 :            : {
      32                 :          0 : }
      33                 :            : 
      34                 :          0 : QgsTextMaskSettings &QgsTextMaskSettings::operator=( const QgsTextMaskSettings &other )  //NOLINT
      35                 :            : {
      36                 :          0 :   d = other.d;
      37                 :          0 :   return *this;
      38                 :            : }
      39                 :            : 
      40                 :          0 : bool QgsTextMaskSettings::operator==( const QgsTextMaskSettings &other ) const
      41                 :            : {
      42                 :          0 :   if ( d->enabled != other.enabled()
      43                 :          0 :        || d->type != other.type()
      44                 :          0 :        || d->size != other.size()
      45                 :          0 :        || d->sizeUnit != other.sizeUnit()
      46                 :          0 :        || d->sizeMapUnitScale != other.sizeMapUnitScale()
      47                 :          0 :        || d->joinStyle != other.joinStyle()
      48                 :          0 :        || d->opacity != other.opacity()
      49                 :          0 :        || d->maskedSymbolLayers != other.maskedSymbolLayers() )
      50                 :          0 :     return false;
      51                 :            : 
      52                 :          0 :   if ( static_cast< bool >( d->paintEffect ) != static_cast< bool >( other.paintEffect() )
      53                 :          0 :        || ( d->paintEffect && d->paintEffect->properties() != other.paintEffect()->properties() ) )
      54                 :          0 :     return false;
      55                 :            : 
      56                 :          0 :   return true;
      57                 :          0 : }
      58                 :            : 
      59                 :          0 : bool QgsTextMaskSettings::operator!=( const QgsTextMaskSettings &other ) const
      60                 :            : {
      61                 :          0 :   return !( *this == other );
      62                 :            : }
      63                 :            : 
      64                 :          0 : bool QgsTextMaskSettings::enabled() const
      65                 :            : {
      66                 :          0 :   return d->enabled;
      67                 :            : }
      68                 :            : 
      69                 :          0 : void QgsTextMaskSettings::setEnabled( bool enabled )
      70                 :            : {
      71                 :          0 :   d->enabled = enabled;
      72                 :          0 : }
      73                 :            : 
      74                 :          0 : QgsTextMaskSettings::MaskType QgsTextMaskSettings::type() const
      75                 :            : {
      76                 :          0 :   return d->type;
      77                 :            : }
      78                 :            : 
      79                 :          0 : void QgsTextMaskSettings::setType( QgsTextMaskSettings::MaskType type )
      80                 :            : {
      81                 :          0 :   d->type = type;
      82                 :          0 : }
      83                 :            : 
      84                 :            : 
      85                 :          0 : double QgsTextMaskSettings::size() const
      86                 :            : {
      87                 :          0 :   return d->size;
      88                 :            : }
      89                 :            : 
      90                 :          0 : void QgsTextMaskSettings::setSize( double size )
      91                 :            : {
      92                 :          0 :   d->size = size;
      93                 :          0 : }
      94                 :            : 
      95                 :          0 : QgsUnitTypes::RenderUnit QgsTextMaskSettings::sizeUnit() const
      96                 :            : {
      97                 :          0 :   return d->sizeUnit;
      98                 :            : }
      99                 :            : 
     100                 :          0 : void QgsTextMaskSettings::setSizeUnit( QgsUnitTypes::RenderUnit unit )
     101                 :            : {
     102                 :          0 :   d->sizeUnit = unit;
     103                 :          0 : }
     104                 :            : 
     105                 :          0 : QgsMapUnitScale QgsTextMaskSettings::sizeMapUnitScale() const
     106                 :            : {
     107                 :          0 :   return d->sizeMapUnitScale;
     108                 :            : }
     109                 :            : 
     110                 :          0 : void QgsTextMaskSettings::setSizeMapUnitScale( const QgsMapUnitScale &scale )
     111                 :            : {
     112                 :          0 :   d->sizeMapUnitScale = scale;
     113                 :          0 : }
     114                 :            : 
     115                 :          0 : Qt::PenJoinStyle QgsTextMaskSettings::joinStyle() const
     116                 :            : {
     117                 :          0 :   return d->joinStyle;
     118                 :            : }
     119                 :            : 
     120                 :          0 : void QgsTextMaskSettings::setJoinStyle( Qt::PenJoinStyle style )
     121                 :            : {
     122                 :          0 :   d->joinStyle = style;
     123                 :          0 : }
     124                 :            : 
     125                 :          0 : double QgsTextMaskSettings::opacity() const
     126                 :            : {
     127                 :          0 :   return d->opacity;
     128                 :            : }
     129                 :            : 
     130                 :          0 : void QgsTextMaskSettings::setOpacity( double opacity )
     131                 :            : {
     132                 :          0 :   d->opacity = opacity;
     133                 :          0 : }
     134                 :            : 
     135                 :          0 : QgsPaintEffect *QgsTextMaskSettings::paintEffect() const
     136                 :            : {
     137                 :          0 :   return d->paintEffect.get();
     138                 :            : }
     139                 :            : 
     140                 :          0 : void QgsTextMaskSettings::setPaintEffect( QgsPaintEffect *effect )
     141                 :            : {
     142                 :          0 :   d->paintEffect.reset( effect );
     143                 :          0 : }
     144                 :            : 
     145                 :          0 : void QgsTextMaskSettings::updateDataDefinedProperties( QgsRenderContext &context, const QgsPropertyCollection &properties )
     146                 :            : {
     147                 :          0 :   if ( properties.isActive( QgsPalLayerSettings::MaskEnabled ) )
     148                 :            :   {
     149                 :          0 :     context.expressionContext().setOriginalValueVariable( d->enabled );
     150                 :          0 :     d->enabled = properties.valueAsBool( QgsPalLayerSettings::MaskEnabled, context.expressionContext(), d->enabled );
     151                 :          0 :   }
     152                 :            : 
     153                 :          0 :   if ( properties.isActive( QgsPalLayerSettings::MaskBufferSize ) )
     154                 :            :   {
     155                 :          0 :     context.expressionContext().setOriginalValueVariable( d->size );
     156                 :          0 :     d->size = properties.valueAsDouble( QgsPalLayerSettings::MaskBufferSize, context.expressionContext(), d->size );
     157                 :          0 :   }
     158                 :            : 
     159                 :          0 :   if ( properties.isActive( QgsPalLayerSettings::MaskBufferUnit ) )
     160                 :            :   {
     161                 :          0 :     QVariant exprVal = properties.value( QgsPalLayerSettings::MaskBufferUnit, context.expressionContext() );
     162                 :          0 :     if ( exprVal.isValid() )
     163                 :            :     {
     164                 :          0 :       QString units = exprVal.toString();
     165                 :          0 :       if ( !units.isEmpty() )
     166                 :            :       {
     167                 :            :         bool ok;
     168                 :          0 :         QgsUnitTypes::RenderUnit res = QgsUnitTypes::decodeRenderUnit( units, &ok );
     169                 :          0 :         if ( ok )
     170                 :          0 :           d->sizeUnit = res;
     171                 :          0 :       }
     172                 :          0 :     }
     173                 :          0 :   }
     174                 :            : 
     175                 :          0 :   if ( properties.isActive( QgsPalLayerSettings::MaskOpacity ) )
     176                 :            :   {
     177                 :          0 :     context.expressionContext().setOriginalValueVariable( d->opacity * 100 );
     178                 :          0 :     d->opacity = properties.value( QgsPalLayerSettings::MaskOpacity, context.expressionContext(), d->opacity * 100 ).toDouble() / 100.0;
     179                 :          0 :   }
     180                 :            : 
     181                 :          0 :   if ( properties.isActive( QgsPalLayerSettings::MaskJoinStyle ) )
     182                 :            :   {
     183                 :          0 :     QVariant exprVal = properties.value( QgsPalLayerSettings::MaskJoinStyle, context.expressionContext() );
     184                 :          0 :     QString joinstr = exprVal.toString().trimmed();
     185                 :          0 :     if ( !joinstr.isEmpty() )
     186                 :            :     {
     187                 :          0 :       d->joinStyle = QgsSymbolLayerUtils::decodePenJoinStyle( joinstr );
     188                 :          0 :     }
     189                 :          0 :   }
     190                 :          0 : }
     191                 :            : 
     192                 :          0 : QSet<QString> QgsTextMaskSettings::referencedFields( const QgsRenderContext & ) const
     193                 :            : {
     194                 :          0 :   return QSet< QString >(); // nothing for now
     195                 :            : }
     196                 :            : 
     197                 :          0 : void QgsTextMaskSettings::readXml( const QDomElement &elem )
     198                 :            : {
     199                 :          0 :   QDomElement textMaskElem = elem.firstChildElement( QStringLiteral( "text-mask" ) );
     200                 :          0 :   d->enabled = textMaskElem.attribute( QStringLiteral( "maskEnabled" ), QStringLiteral( "0" ) ).toInt();
     201                 :          0 :   d->type = static_cast<QgsTextMaskSettings::MaskType>( textMaskElem.attribute( QStringLiteral( "maskType" ), QStringLiteral( "0" ) ).toInt() );
     202                 :          0 :   d->size = textMaskElem.attribute( QStringLiteral( "maskSize" ), QStringLiteral( "0" ) ).toDouble();
     203                 :          0 :   d->sizeUnit = QgsUnitTypes::decodeRenderUnit( textMaskElem.attribute( QStringLiteral( "maskSizeUnits" ) ) );
     204                 :          0 :   d->sizeMapUnitScale = QgsSymbolLayerUtils::decodeMapUnitScale( textMaskElem.attribute( QStringLiteral( "maskSizeMapUnitScale" ) ) );
     205                 :          0 :   d->joinStyle = static_cast< Qt::PenJoinStyle >( textMaskElem.attribute( QStringLiteral( "maskJoinStyle" ), QString::number( Qt::RoundJoin ) ).toUInt() );
     206                 :          0 :   d->opacity = textMaskElem.attribute( QStringLiteral( "maskOpacity" ), QStringLiteral( "1.0" ) ).toDouble();
     207                 :          0 :   QDomElement effectElem = textMaskElem.firstChildElement( QStringLiteral( "effect" ) );
     208                 :          0 :   if ( !effectElem.isNull() )
     209                 :          0 :     setPaintEffect( QgsApplication::paintEffectRegistry()->createEffect( effectElem ) );
     210                 :            :   else
     211                 :          0 :     setPaintEffect( nullptr );
     212                 :          0 :   d->maskedSymbolLayers = stringToSymbolLayerReferenceList( textMaskElem.attribute( QStringLiteral( "maskedSymbolLayers" ) ) );
     213                 :          0 : }
     214                 :            : 
     215                 :          0 : QDomElement QgsTextMaskSettings::writeXml( QDomDocument &doc ) const
     216                 :            : {
     217                 :          0 :   QDomElement textMaskElem = doc.createElement( QStringLiteral( "text-mask" ) );
     218                 :          0 :   textMaskElem.setAttribute( QStringLiteral( "maskEnabled" ), d->enabled );
     219                 :          0 :   textMaskElem.setAttribute( QStringLiteral( "maskType" ), d->type );
     220                 :          0 :   textMaskElem.setAttribute( QStringLiteral( "maskSize" ), d->size );
     221                 :          0 :   textMaskElem.setAttribute( QStringLiteral( "maskSizeUnits" ), QgsUnitTypes::encodeUnit( d->sizeUnit ) );
     222                 :          0 :   textMaskElem.setAttribute( QStringLiteral( "maskSizeMapUnitScale" ), QgsSymbolLayerUtils::encodeMapUnitScale( d->sizeMapUnitScale ) );
     223                 :          0 :   textMaskElem.setAttribute( QStringLiteral( "maskJoinStyle" ), static_cast< unsigned int >( d->joinStyle ) );
     224                 :          0 :   textMaskElem.setAttribute( QStringLiteral( "maskOpacity" ), d->opacity );
     225                 :          0 :   if ( d->paintEffect && !QgsPaintEffectRegistry::isDefaultStack( d->paintEffect.get() ) )
     226                 :          0 :     d->paintEffect->saveProperties( doc, textMaskElem );
     227                 :          0 :   textMaskElem.setAttribute( QStringLiteral( "maskedSymbolLayers" ), symbolLayerReferenceListToString( d->maskedSymbolLayers ) );
     228                 :          0 :   return textMaskElem;
     229                 :          0 : }
     230                 :            : 
     231                 :          0 : QgsSymbolLayerReferenceList QgsTextMaskSettings::maskedSymbolLayers() const
     232                 :            : {
     233                 :          0 :   return d->maskedSymbolLayers;
     234                 :            : }
     235                 :            : 
     236                 :          0 : void QgsTextMaskSettings::setMaskedSymbolLayers( QgsSymbolLayerReferenceList maskedSymbols )
     237                 :            : {
     238                 :          0 :   d->maskedSymbolLayers = maskedSymbols;
     239                 :          0 : }

Generated by: LCOV version 1.14