29#include <QFontDatabase>
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()
87 || mBufferSettings != other.mBufferSettings
88 || mBackgroundSettings != other.mBackgroundSettings
89 || mShadowSettings != other.mShadowSettings
90 || mMaskSettings != other.mMaskSettings
100 return !( *
this == other );
116 return mBufferSettings;
122 mBufferSettings = bufferSettings;
128 return mBackgroundSettings;
134 mBackgroundSettings = backgroundSettings;
140 return mShadowSettings;
146 mShadowSettings = shadowSettings;
152 return mMaskSettings;
158 mMaskSettings = maskSettings;
171 QFont
font = d->textFont;
172 if ( scaleFactor == 1 )
175 d->fontSizeMapUnitScale );
176 if ( fontPixelSize == 0 )
183 font.setPixelSize( fontPixelSize );
187 double fontPixelSize = context.
convertToPainterUnits( d->fontSize, d->fontSizeUnits, d->fontSizeMapUnitScale );
194 const int roundedPixelSize =
static_cast< int >( std::round( scaleFactor * fontPixelSize + 0.5 ) );
195 font.setPixelSize( roundedPixelSize );
198 font.setLetterSpacing( QFont::AbsoluteSpacing, context.
convertToPainterUnits( d->textFont.letterSpacing(), d->fontSizeUnits, d->fontSizeMapUnitScale ) * scaleFactor );
199 font.setWordSpacing( context.
convertToPainterUnits( d->textFont.wordSpacing(), d->fontSizeUnits, d->fontSizeMapUnitScale ) * scaleFactor * scaleFactor );
203 font.setCapitalization( QFont::SmallCaps );
216 if ( !d->textNamedStyle.isEmpty() )
217 return d->textNamedStyle;
220 return db.styleString( d->textFont );
227 d->textNamedStyle = style;
232 return d->forcedBold;
238 d->textFont.setBold( forced );
239 d->forcedBold =
true;
244 return d->forcedItalic;
250 d->textFont.setItalic( forced );
251 d->forcedItalic =
true;
267 return d->fontSizeUnits;
273 d->fontSizeUnits = unit;
278 return d->fontSizeMapUnitScale;
284 d->fontSizeMapUnitScale = scale;
306 d->textColor =
color;
322 return d->textFont.stretch() > 0 ? d->textFont.stretch() : 100;
328 d->textFont.setStretch( factor );
344 return d->multilineHeight;
350 d->multilineHeight = height;
355 return d->multilineHeightUnits;
361 d->multilineHeightUnits = unit;
366 return d->orientation;
380 : d->capitalization ;
387#if defined(HAS_KDE_QT5_SMALL_CAPS_FIX) || QT_VERSION >= QT_VERSION_CHECK(6, 3, 0)
390 d->textFont.setCapitalization( QFont::MixedCase );
396 return d->allowHtmlFormatting;
402 d->allowHtmlFormatting = allow;
407 return d->previewBackgroundColor;
413 d->previewBackgroundColor =
color;
419 QFont appFont = QApplication::font();
421 QString fontFamily = mTextFontFamily;
425 mTextFontFound =
false;
431 fontFamily = appFont.family();
435 mTextFontFound =
true;
440 d->fontSize = appFont.pointSizeF();
444 d->fontSize = layer->
customProperty( QStringLiteral(
"labeling/fontSize" ) ).toDouble();
447 if ( layer->
customProperty( QStringLiteral(
"labeling/fontSizeUnit" ) ).toString().isEmpty() )
449 d->fontSizeUnits = layer->
customProperty( QStringLiteral(
"labeling/fontSizeInMapUnits" ), QVariant(
false ) ).toBool() ?
459 if ( layer->
customProperty( QStringLiteral(
"labeling/fontSizeMapUnitScale" ) ).toString().isEmpty() )
462 double oldMin = layer->
customProperty( QStringLiteral(
"labeling/fontSizeMapUnitMinScale" ), 0.0 ).toDouble();
463 d->fontSizeMapUnitScale.minScale = oldMin != 0 ? 1.0 / oldMin : 0;
464 double oldMax = layer->
customProperty( QStringLiteral(
"labeling/fontSizeMapUnitMaxScale" ), 0.0 ).toDouble();
465 d->fontSizeMapUnitScale.maxScale = oldMax != 0 ? 1.0 / oldMax : 0;
471 int fontWeight = layer->
customProperty( QStringLiteral(
"labeling/fontWeight" ) ).toInt();
472 bool fontItalic = layer->
customProperty( QStringLiteral(
"labeling/fontItalic" ) ).toBool();
473 d->textFont = QFont( fontFamily, d->fontSize, fontWeight, fontItalic );
477 d->textFont.setUnderline( layer->
customProperty( QStringLiteral(
"labeling/fontUnderline" ) ).toBool() );
478 d->textFont.setStrikeOut( layer->
customProperty( QStringLiteral(
"labeling/fontStrikeout" ) ).toBool() );
479 d->textFont.setLetterSpacing( QFont::AbsoluteSpacing, layer->
customProperty( QStringLiteral(
"labeling/fontLetterSpacing" ), QVariant( 0.0 ) ).toDouble() );
480 d->textFont.setWordSpacing( layer->
customProperty( QStringLiteral(
"labeling/fontWordSpacing" ), QVariant( 0.0 ) ).toDouble() );
482 if ( layer->
customProperty( QStringLiteral(
"labeling/textOpacity" ) ).toString().isEmpty() )
484 d->opacity = ( 1 - layer->
customProperty( QStringLiteral(
"labeling/textTransp" ) ).toInt() / 100.0 );
488 d->opacity = ( layer->
customProperty( QStringLiteral(
"labeling/textOpacity" ) ).toDouble() );
492 d->multilineHeight = layer->
customProperty( QStringLiteral(
"labeling/multilineHeight" ), QVariant( 1.0 ) ).toDouble();
503 QDomElement textStyleElem;
504 if ( elem.nodeName() == QLatin1String(
"text-style" ) )
505 textStyleElem = elem;
507 textStyleElem = elem.firstChildElement( QStringLiteral(
"text-style" ) );
508 QFont appFont = QApplication::font();
510 QString fontFamily = mTextFontFamily;
512 const QDomElement familiesElem = textStyleElem.firstChildElement( QStringLiteral(
"families" ) );
513 const QDomNodeList familyNodes = familiesElem.childNodes();
515 families.reserve( familyNodes.size() );
516 for (
int i = 0; i < familyNodes.count(); ++i )
518 const QDomElement familyElem = familyNodes.at( i ).toElement();
519 families << familyElem.attribute( QStringLiteral(
"name" ) );
523 mTextFontFound =
false;
529 mTextFontFound =
true;
533 for (
const QString &family : std::as_const(
families ) )
539 mTextFontFound =
true;
540 fontFamily = processedFamily;
545 if ( !mTextFontFound )
548 fontFamily = appFont.family();
554 mTextFontFound =
true;
557 if ( !mTextFontFound )
559 context.
pushMessage( QObject::tr(
"Font “%1” not available on system" ).arg( mTextFontFamily ) );
562 if ( textStyleElem.hasAttribute( QStringLiteral(
"fontSize" ) ) )
564 d->fontSize = textStyleElem.attribute( QStringLiteral(
"fontSize" ) ).toDouble();
568 d->fontSize = appFont.pointSizeF();
571 if ( !textStyleElem.hasAttribute( QStringLiteral(
"fontSizeUnit" ) ) )
573 d->fontSizeUnits = textStyleElem.attribute( QStringLiteral(
"fontSizeInMapUnits" ) ).toUInt() == 0 ?
QgsUnitTypes::RenderPoints
581 if ( !textStyleElem.hasAttribute( QStringLiteral(
"fontSizeMapUnitScale" ) ) )
584 double oldMin = textStyleElem.attribute( QStringLiteral(
"fontSizeMapUnitMinScale" ), QStringLiteral(
"0" ) ).toDouble();
585 d->fontSizeMapUnitScale.minScale = oldMin != 0 ? 1.0 / oldMin : 0;
586 double oldMax = textStyleElem.attribute( QStringLiteral(
"fontSizeMapUnitMaxScale" ), QStringLiteral(
"0" ) ).toDouble();
587 d->fontSizeMapUnitScale.maxScale = oldMax != 0 ? 1.0 / oldMax : 0;
593 int fontWeight = textStyleElem.attribute( QStringLiteral(
"fontWeight" ) ).toInt();
594 bool fontItalic = textStyleElem.attribute( QStringLiteral(
"fontItalic" ) ).toInt();
595 d->textFont = QFont( fontFamily, d->fontSize, fontWeight, fontItalic );
596 d->textFont.setPointSizeF( d->fontSize );
599 d->forcedBold = textStyleElem.attribute( QStringLiteral(
"forcedBold" ) ).toInt();
600 d->forcedItalic = textStyleElem.attribute( QStringLiteral(
"forcedItalic" ) ).toInt();
601 d->textFont.setUnderline( textStyleElem.attribute( QStringLiteral(
"fontUnderline" ) ).toInt() );
602 d->textFont.setStrikeOut( textStyleElem.attribute( QStringLiteral(
"fontStrikeout" ) ).toInt() );
603 d->textFont.setKerning( textStyleElem.attribute( QStringLiteral(
"fontKerning" ), QStringLiteral(
"1" ) ).toInt() );
604 d->textFont.setLetterSpacing( QFont::AbsoluteSpacing, textStyleElem.attribute( QStringLiteral(
"fontLetterSpacing" ), QStringLiteral(
"0" ) ).toDouble() );
605 d->textFont.setWordSpacing( textStyleElem.attribute( QStringLiteral(
"fontWordSpacing" ), QStringLiteral(
"0" ) ).toDouble() );
607 if ( !textStyleElem.hasAttribute( QStringLiteral(
"textOpacity" ) ) )
609 d->opacity = ( 1 - textStyleElem.attribute( QStringLiteral(
"textTransp" ) ).toInt() / 100.0 );
613 d->opacity = ( textStyleElem.attribute( QStringLiteral(
"textOpacity" ) ).toDouble() );
615#ifdef HAS_KDE_QT5_FONT_STRETCH_FIX
616 d->textFont.setStretch( textStyleElem.attribute( QStringLiteral(
"stretchFactor" ), QStringLiteral(
"100" ) ).toInt() );
624 if ( !textStyleElem.hasAttribute( QStringLiteral(
"multilineHeight" ) ) )
626 QDomElement textFormatElem = elem.firstChildElement( QStringLiteral(
"text-format" ) );
627 d->multilineHeight = textFormatElem.attribute( QStringLiteral(
"multilineHeight" ), QStringLiteral(
"1" ) ).toDouble();
631 d->multilineHeight = textStyleElem.attribute( QStringLiteral(
"multilineHeight" ), QStringLiteral(
"1" ) ).toDouble();
634 d->multilineHeightUnits =
QgsUnitTypes::decodeRenderUnit( textStyleElem.attribute( QStringLiteral(
"multilineHeightUnit" ), QStringLiteral(
"percent" ) ), &ok );
636 if ( textStyleElem.hasAttribute( QStringLiteral(
"capitalization" ) ) )
639 d->capitalization =
static_cast< Qgis::Capitalization >( textStyleElem.attribute( QStringLiteral(
"fontCapitals" ), QStringLiteral(
"0" ) ).toUInt() );
642 d->textFont.setCapitalization( QFont::SmallCaps );
644 d->allowHtmlFormatting = textStyleElem.attribute( QStringLiteral(
"allowHtml" ), QStringLiteral(
"0" ) ).toInt();
646 if ( textStyleElem.firstChildElement( QStringLiteral(
"text-buffer" ) ).isNull() )
648 mBufferSettings.
readXml( elem );
652 mBufferSettings.
readXml( textStyleElem );
654 if ( textStyleElem.firstChildElement( QStringLiteral(
"text-mask" ) ).isNull() )
660 mMaskSettings.
readXml( textStyleElem );
662 if ( textStyleElem.firstChildElement( QStringLiteral(
"shadow" ) ).isNull() )
664 mShadowSettings.
readXml( elem );
668 mShadowSettings.
readXml( textStyleElem );
670 if ( textStyleElem.firstChildElement( QStringLiteral(
"background" ) ).isNull() )
672 mBackgroundSettings.
readXml( elem, context );
676 mBackgroundSettings.
readXml( textStyleElem, context );
679 QDomElement ddElem = textStyleElem.firstChildElement( QStringLiteral(
"dd_properties" ) );
680 if ( ddElem.isNull() )
682 ddElem = elem.firstChildElement( QStringLiteral(
"dd_properties" ) );
684 if ( !ddElem.isNull() )
691 d->mDataDefinedProperties.clear();
698 QDomElement textStyleElem = doc.createElement( QStringLiteral(
"text-style" ) );
699 textStyleElem.setAttribute( QStringLiteral(
"fontFamily" ), d->textFont.family() );
701 QDomElement familiesElem = doc.createElement( QStringLiteral(
"families" ) );
702 for (
const QString &family : std::as_const( d->families ) )
704 QDomElement familyElem = doc.createElement( QStringLiteral(
"family" ) );
705 familyElem.setAttribute( QStringLiteral(
"name" ), family );
706 familiesElem.appendChild( familyElem );
708 textStyleElem.appendChild( familiesElem );
711 textStyleElem.setAttribute( QStringLiteral(
"fontSize" ), d->fontSize );
714 textStyleElem.setAttribute( QStringLiteral(
"fontWeight" ), d->textFont.weight() );
715 textStyleElem.setAttribute( QStringLiteral(
"fontItalic" ), d->textFont.italic() );
716 textStyleElem.setAttribute( QStringLiteral(
"fontStrikeout" ), d->textFont.strikeOut() );
717 textStyleElem.setAttribute( QStringLiteral(
"fontUnderline" ), d->textFont.underline() );
718 textStyleElem.setAttribute( QStringLiteral(
"forcedBold" ), d->forcedBold );
719 textStyleElem.setAttribute( QStringLiteral(
"forcedItalic" ), d->forcedItalic );
722 textStyleElem.setAttribute( QStringLiteral(
"fontLetterSpacing" ), d->textFont.letterSpacing() );
723 textStyleElem.setAttribute( QStringLiteral(
"fontWordSpacing" ), d->textFont.wordSpacing() );
724 textStyleElem.setAttribute( QStringLiteral(
"fontKerning" ), d->textFont.kerning() );
725 textStyleElem.setAttribute( QStringLiteral(
"textOpacity" ), d->opacity );
726#ifdef HAS_KDE_QT5_FONT_STRETCH_FIX
727 if ( d->textFont.stretch() > 0 )
728 textStyleElem.setAttribute( QStringLiteral(
"stretchFactor" ), d->textFont.stretch() );
732 textStyleElem.setAttribute( QStringLiteral(
"multilineHeight" ), d->multilineHeight );
733 textStyleElem.setAttribute( QStringLiteral(
"multilineHeightUnit" ),
QgsUnitTypes::encodeUnit( d->multilineHeightUnits ) );
735 textStyleElem.setAttribute( QStringLiteral(
"allowHtml" ), d->allowHtmlFormatting ? QStringLiteral(
"1" ) : QStringLiteral(
"0" ) );
736 textStyleElem.setAttribute( QStringLiteral(
"capitalization" ), QString::number(
static_cast< int >( d->capitalization ) ) );
738 QDomElement ddElem = doc.createElement( QStringLiteral(
"dd_properties" ) );
741 textStyleElem.appendChild( mBufferSettings.
writeXml( doc ) );
742 textStyleElem.appendChild( mMaskSettings.
writeXml( doc ) );
743 textStyleElem.appendChild( mBackgroundSettings.
writeXml( doc, context ) );
744 textStyleElem.appendChild( mShadowSettings.
writeXml( doc ) );
745 textStyleElem.appendChild( ddElem );
747 return textStyleElem;
754 QMimeData *mimeData =
new QMimeData;
755 mimeData->setColorData( QVariant(
color() ) );
758 QDomDocument textDoc;
759 QDomElement textElem =
writeXml( textDoc, rwContext );
760 textDoc.appendChild( textElem );
761 mimeData->setText( textDoc.toString() );
770 if (
font.pointSizeF() > 0 )
775 else if (
font.pixelSize() > 0 )
790 f.setPointSizeF(
size() );
794 f.setPointSizeF(
size() * 2.83464567 );
798 f.setPointSizeF(
size() * 72 );
802 f.setPixelSize(
static_cast< int >( std::round(
size() ) ) );
823 QString text = data->text();
824 if ( !text.isEmpty() )
830 if ( doc.setContent( text ) )
832 elem = doc.documentElement();
834 format.
readXml( elem, rwContext );
845 if ( d->blendMode != QPainter::CompositionMode_SourceOver )
848 if ( mBufferSettings.
enabled() && mBufferSettings.
blendMode() != QPainter::CompositionMode_SourceOver )
851 if ( mBackgroundSettings.
enabled() && mBackgroundSettings.
blendMode() != QPainter::CompositionMode_SourceOver )
854 if ( mShadowSettings.
enabled() && mShadowSettings.
blendMode() != QPainter::CompositionMode_SourceOver )
863 return d->mDataDefinedProperties;
868 return d->mDataDefinedProperties;
873 QSet< QString > fields = d->mDataDefinedProperties.referencedFields( context.
expressionContext(),
true );
884 d->mDataDefinedProperties = collection;
890 if ( !d->mDataDefinedProperties.hasActiveProperties() )
893 QString ddFontFamily;
898 QString family = exprVal.toString().trimmed();
900 if ( d->textFont.family() != family )
906 ddFontFamily = family;
917 QString fontstyle = exprVal.toString().trimmed();
918 ddFontStyle = fontstyle;
928 bool ddItalic =
false;
938 QFontDatabase fontDb;
939 QFont appFont = QApplication::font();
940 bool newFontBuilt =
false;
941 if ( ddBold || ddItalic )
944 newFont = QFont( !ddFontFamily.isEmpty() ? ddFontFamily : d->textFont.family() );
946 newFont.setBold( ddBold );
947 newFont.setItalic( ddItalic );
949 else if ( !ddFontStyle.isEmpty()
950 && ddFontStyle.compare( QLatin1String(
"Ignore" ), Qt::CaseInsensitive ) != 0 )
952 if ( !ddFontFamily.isEmpty() )
955 QFont styledfont = fontDb.font( ddFontFamily, ddFontStyle, appFont.pointSize() );
956 if ( appFont != styledfont )
958 newFont = styledfont;
966 else if ( !ddFontFamily.isEmpty() )
968 if ( ddFontStyle.compare( QLatin1String(
"Ignore" ), Qt::CaseInsensitive ) != 0 )
971 QFont styledfont = fontDb.font( ddFontFamily, d->textNamedStyle, appFont.pointSize() );
972 if ( appFont != styledfont )
974 newFont = styledfont;
980 newFont = QFont( ddFontFamily );
988 newFont.setUnderline( d->textFont.underline() );
989 newFont.setStrikeOut( d->textFont.strikeOut() );
990 newFont.setWordSpacing( d->textFont.wordSpacing() );
991 newFont.setLetterSpacing( QFont::AbsoluteSpacing, d->textFont.letterSpacing() );
992 d->textFont = newFont;
1022 QString units = exprVal.toString();
1023 if ( !units.isEmpty() )
1028 d->fontSizeUnits = res;
1038 d->opacity = val.toDouble() / 100.0;
1042#ifdef HAS_KDE_QT5_FONT_STRETCH_FIX
1049 d->textFont.setStretch( val.toInt() );
1067 d->textFont.setLetterSpacing( QFont::AbsoluteSpacing, val.toDouble() );
1077 d->textFont.setWordSpacing( val.toDouble() );
1084 QString blendstr = exprVal.toString().trimmed();
1085 if ( !blendstr.isEmpty() )
1098 QPixmap pixmap(
size );
1099 pixmap.fill( Qt::transparent );
1101 painter.begin( &pixmap );
1103 painter.setRenderHint( QPainter::Antialiasing );
1105 QRect rect( 0, 0,
size.width(),
size.height() );
1108 painter.setPen( Qt::NoPen );
1110 if ( ( background1.lightnessF() < 0.7 ) )
1112 background1 = background1.darker( 125 );
1116 background1 = background1.lighter( 125 );
1119 QLinearGradient linearGrad( QPointF( 0, 0 ), QPointF( 0, rect.height() ) );
1120 linearGrad.setColorAt( 0, background1 );
1121 linearGrad.setColorAt( 1, background2 );
1122 painter.setBrush( QBrush( linearGrad ) );
1123 if (
size.width() > 30 )
1125 painter.drawRoundedRect( rect, 6, 6 );
1130 painter.drawRect( rect );
1132 painter.setBrush( Qt::NoBrush );
1133 painter.setPen( Qt::NoPen );
1141 QWidget *activeWindow = QApplication::activeWindow();
1142 const double logicalDpiX = activeWindow && activeWindow->screen() ? activeWindow->screen()->logicalDotsPerInchX() : 96.0;
1155 ? fontSize * tempFormat.
buffer().
size() / 100
1160 double ytrans = 0.0;
1163 ? fontSize * tempFormat.
buffer().
size() / 100
1168 const QStringList text = QStringList() << ( previewText.isEmpty() ? QObject::tr(
"Aa" ) : previewText );
1170 QRectF textRect = rect;
1171 textRect.setLeft( xtrans + padding );
1172 textRect.setWidth( rect.width() - xtrans - 2 * padding );
1174 if ( textRect.width() > 2000 )
1175 textRect.setWidth( 2000 - 2 * padding );
1177 const double bottom = textRect.height() / 2 + textHeight / 2;
1178 textRect.setTop( bottom - textHeight );
1179 textRect.setBottom( bottom );
1184 painter.setBrush( Qt::NoBrush );
1186 if (
size.width() > 30 )
1188 painter.drawRoundedRect( rect, 6, 6 );
1193 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)
TextOrientation
Text orientations.
@ Antialiasing
Use antialiasing while drawing.
static QgsFontManager * fontManager()
Returns the application font manager, which manages available fonts and font installation for the QGI...
void setOriginalValueVariable(const QVariant &value)
Sets the original value variable value for the context.
QString processFontFamilyName(const QString &name) const
Processes a font family name, applying any matching fontFamilyReplacements() to the name.
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.
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).
QgsExpressionContext & expressionContext()
Gets the expression context.
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 setOrientation(Qgis::TextOrientation orientation)
Sets the orientation for the text.
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.
void setForcedItalic(bool forced)
Sets whether the format is set to force an italic style.
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.
void setLineHeightUnit(QgsUnitTypes::RenderUnit unit)
Sets the unit for the line height for text.
int stretchFactor() const
Returns the text's stretch factor.
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.
QgsUnitTypes::RenderUnit lineHeightUnit() const
Returns the units for the line height for text.
bool operator==(const QgsTextFormat &other) const
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.
bool forcedItalic() const
Returns true if the format is set to force an italic 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.
void setForcedBold(bool forced)
Sets whether the format is set to force a bold style.
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.
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.
Qgis::TextOrientation orientation() const
Returns the orientation of the text.
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)
bool forcedBold() const
Returns true if the format is set to force a bold style.
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 Qgis::TextOrientation decodeTextOrientation(const QString &name, bool *ok=nullptr)
Attempts to decode a string representation of 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 QString encodeTextOrientation(Qgis::TextOrientation orientation)
Encodes a text orientation.
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, Qgis::TextLayoutMode mode=Qgis::TextLayoutMode::Point, QFontMetricsF *fontMetrics=nullptr, Qgis::TextRendererFlags flags=Qgis::TextRendererFlags(), double maxLineWidth=0)
Returns the height of a text based on a given format.
static void drawText(const QRectF &rect, double rotation, Qgis::TextHorizontalAlignment alignment, const QStringList &textLines, QgsRenderContext &context, const QgsTextFormat &format, bool drawAsOutlines=true, Qgis::TextVerticalAlignment vAlignment=Qgis::TextVerticalAlignment::Top, Qgis::TextRendererFlags flags=Qgis::TextRendererFlags())
Draws text within a rectangle using the specified settings.
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.
static bool isNull(const QVariant &variant)
Returns true if the specified variant should be considered a NULL value.
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)