25 #include "qgsconfig.h" 
   26 #include <QFontDatabase> 
   30 #if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) 
   31 #include <QDesktopWidget> 
   36   d = 
new QgsTextSettingsPrivate();
 
   40   : mBufferSettings( other.mBufferSettings )
 
   41   , mBackgroundSettings( other.mBackgroundSettings )
 
   42   , mShadowSettings( other.mShadowSettings )
 
   43   , mMaskSettings( other.mMaskSettings )
 
   44   , mTextFontFamily( other.mTextFontFamily )
 
   45   , mTextFontFound( other.mTextFontFound )
 
   54   mBufferSettings = other.mBufferSettings;
 
   55   mBackgroundSettings = other.mBackgroundSettings;
 
   56   mShadowSettings = other.mShadowSettings;
 
   57   mMaskSettings = other.mMaskSettings;
 
   58   mTextFontFamily = other.mTextFontFamily;
 
   59   mTextFontFound = other.mTextFontFound;
 
   70   if ( d->isValid != other.
isValid()
 
   71        || d->textFont != other.
font()
 
   73        || d->fontSizeUnits != other.
sizeUnit()
 
   75        || d->fontSize != other.
size()
 
   76        || d->textColor != other.
color()
 
   77        || d->opacity != other.
opacity()
 
   84        || mBufferSettings != other.mBufferSettings
 
   85        || mBackgroundSettings != other.mBackgroundSettings
 
   86        || mShadowSettings != other.mShadowSettings
 
   87        || mMaskSettings != other.mMaskSettings
 
   97   return !( *
this == other );
 
  113   return mBufferSettings;
 
  119   mBufferSettings = bufferSettings;
 
  125   return mBackgroundSettings;
 
  131   mBackgroundSettings = backgroundSettings;
 
  137   return mShadowSettings;
 
  143   mShadowSettings = shadowSettings;
 
  149   return mMaskSettings;
 
  155   mMaskSettings = maskSettings;
 
  168   QFont 
font = d->textFont;
 
  169   if ( scaleFactor == 1 )
 
  172                         d->fontSizeMapUnitScale );
 
  173     if ( fontPixelSize == 0 )
 
  180     font.setPixelSize( fontPixelSize );
 
  184     double fontPixelSize = context.
convertToPainterUnits( d->fontSize, d->fontSizeUnits, d->fontSizeMapUnitScale );
 
  191     const int roundedPixelSize = 
static_cast< int >( std::round( scaleFactor * fontPixelSize + 0.5 ) );
 
  192     font.setPixelSize( roundedPixelSize );
 
  195   font.setLetterSpacing( QFont::AbsoluteSpacing, context.
convertToPainterUnits( d->textFont.letterSpacing(), d->fontSizeUnits, d->fontSizeMapUnitScale ) * scaleFactor );
 
  196   font.setWordSpacing( context.
convertToPainterUnits( d->textFont.wordSpacing(), d->fontSizeUnits, d->fontSizeMapUnitScale ) * scaleFactor  * scaleFactor );
 
  200     font.setCapitalization( QFont::SmallCaps );
 
  213   if ( !d->textNamedStyle.isEmpty() )
 
  214     return d->textNamedStyle;
 
  217   return db.styleString( d->textFont );
 
  224   d->textNamedStyle = style;
 
  240   return d->fontSizeUnits;
 
  246   d->fontSizeUnits = unit;
 
  251   return d->fontSizeMapUnitScale;
 
  257   d->fontSizeMapUnitScale = scale;
 
  279   d->textColor = 
color;
 
  295   return d->textFont.stretch() > 0 ? d->textFont.stretch() : 100;
 
  301   d->textFont.setStretch( factor );
 
  317   return d->multilineHeight;
 
  323   d->multilineHeight = height;
 
  328   return d->orientation;
 
  342          : d->capitalization ;
 
  349 #if defined(HAS_KDE_QT5_SMALL_CAPS_FIX) || QT_VERSION >= QT_VERSION_CHECK(6, 3, 0) 
  352   d->textFont.setCapitalization( QFont::MixedCase );
 
  358   return d->allowHtmlFormatting;
 
  364   d->allowHtmlFormatting = allow;
 
  369   return d->previewBackgroundColor;
 
  375   d->previewBackgroundColor = 
color;
 
  381   QFont appFont = QApplication::font();
 
  382   mTextFontFamily = layer->
customProperty( QStringLiteral( 
"labeling/fontFamily" ), QVariant( appFont.family() ) ).toString();
 
  383   QString fontFamily = mTextFontFamily;
 
  387     mTextFontFound = 
false;
 
  393     fontFamily = appFont.family();
 
  397     mTextFontFound = 
true;
 
  402     d->fontSize = appFont.pointSizeF();
 
  406     d->fontSize = layer->
customProperty( QStringLiteral( 
"labeling/fontSize" ) ).toDouble();
 
  409   if ( layer->
customProperty( QStringLiteral( 
"labeling/fontSizeUnit" ) ).toString().isEmpty() )
 
  411     d->fontSizeUnits = layer->
