Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgstextrendererutils.h 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 "qgstextrendererutils.h" 17 : : #include "qgsvectorlayer.h" 18 : : 19 : 0 : QgsTextBackgroundSettings::ShapeType QgsTextRendererUtils::decodeShapeType( const QString &string ) 20 : : { 21 : 0 : QgsTextBackgroundSettings::ShapeType shpkind = QgsTextBackgroundSettings::ShapeRectangle; 22 : 0 : const QString skind = string.trimmed(); 23 : : 24 : 0 : if ( skind.compare( QLatin1String( "Square" ), Qt::CaseInsensitive ) == 0 ) 25 : : { 26 : 0 : shpkind = QgsTextBackgroundSettings::ShapeSquare; 27 : 0 : } 28 : 0 : else if ( skind.compare( QLatin1String( "Ellipse" ), Qt::CaseInsensitive ) == 0 ) 29 : : { 30 : 0 : shpkind = QgsTextBackgroundSettings::ShapeEllipse; 31 : 0 : } 32 : 0 : else if ( skind.compare( QLatin1String( "Circle" ), Qt::CaseInsensitive ) == 0 ) 33 : : { 34 : 0 : shpkind = QgsTextBackgroundSettings::ShapeCircle; 35 : 0 : } 36 : 0 : else if ( skind.compare( QLatin1String( "SVG" ), Qt::CaseInsensitive ) == 0 ) 37 : : { 38 : 0 : shpkind = QgsTextBackgroundSettings::ShapeSVG; 39 : 0 : } 40 : 0 : else if ( skind.compare( QLatin1String( "marker" ), Qt::CaseInsensitive ) == 0 ) 41 : : { 42 : 0 : shpkind = QgsTextBackgroundSettings::ShapeMarkerSymbol; 43 : 0 : } 44 : 0 : return shpkind; 45 : 0 : } 46 : : 47 : 0 : QgsTextBackgroundSettings::SizeType QgsTextRendererUtils::decodeBackgroundSizeType( const QString &string ) 48 : : { 49 : 0 : const QString stype = string.trimmed(); 50 : : // "Buffer" 51 : 0 : QgsTextBackgroundSettings::SizeType sizType = QgsTextBackgroundSettings::SizeBuffer; 52 : : 53 : 0 : if ( stype.compare( QLatin1String( "Fixed" ), Qt::CaseInsensitive ) == 0 ) 54 : : { 55 : 0 : sizType = QgsTextBackgroundSettings::SizeFixed; 56 : 0 : } 57 : 0 : return sizType; 58 : 0 : } 59 : : 60 : 0 : QgsTextBackgroundSettings::RotationType QgsTextRendererUtils::decodeBackgroundRotationType( const QString &string ) 61 : : { 62 : 0 : const QString rotstr = string.trimmed(); 63 : : // "Sync" 64 : 0 : QgsTextBackgroundSettings::RotationType rottype = QgsTextBackgroundSettings::RotationSync; 65 : : 66 : 0 : if ( rotstr.compare( QLatin1String( "Offset" ), Qt::CaseInsensitive ) == 0 ) 67 : : { 68 : 0 : rottype = QgsTextBackgroundSettings::RotationOffset; 69 : 0 : } 70 : 0 : else if ( rotstr.compare( QLatin1String( "Fixed" ), Qt::CaseInsensitive ) == 0 ) 71 : : { 72 : 0 : rottype = QgsTextBackgroundSettings::RotationFixed; 73 : 0 : } 74 : 0 : return rottype; 75 : 0 : } 76 : : 77 : 0 : QgsTextShadowSettings::ShadowPlacement QgsTextRendererUtils::decodeShadowPlacementType( const QString &string ) 78 : : { 79 : 0 : const QString str = string.trimmed(); 80 : : // "Lowest" 81 : 0 : QgsTextShadowSettings::ShadowPlacement shdwtype = QgsTextShadowSettings::ShadowLowest; 82 : : 83 : 0 : if ( str.compare( QLatin1String( "Text" ), Qt::CaseInsensitive ) == 0 ) 84 : : { 85 : 0 : shdwtype = QgsTextShadowSettings::ShadowText; 86 : 0 : } 87 : 0 : else if ( str.compare( QLatin1String( "Buffer" ), Qt::CaseInsensitive ) == 0 ) 88 : : { 89 : 0 : shdwtype = QgsTextShadowSettings::ShadowBuffer; 90 : 0 : } 91 : 0 : else if ( str.compare( QLatin1String( "Background" ), Qt::CaseInsensitive ) == 0 ) 92 : : { 93 : 0 : shdwtype = QgsTextShadowSettings::ShadowShape; 94 : 0 : } 95 : 0 : return shdwtype; 96 : 0 : } 97 : : 98 : 0 : QString QgsTextRendererUtils::encodeTextOrientation( QgsTextFormat::TextOrientation orientation ) 99 : : { 100 : 0 : switch ( orientation ) 101 : : { 102 : : case QgsTextFormat::HorizontalOrientation: 103 : 0 : return QStringLiteral( "horizontal" ); 104 : : case QgsTextFormat::VerticalOrientation: 105 : 0 : return QStringLiteral( "vertical" ); 106 : : case QgsTextFormat::RotationBasedOrientation: 107 : 0 : return QStringLiteral( "rotation-based" ); 108 : : } 109 : 0 : return QString(); 110 : 0 : } 111 : : 112 : 0 : QgsTextFormat::TextOrientation QgsTextRendererUtils::decodeTextOrientation( const QString &name, bool *ok ) 113 : : { 114 : 0 : if ( ok ) 115 : 0 : *ok = true; 116 : : 117 : 0 : QString cleaned = name.toLower().trimmed(); 118 : : 119 : 0 : if ( cleaned == QLatin1String( "horizontal" ) ) 120 : 0 : return QgsTextFormat::HorizontalOrientation; 121 : 0 : else if ( cleaned == QLatin1String( "vertical" ) ) 122 : 0 : return QgsTextFormat::VerticalOrientation; 123 : 0 : else if ( cleaned == QLatin1String( "rotation-based" ) ) 124 : 0 : return QgsTextFormat::RotationBasedOrientation; 125 : : 126 : 0 : if ( ok ) 127 : 0 : *ok = false; 128 : 0 : return QgsTextFormat::HorizontalOrientation; 129 : 0 : } 130 : : 131 : 0 : QgsUnitTypes::RenderUnit QgsTextRendererUtils::convertFromOldLabelUnit( int val ) 132 : : { 133 : 0 : if ( val == 0 ) 134 : 0 : return QgsUnitTypes::RenderPoints; 135 : 0 : else if ( val == 1 ) 136 : 0 : return QgsUnitTypes::RenderMillimeters; 137 : 0 : else if ( val == 2 ) 138 : 0 : return QgsUnitTypes::RenderMapUnits; 139 : 0 : else if ( val == 3 ) 140 : 0 : return QgsUnitTypes::RenderPercentage; 141 : : else 142 : 0 : return QgsUnitTypes::RenderMillimeters; 143 : 0 : } 144 : : 145 : 0 : QColor QgsTextRendererUtils::readColor( QgsVectorLayer *layer, const QString &property, const QColor &defaultColor, bool withAlpha ) 146 : : { 147 : 0 : int r = layer->customProperty( property + 'R', QVariant( defaultColor.red() ) ).toInt(); 148 : 0 : int g = layer->customProperty( property + 'G', QVariant( defaultColor.green() ) ).toInt(); 149 : 0 : int b = layer->customProperty( property + 'B', QVariant( defaultColor.blue() ) ).toInt(); 150 : 0 : int a = withAlpha ? layer->customProperty( property + 'A', QVariant( defaultColor.alpha() ) ).toInt() : 255; 151 : 0 : return QColor( r, g, b, a ); 152 : 0 : }