customProperty( QStringLiteral( 
"labeling/fontSizeInMapUnits" ), QVariant( 
false ) ).toBool() ?
 
  421   if ( layer->
customProperty( QStringLiteral( 
"labeling/fontSizeMapUnitScale" ) ).toString().isEmpty() )
 
  424     double oldMin = layer->
customProperty( QStringLiteral( 
"labeling/fontSizeMapUnitMinScale" ), 0.0 ).toDouble();
 
  425     d->fontSizeMapUnitScale.minScale = oldMin != 0 ? 1.0 / oldMin : 0;
 
  426     double oldMax = layer->
customProperty( QStringLiteral( 
"labeling/fontSizeMapUnitMaxScale" ), 0.0 ).toDouble();
 
  427     d->fontSizeMapUnitScale.maxScale = oldMax != 0 ? 1.0 / oldMax : 0;
 
  433   int fontWeight = layer->
customProperty( QStringLiteral( 
"labeling/fontWeight" ) ).toInt();
 
  434   bool fontItalic = layer->
customProperty( QStringLiteral( 
"labeling/fontItalic" ) ).toBool();
 
  435   d->textFont = QFont( fontFamily, d->fontSize, fontWeight, fontItalic );
 
  439   d->textFont.setUnderline( layer->
customProperty( QStringLiteral( 
"labeling/fontUnderline" ) ).toBool() );
 
  440   d->textFont.setStrikeOut( layer->
customProperty( QStringLiteral( 
"labeling/fontStrikeout" ) ).toBool() );
 
  441   d->textFont.setLetterSpacing( QFont::AbsoluteSpacing, layer->
customProperty( QStringLiteral( 
"labeling/fontLetterSpacing" ), QVariant( 0.0 ) ).toDouble() );
 
  442   d->textFont.setWordSpacing( layer->
customProperty( QStringLiteral( 
"labeling/fontWordSpacing" ), QVariant( 0.0 ) ).toDouble() );
 
  444   if ( layer->
customProperty( QStringLiteral( 
"labeling/textOpacity" ) ).toString().isEmpty() )
 
  446     d->opacity = ( 1 - layer->
customProperty( QStringLiteral( 
"labeling/textTransp" ) ).toInt() / 100.0 ); 
 
  450     d->opacity = ( layer->
customProperty( QStringLiteral( 
"labeling/textOpacity" ) ).toDouble() );
 
  454   d->multilineHeight = layer->
customProperty( QStringLiteral( 
"labeling/multilineHeight" ), QVariant( 1.0 ) ).toDouble();
 
  465   QDomElement textStyleElem;
 
  466   if ( elem.nodeName() == QLatin1String( 
"text-style" ) )
 
  467     textStyleElem = elem;
 
  469     textStyleElem = elem.firstChildElement( QStringLiteral( 
"text-style" ) );
 
  470   QFont appFont = QApplication::font();
 
  471   mTextFontFamily = textStyleElem.attribute( QStringLiteral( 
"fontFamily" ), appFont.family() );
 
  472   QString fontFamily = mTextFontFamily;
 
  474   const QDomElement familiesElem = textStyleElem.firstChildElement( QStringLiteral( 
"families" ) );
 
  475   const QDomNodeList familyNodes = familiesElem.childNodes();
 
  477   families.reserve( familyNodes.size() );
 
  478   for ( 
int i = 0; i < familyNodes.count(); ++i )
 
  480     const QDomElement familyElem = familyNodes.at( i ).toElement();
 
  481     families << familyElem.attribute( QStringLiteral( 
"name" ) );
 
  485   mTextFontFound = 
false;
 
  488     for ( 
const QString &family : std::as_const( 
families ) )
 
  492         mTextFontFound = 
true;
 
  498     if ( !mTextFontFound )
 
  501       fontFamily = appFont.family();
 
  506     mTextFontFound = 
true;
 
  509   if ( !mTextFontFound )
 
  511     context.
pushMessage( QObject::tr( 
"Font “%1” not available on system" ).arg( mTextFontFamily ) );
 
  514   if ( textStyleElem.hasAttribute( QStringLiteral( 
"fontSize" ) ) )
 
  516     d->fontSize = textStyleElem.attribute( QStringLiteral( 
"fontSize" ) ).toDouble();
 
  520     d->fontSize = appFont.pointSizeF();
 
  523   if ( !textStyleElem.hasAttribute( QStringLiteral( 
"fontSizeUnit" ) ) )
 
  525     d->fontSizeUnits = textStyleElem.attribute( QStringLiteral( 
"fontSizeInMapUnits" ) ).toUInt() == 0 ? 
QgsUnitTypes::RenderPoints 
  533   if ( !textStyleElem.hasAttribute( QStringLiteral( 
"fontSizeMapUnitScale" ) ) )
 
  536     double oldMin = textStyleElem.attribute( QStringLiteral( 
"fontSizeMapUnitMinScale" ), QStringLiteral( 
"0" ) ).toDouble();
 
  537     d->fontSizeMapUnitScale.minScale = oldMin != 0 ? 1.0 / oldMin : 0;
 
  538     double oldMax = textStyleElem.attribute( QStringLiteral( 
"fontSizeMapUnitMaxScale" ), QStringLiteral( 
"0" ) ).toDouble();
 
  539     d->fontSizeMapUnitScale.maxScale = oldMax != 0 ? 1.0 / oldMax : 0;
 
  545   int fontWeight = textStyleElem.attribute( QStringLiteral( 
"fontWeight" ) ).toInt();
 
  546   bool fontItalic = textStyleElem.attribute( QStringLiteral( 
"fontItalic" ) ).toInt();
 
  547   d->textFont = QFont( fontFamily, d->fontSize, fontWeight, fontItalic );
 
  548   d->textFont.setPointSizeF( d->fontSize ); 
 
  551   d->textFont.setUnderline( textStyleElem.attribute( QStringLiteral( 
"fontUnderline" ) ).toInt() );
 
  552   d->textFont.setStrikeOut( textStyleElem.attribute( QStringLiteral( 
"fontStrikeout" ) ).toInt() );
 
  553   d->textFont.setKerning( textStyleElem.attribute( QStringLiteral( 
"fontKerning" ), QStringLiteral( 
"1" ) ).toInt() );
 
  554   d->textFont.setLetterSpacing( QFont::AbsoluteSpacing, textStyleElem.attribute( QStringLiteral( 
"fontLetterSpacing" ), QStringLiteral( 
"0" ) ).toDouble() );
 
  555   d->textFont.setWordSpacing( textStyleElem.attribute( QStringLiteral( 
"fontWordSpacing" ), QStringLiteral( 
"0" ) ).toDouble() );
 
  557   if ( !textStyleElem.hasAttribute( QStringLiteral( 
"textOpacity" ) ) )
 
  559     d->opacity = ( 1 - textStyleElem.attribute( QStringLiteral( 
"textTransp" ) ).toInt() / 100.0 ); 
 
  563     d->opacity = ( textStyleElem.attribute( QStringLiteral( 
"textOpacity" ) ).toDouble() );
 
  565 #ifdef HAS_KDE_QT5_FONT_STRETCH_FIX 
  566   d->textFont.setStretch( textStyleElem.attribute( QStringLiteral( 
"stretchFactor" ), QStringLiteral( 
"100" ) ).toInt() );
 
  574   if ( !textStyleElem.hasAttribute( QStringLiteral( 
"multilineHeight" ) ) )
 
  576     QDomElement textFormatElem = elem.firstChildElement( QStringLiteral( 
"text-format" ) );
 
  577     d->multilineHeight = textFormatElem.attribute( QStringLiteral( 
"multilineHeight" ), QStringLiteral( 
"1" ) ).toDouble();
 
  581     d->multilineHeight = textStyleElem.attribute( QStringLiteral( 
"multilineHeight" ), QStringLiteral( 
"1" ) ).toDouble();
 
  584   if ( textStyleElem.hasAttribute( QStringLiteral( 
"capitalization" ) ) )
 
  587     d->capitalization = 
static_cast< Qgis::Capitalization >( textStyleElem.attribute( QStringLiteral( 
"fontCapitals" ), QStringLiteral( 
"0" ) ).toUInt() );
 
  590     d->textFont.setCapitalization( QFont::SmallCaps );
 
  592   d->allowHtmlFormatting = textStyleElem.attribute( QStringLiteral( 
"allowHtml" ), QStringLiteral( 
"0" ) ).toInt();
 
  594   if ( textStyleElem.firstChildElement( QStringLiteral( 
"text-buffer" ) ).isNull() )
 
  596     mBufferSettings.
readXml( elem );
 
  600     mBufferSettings.
readXml( textStyleElem );
 
  602   if ( textStyleElem.firstChildElement( QStringLiteral( 
"text-mask" ) ).isNull() )
 
  608     mMaskSettings.
readXml( textStyleElem );
 
  610   if ( textStyleElem.firstChildElement( QStringLiteral( 
"shadow" ) ).isNull() )
 
  612     mShadowSettings.
readXml( elem );
 
  616     mShadowSettings.
readXml( textStyleElem );
 
  618   if ( textStyleElem.firstChildElement( QStringLiteral( 
"background" ) ).isNull() )
 
  620     mBackgroundSettings.
readXml( elem, context );
 
  624     mBackgroundSettings.
readXml( textStyleElem, context );
 
  627   QDomElement ddElem = textStyleElem.firstChildElement( QStringLiteral( 
"dd_properties" ) );
 
  628   if ( ddElem.isNull() )
 
  630     ddElem = elem.firstChildElement( QStringLiteral( 
"dd_properties" ) );
 
  632   if ( !ddElem.isNull() )
 
  639     d->mDataDefinedProperties.clear();
 
  646   QDomElement textStyleElem = doc.createElement( QStringLiteral( 
"text-style" ) );
 
  647   textStyleElem.setAttribute( QStringLiteral( 
"fontFamily" ), d->textFont.family() );
 
  649   QDomElement familiesElem = doc.createElement( QStringLiteral( 
"families" ) );
 
  650   for ( 
const QString &family : std::as_const( d->families ) )
 
  652     QDomElement familyElem = doc.createElement( QStringLiteral( 
"family" ) );
 
  653     familyElem.setAttribute( QStringLiteral( 
"name" ), family );
 
  654     familiesElem.appendChild( familyElem );
 
  656   textStyleElem.appendChild( familiesElem );
 
  659   textStyleElem.setAttribute( QStringLiteral( 
"fontSize" ), d->fontSize );
 
  662   textStyleElem.setAttribute( QStringLiteral( 
"fontWeight" ), d->textFont.weight() );
 
  663   textStyleElem.setAttribute( QStringLiteral( 
"fontItalic" ), d->textFont.italic() );
 
  664   textStyleElem.setAttribute( QStringLiteral( 
"fontStrikeout" ), d->textFont.strikeOut() );
 
  665   textStyleElem.setAttribute( QStringLiteral( 
"fontUnderline" ), d->textFont.underline() );
 
  668   textStyleElem.setAttribute( QStringLiteral( 
"fontLetterSpacing" ), d->textFont.letterSpacing() );
 
  669   textStyleElem.setAttribute( QStringLiteral( 
"fontWordSpacing" ), d->textFont.wordSpacing() );
 
  670   textStyleElem.setAttribute( QStringLiteral( 
"fontKerning" ), d->textFont.kerning() );
 
  671   textStyleElem.setAttribute( QStringLiteral( 
"textOpacity" ), d->opacity );
 
  672 #ifdef HAS_KDE_QT5_FONT_STRETCH_FIX 
  673   if ( d->textFont.stretch() > 0 )
 
  674     textStyleElem.setAttribute( QStringLiteral( 
"stretchFactor" ), d->textFont.stretch() );
 
  678   textStyleElem.setAttribute( QStringLiteral( 
"multilineHeight" ), d->multilineHeight );
 
  679   textStyleElem.setAttribute( QStringLiteral( 
"allowHtml" ), d->allowHtmlFormatting ? QStringLiteral( 
"1" ) : QStringLiteral( 
"0" ) );
 
  680   textStyleElem.setAttribute( QStringLiteral( 
"capitalization" ), QString::number( 
static_cast< int >( d->capitalization ) ) );
 
  682   QDomElement ddElem = doc.createElement( QStringLiteral( 
"dd_properties" ) );
 
  685   textStyleElem.appendChild( mBufferSettings.
writeXml( doc ) );
 
  686   textStyleElem.appendChild( mMaskSettings.
writeXml( doc ) );
 
  687   textStyleElem.appendChild( mBackgroundSettings.
writeXml( doc, context ) );
 
  688   textStyleElem.appendChild( mShadowSettings.
writeXml( doc ) );
 
  689   textStyleElem.appendChild( ddElem );
 
  691   return textStyleElem;
 
  698   QMimeData *mimeData = 
new QMimeData;
 
  699   mimeData->setColorData( QVariant( 
color() ) );
 
  702   QDomDocument textDoc;
 
  703   QDomElement textElem = 
writeXml( textDoc, rwContext );
 
  704   textDoc.appendChild( textElem );
 
  705   mimeData->setText( textDoc.toString() );
 
  714   if ( 
font.pointSizeF() > 0 )
 
  719   else if ( 
font.pixelSize() > 0 )
 
  734       f.setPointSizeF( 
size() );
 
  738       f.setPointSizeF( 
size() * 2.83464567 );
 
  742       f.setPointSizeF( 
size() * 72 );
 
  746       f.setPixelSize( 
static_cast< int >( std::round( 
size() ) ) );
 
  767   QString text = data->text();
 
  768   if ( !text.isEmpty() )
 
  774     if ( doc.setContent( text ) )
 
  776       elem = doc.documentElement();
 
  778       format.
readXml( elem, rwContext );
 
  789   if ( d->blendMode != QPainter::CompositionMode_SourceOver )
 
  792   if ( mBufferSettings.
enabled() && mBufferSettings.
blendMode() != QPainter::CompositionMode_SourceOver )
 
  795   if ( mBackgroundSettings.
enabled() && mBackgroundSettings.
blendMode() != QPainter::CompositionMode_SourceOver )
 
  798   if ( mShadowSettings.
enabled() && mShadowSettings.
blendMode() != QPainter::CompositionMode_SourceOver )
 
  807   return d->mDataDefinedProperties;
 
  812   return d->mDataDefinedProperties;
 
  817   QSet< QString > fields = d->mDataDefinedProperties.referencedFields( context.
expressionContext(), 
true );
 
  828   d->mDataDefinedProperties = collection;
 
  834   if ( !d->mDataDefinedProperties.hasActiveProperties() )
 
  837   QString ddFontFamily;
 
  840   if ( !exprVal.isNull() )
 
  842     QString family = exprVal.toString().trimmed();
 
  843     if ( d->textFont.family() != family )
 
  849         ddFontFamily = family;
 
  858   if ( !exprVal.isNull() )
 
  860     QString fontstyle = exprVal.toString().trimmed();
 
  861     ddFontStyle = fontstyle;
 
  871   bool ddItalic = 
false;
 
  881   QFontDatabase fontDb;
 
  882   QFont appFont = QApplication::font();
 
  883   bool newFontBuilt = 
false;
 
  884   if ( ddBold || ddItalic )
 
  887     newFont = QFont( !ddFontFamily.isEmpty() ? ddFontFamily : d->textFont.family() );
 
  889     newFont.setBold( ddBold );
 
  890     newFont.setItalic( ddItalic );
 
  892   else if ( !ddFontStyle.isEmpty()
 
  893             && ddFontStyle.compare( QLatin1String( 
"Ignore" ), Qt::CaseInsensitive ) != 0 )
 
  895     if ( !ddFontFamily.isEmpty() )
 
  898       QFont styledfont = fontDb.font( ddFontFamily, ddFontStyle, appFont.pointSize() );
 
  899       if ( appFont != styledfont )
 
  901         newFont = styledfont;
 
  909   else if ( !ddFontFamily.isEmpty() )
 
  911     if ( ddFontStyle.compare( QLatin1String( 
"Ignore" ), Qt::CaseInsensitive ) != 0 )
 
  914       QFont styledfont = fontDb.font( ddFontFamily, d->textNamedStyle, appFont.pointSize() );
 
  915       if ( appFont != styledfont )
 
  917         newFont = styledfont;
 
  923       newFont = QFont( ddFontFamily );
 
  931     newFont.setUnderline( d->textFont.underline() );
 
  932     newFont.setStrikeOut( d->textFont.strikeOut() );
 
  933     newFont.setWordSpacing( d->textFont.wordSpacing() );
 
  934     newFont.setLetterSpacing( QFont::AbsoluteSpacing, d->textFont.letterSpacing() );
 
  935     d->textFont = newFont;
 
  963   if ( !exprVal.isNull() )
 
  965     QString units = exprVal.toString();
 
  966     if ( !units.isEmpty() )
 
  971         d->fontSizeUnits = res;
 
  981       d->opacity = val.toDouble() / 100.0;
 
  985 #ifdef HAS_KDE_QT5_FONT_STRETCH_FIX 
  992       d->textFont.setStretch( val.toInt() );
 
 1008     if ( !val.isNull() )
 
 1010       d->textFont.setLetterSpacing( QFont::AbsoluteSpacing, val.toDouble() );
 
 1018     if ( !val.isNull() )
 
 1020       d->textFont.setWordSpacing( val.toDouble() );
 
 1027     QString blendstr = exprVal.toString().trimmed();
 
 1028     if ( !blendstr.isEmpty() )
 
 1041   QPixmap pixmap( 
size );
 
 1042   pixmap.fill( Qt::transparent );
 
 1044   painter.begin( &pixmap );
 
 1046   painter.setRenderHint( QPainter::Antialiasing );
 
 1048   QRect rect( 0, 0, 
size.width(), 
size.height() );
 
 1051   painter.setPen( Qt::NoPen );
 
 1053   if ( ( background1.lightnessF() < 0.7 ) )
 
 1055     background1 = background1.darker( 125 );
 
 1059     background1 = background1.lighter( 125 );
 
 1062   QLinearGradient linearGrad( QPointF( 0, 0 ), QPointF( 0, rect.height() ) );
 
 1063   linearGrad.setColorAt( 0, background1 );
 
 1064   linearGrad.setColorAt( 1, background2 );
 
 1065   painter.setBrush( QBrush( linearGrad ) );
 
 1066   if ( 
size.width() > 30 )
 
 1068     painter.drawRoundedRect( rect, 6, 6 );
 
 1073     painter.drawRect( rect );
 
 1075   painter.setBrush( Qt::NoBrush );
 
 1076   painter.setPen( Qt::NoPen );
 
 1084 #if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) 
 1085   const double logicalDpiX = QgsApplication::desktop()->logicalDpiX();
 
 1087   QWidget *activeWindow = QApplication::activeWindow();
 
 1088   const double logicalDpiX = activeWindow && activeWindow->screen() ? activeWindow->screen()->logicalDotsPerInchX() : 96.0;
 
 1102              ? fontSize * tempFormat.
buffer().
size() / 100
 
 1107   double ytrans = 0.0;
 
 1110                        ? fontSize * tempFormat.
buffer().
size() / 100
 
 1115   const QStringList text = QStringList() << ( previewText.isEmpty() ? QObject::tr( 
"Aa" ) : previewText );
 
 1117   QRectF textRect = rect;
 
 1118   textRect.setLeft( xtrans + padding );
 
 1119   textRect.setWidth( rect.width() - xtrans - 2 * padding );
 
 1121   if ( textRect.width() > 2000 )
 
 1122     textRect.setWidth( 2000 - 2 * padding );
 
 1124   const double bottom = textRect.height() / 2 + textHeight / 2;
 
 1125   textRect.setTop( bottom - textHeight );
 
 1126   textRect.setBottom( bottom );
 
 1131   painter.setBrush( Qt::NoBrush );
 
 1133   if ( 
size.width() > 30 )
 
 1135     painter.drawRoundedRect( rect, 6, 6 );
 
 1140     painter.drawRect( rect );
 
Capitalization
String capitalization options.
 
@ AllSmallCaps
Force all characters to small caps (since QGIS 3.24)
 
@ MixedCase
Mixed case, ie no change.
 
@ SmallCaps
Mixed case small caps (since QGIS 3.24)
 
@ Antialiasing
Use antialiasing while drawing.
 
void setOriginalValueVariable(const QVariant &value)
Sets the original value variable value for the context.
 
static QString translateNamedStyle(const QString &namedStyle)
Returns the localized named style of a font, if such a translation is available.
 
static QString untranslateNamedStyle(const QString &namedStyle)
Returns the english named style of a font, if possible.
 
static bool fontFamilyMatchOnSystem(const QString &family, QString *chosen=nullptr, bool *match=nullptr)
Check whether font family is on system.
 
static bool fontFamilyOnSystem(const QString &family)
Check whether font family is on system in a quick manner, which does not compare [foundry].
 
static bool updateFontViaStyle(QFont &f, const QString &fontstyle, bool fallback=false)
Updates font with named style and retain all font properties.
 
Q_INVOKABLE QVariant customProperty(const QString &value, const QVariant &defaultValue=QVariant()) const
Read a custom property from layer.
 
Perform transforms between map coordinates and device coordinates.
 
void setParameters(double mapUnitsPerPixel, double centerX, double centerY, int widthPixels, int heightPixels, double rotation)
Sets parameters for use in transforming coordinates.
 
Struct for storing maximum and minimum scales for measurements in map units.
 
static QgsPainting::BlendMode getBlendModeEnum(QPainter::CompositionMode blendMode)
Returns a BlendMode corresponding to a QPainter::CompositionMode.
 
static QPainter::CompositionMode getCompositionMode(QgsPainting::BlendMode blendMode)
Returns a QPainter::CompositionMode corresponding to a BlendMode.
 
BlendMode
Blending modes enum defining the available composition modes that can be used when rendering a layer.
 
@ Strikeout
Use strikeout.
 
@ FontStyle
Font style name.
 
@ Underline
Use underline.
 
@ FontLetterSpacing
Letter spacing.
 
@ FontStretchFactor
Font stretch factor, since QGIS 3.24.
 
@ FontSizeUnit
Font size units.
 
@ Italic
Use italic style.
 
@ FontWordSpacing
Word spacing.
 
@ FontBlendMode
Text blend mode.
 
@ FontOpacity
Text opacity.
 
static const QgsPropertiesDefinition & propertyDefinitions()
Returns the labeling property definitions.
 
A grouped map of multiple QgsProperty objects, each referenced by a integer key value.
 
The class is used as a container of context for various read/write operations on other objects.
 
void pushMessage(const QString &message, Qgis::MessageLevel level=Qgis::MessageLevel::Warning) const
Append a message to the context.
 
Contains information about the context of a rendering operation.
 
void setScaleFactor(double factor)
Sets the scaling factor for the render to convert painter units to physical sizes.
 
void setUseAdvancedEffects(bool enabled)
Used to enable or disable advanced effects such as blend modes.
 
QgsExpressionContext & expressionContext()
Gets the expression context.
 
double convertToPainterUnits(double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale=QgsMapUnitScale(), Qgis::RenderSubcomponentProperty property=Qgis::RenderSubcomponentProperty::Generic) const
Converts a size from the specified units to painter units (pixels).
 
void setFlag(Qgis::RenderContextFlag flag, bool on=true)
Enable or disable a particular flag (other flags are not affected)
 
void setMapToPixel(const QgsMapToPixel &mtp)
Sets the context's map to pixel transform, which transforms between map coordinates and device coordi...
 
void setPainter(QPainter *p)
Sets the destination QPainter for the render operation.
 
static QString encodeMapUnitScale(const QgsMapUnitScale &mapUnitScale)
 
static QColor decodeColor(const QString &str)
 
static QgsMapUnitScale decodeMapUnitScale(const QString &str)
 
static QPainter::CompositionMode decodeBlendMode(const QString &s)
 
static QString encodeColor(const QColor &color)
 
Container for settings relating to a text background object.
 
QSizeF size() const
Returns the size of the background shape.
 
QSet< QString > referencedFields(const QgsRenderContext &context) const
Returns all field names referenced by the configuration (e.g.
 
void upgradeDataDefinedProperties(QgsPropertyCollection &properties)
Upgrade data defined properties when reading a project file saved in QGIS prior to version 3....
 
QPainter::CompositionMode blendMode() const
Returns the blending mode used for drawing the background shape.
 
bool enabled() const
Returns whether the background is enabled.
 
void readXml(const QDomElement &elem, const QgsReadWriteContext &context)
Read settings from a DOM element.
 
void updateDataDefinedProperties(QgsRenderContext &context, const QgsPropertyCollection &properties)
Updates the format by evaluating current values of data defined properties.
 
SizeType sizeType() const
Returns the method used to determine the size of the background shape (e.g., fixed size or buffer aro...
 
QDomElement writeXml(QDomDocument &doc, const QgsReadWriteContext &context) const
Write settings into a DOM element.
 
void readFromLayer(QgsVectorLayer *layer)
Reads settings from a layer's custom properties (for QGIS 2.x projects).
 
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the shape size.
 
QgsUnitTypes::RenderUnit sizeUnit() const
Returns the units used for the shape's size.
 
Container for settings relating to a text buffer.
 
void readFromLayer(QgsVectorLayer *layer)
Reads settings from a layer's custom properties (for QGIS 2.x projects).
 
QSet< QString > referencedFields(const QgsRenderContext &context) const
Returns all field names referenced by the configuration (e.g.
 
double size() const
Returns the size of the buffer.
 
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the buffer size.
 
bool enabled() const
Returns whether the buffer is enabled.
 
QDomElement writeXml(QDomDocument &doc) const
Write settings into a DOM element.
 
QgsUnitTypes::RenderUnit sizeUnit() const
Returns the units for the buffer size.
 
QPainter::CompositionMode blendMode() const
Returns the blending mode used for drawing the buffer.
 
void updateDataDefinedProperties(QgsRenderContext &context, const QgsPropertyCollection &properties)
Updates the format by evaluating current values of data defined properties.
 
void readXml(const QDomElement &elem)
Read settings from a DOM element.
 
Container for all settings relating to text rendering.
 
QgsTextFormat()
Default constructor for QgsTextFormat.
 
void setColor(const QColor &color)
Sets the color that text will be rendered in.
 
void setBlendMode(QPainter::CompositionMode mode)
Sets the blending mode used for drawing the text.
 
void setSize(double size)
Sets the size for rendered text.
 
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the size.
 
void setCapitalization(Qgis::Capitalization capitalization)
Sets the text capitalization style.
 
void setDataDefinedProperties(const QgsPropertyCollection &collection)
Sets the format's property collection, used for data defined overrides.
 
QStringList families() const
Returns the list of font families to use when restoring the text format, in order of precedence.
 
void setFont(const QFont &font)
Sets the font used for rendering text.
 
QSet< QString > referencedFields(const QgsRenderContext &context) const
Returns all field names referenced by the configuration (e.g.
 
void setFamilies(const QStringList &families)
Sets a list of font families to use for the text format, in order of precedence.
 
static QgsTextFormat fromMimeData(const QMimeData *data, bool *ok=nullptr)
Attempts to parse the provided mime data as a QgsTextFormat.
 
double lineHeight() const
Returns the line height for text.
 
QgsUnitTypes::RenderUnit sizeUnit() const
Returns the units for the size of rendered text.
 
int stretchFactor() const
Returns the text's stretch factor.
 
void setOrientation(TextOrientation orientation)
Sets the orientation for the text.
 
void updateDataDefinedProperties(QgsRenderContext &context)
Updates the format by evaluating current values of data defined properties.
 
QgsPropertyCollection & dataDefinedProperties()
Returns a reference to the format's property collection, used for data defined overrides.
 
void setStretchFactor(int factor)
Sets the text's stretch factor.
 
void setShadow(const QgsTextShadowSettings &shadowSettings)
Sets the text's drop shadow settings.
 
void setMask(const QgsTextMaskSettings &maskSettings)
Sets the text's masking settings.
 
void setPreviewBackgroundColor(const QColor &color)
Sets the background color that text will be rendered on for previews.
 
QFont scaledFont(const QgsRenderContext &context, double scaleFactor=1.0, bool *isZeroSize=nullptr) const
Returns a font with the size scaled to match the format's size settings (including units and map unit...
 
void setOpacity(double opacity)
Sets the text's opacity.
 
QPainter::CompositionMode blendMode() const
Returns the blending mode used for drawing the text.
 
void readXml(const QDomElement &elem, const QgsReadWriteContext &context)
Read settings from a DOM element.
 
bool operator==(const QgsTextFormat &other) const
 
TextOrientation orientation() const
Returns the orientation of the text.
 
void setAllowHtmlFormatting(bool allow)
Sets whether text should be treated as a HTML document and HTML tags should be used for formatting th...
 
Qgis::Capitalization capitalization() const
Returns the text capitalization style.
 
QgsTextMaskSettings & mask()
Returns a reference to the masking settings.
 
static QPixmap textFormatPreviewPixmap(const QgsTextFormat &format, QSize size, const QString &previewText=QString(), int padding=0)
Returns a pixmap preview for a text format.
 
bool isValid() const
Returns true if the format is valid.
 
void setBuffer(const QgsTextBufferSettings &bufferSettings)
Sets the text's buffer settings.
 
QgsTextBackgroundSettings & background()
Returns a reference to the text background settings.
 
TextOrientation
Text orientation.
 
static QgsTextFormat fromQFont(const QFont &font)
Returns a text format matching the settings from an input font.
 
void setValid()
Sets the format to a valid state, without changing any of the default format settings.
 
bool allowHtmlFormatting() const
Returns true if text should be treated as a HTML document and HTML tags should be used for formatting...
 
QFont toQFont() const
Returns a QFont matching the relevant settings from this text format.
 
void setSizeUnit(QgsUnitTypes::RenderUnit unit)
Sets the units for the size of rendered text.
 
bool operator!=(const QgsTextFormat &other) const
 
double opacity() const
Returns the text's opacity.
 
QString namedStyle() const
Returns the named style for the font used for rendering text (e.g., "bold").
 
double size() const
Returns the size for rendered text.
 
QgsTextShadowSettings & shadow()
Returns a reference to the text drop shadow settings.
 
QgsTextFormat & operator=(const QgsTextFormat &other)
 
void setBackground(const QgsTextBackgroundSettings &backgroundSettings)
Sets the text's background settings.q.
 
QDomElement writeXml(QDomDocument &doc, const QgsReadWriteContext &context) const
Write settings into a DOM element.
 
QMimeData * toMimeData() const
Returns new mime data representing the text format settings.
 
void setSizeMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the size.
 
void setNamedStyle(const QString &style)
Sets the named style for the font used for rendering text.
 
QColor color() const
Returns the color that text will be rendered in.
 
QFont font() const
Returns the font used for rendering text.
 
void readFromLayer(QgsVectorLayer *layer)
Reads settings from a layer's custom properties (for QGIS 2.x projects).
 
QColor previewBackgroundColor() const
Returns the background color for text previews.
 
bool containsAdvancedEffects() const
Returns true if any component of the font format requires advanced effects such as blend modes,...
 
QgsTextBufferSettings & buffer()
Returns a reference to the text buffer settings.
 
void setLineHeight(double height)
Sets the line height for text.
 
Container for settings relating to a selective masking around a text.
 
QSet< QString > referencedFields(const QgsRenderContext &context) const
Returns all field names referenced by the configuration (e.g.
 
void updateDataDefinedProperties(QgsRenderContext &context, const QgsPropertyCollection &properties)
Updates the format by evaluating current values of data defined properties.
 
void readXml(const QDomElement &elem)
Read settings from a DOM element.
 
QDomElement writeXml(QDomDocument &doc) const
Write settings into a DOM element.
 
static QString encodeTextOrientation(QgsTextFormat::TextOrientation orientation)
Encodes a text orientation.
 
static QColor readColor(QgsVectorLayer *layer, const QString &property, const QColor &defaultColor=Qt::black, bool withAlpha=true)
Converts an encoded color value from a layer property.
 
static QgsTextFormat::TextOrientation decodeTextOrientation(const QString &name, bool *ok=nullptr)
Attempts to decode a string representation of a text orientation.
 
static void drawText(const QRectF &rect, double rotation, HAlignment alignment, const QStringList &textLines, QgsRenderContext &context, const QgsTextFormat &format, bool drawAsOutlines=true, VAlignment vAlignment=AlignTop, Qgis::TextRendererFlags flags=Qgis::TextRendererFlags())
Draws text within a rectangle using the specified settings.
 
@ AlignCenter
Center align.
 
static int sizeToPixel(double size, const QgsRenderContext &c, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &mapUnitScale=QgsMapUnitScale())
Calculates pixel size (considering output size should be in pixel or map units, scale factors and opt...
 
static double textHeight(const QgsRenderContext &context, const QgsTextFormat &format, const QStringList &textLines, DrawMode mode=Point, QFontMetricsF *fontMetrics=nullptr, Qgis::TextRendererFlags flags=Qgis::TextRendererFlags(), double maxLineWidth=0)
Returns the height of a text based on a given format.
 
@ Rect
Text within rectangle draw mode.
 
Container for settings relating to a text shadow.
 
bool enabled() const
Returns whether the shadow is enabled.
 
void readXml(const QDomElement &elem)
Read settings from a DOM element.
 
QDomElement writeXml(QDomDocument &doc) const
Write settings into a DOM element.
 
void updateDataDefinedProperties(QgsRenderContext &context, const QgsPropertyCollection &properties)
Updates the format by evaluating current values of data defined properties.
 
QPainter::CompositionMode blendMode() const
Returns the blending mode used for drawing the drop shadow.
 
QSet< QString > referencedFields(const QgsRenderContext &context) const
Returns all field names referenced by the configuration (e.g.
 
void readFromLayer(QgsVectorLayer *layer)
Reads settings from a layer's custom properties (for QGIS 2.x projects).
 
static Q_INVOKABLE QString encodeUnit(QgsUnitTypes::DistanceUnit unit)
Encodes a distance unit to a string.
 
static Q_INVOKABLE QgsUnitTypes::RenderUnit decodeRenderUnit(const QString &string, bool *ok=nullptr)
Decodes a render unit from a string.
 
RenderUnit
Rendering size units.
 
@ RenderUnknownUnit
Mixed or unknown units.
 
@ RenderMetersInMapUnits
Meters value as Map units.
 
@ RenderPercentage
Percentage of another measurement (e.g., canvas size, feature size)
 
@ RenderPoints
Points (e.g., for font sizes)
 
@ RenderMillimeters
Millimeters.
 
@ RenderMapUnits
Map units.
 
Represents a vector layer which manages a vector based data sets.
 
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)