30#include <QFontDatabase>
37 d =
new QgsTextSettingsPrivate();
41 : mBufferSettings( other.mBufferSettings )
42 , mBackgroundSettings( other.mBackgroundSettings )
43 , mShadowSettings( other.mShadowSettings )
44 , mMaskSettings( other.mMaskSettings )
45 , mTextFontFamily( other.mTextFontFamily )
46 , mTextFontFound( other.mTextFontFound )
55 mBufferSettings = other.mBufferSettings;
56 mBackgroundSettings = other.mBackgroundSettings;
57 mShadowSettings = other.mShadowSettings;
58 mMaskSettings = other.mMaskSettings;
59 mTextFontFamily = other.mTextFontFamily;
60 mTextFontFound = other.mTextFontFound;
71 if ( d->isValid != other.
isValid()
72 || d->textFont != other.
font()
74 || d->fontSizeUnits != other.
sizeUnit()
76 || d->fontSize != other.
size()
77 || d->textColor != other.
color()
78 || d->opacity != other.
opacity()
88 || mBufferSettings != other.mBufferSettings
89 || mBackgroundSettings != other.mBackgroundSettings
90 || mShadowSettings != other.mShadowSettings
91 || mMaskSettings != other.mMaskSettings
101 return !( *
this == other );
117 return mBufferSettings;
123 mBufferSettings = bufferSettings;
129 return mBackgroundSettings;
135 mBackgroundSettings = backgroundSettings;
141 return mShadowSettings;
147 mShadowSettings = shadowSettings;
153 return mMaskSettings;
159 mMaskSettings = maskSettings;
172 QFont
font = d->textFont;
173 if ( scaleFactor == 1 )
176 d->fontSizeMapUnitScale );
177 if ( fontPixelSize == 0 )
184 font.setPixelSize( fontPixelSize );
188 double fontPixelSize = context.
convertToPainterUnits( d->fontSize, d->fontSizeUnits, d->fontSizeMapUnitScale );
195 const int roundedPixelSize =
static_cast< int >( std::round( scaleFactor * fontPixelSize + 0.5 ) );
196 font.setPixelSize( roundedPixelSize );
199 font.setLetterSpacing( QFont::AbsoluteSpacing, context.
convertToPainterUnits( d->textFont.letterSpacing(), d->fontSizeUnits, d->fontSizeMapUnitScale ) * scaleFactor );
200 font.setWordSpacing( context.
convertToPainterUnits( d->textFont.wordSpacing(), d->fontSizeUnits, d->fontSizeMapUnitScale ) * scaleFactor * scaleFactor );
204 font.setCapitalization( QFont::SmallCaps );
217 if ( !d->textNamedStyle.isEmpty() )
218 return d->textNamedStyle;
221 return db.styleString( d->textFont );
228 d->textNamedStyle = style;
233 return d->forcedBold;
239 d->textFont.setBold( forced );
240 d->forcedBold =
true;
245 return d->forcedItalic;
251 d->textFont.setItalic( forced );
252 d->forcedItalic =
true;
268 return d->fontSizeUnits;
274 d->fontSizeUnits = unit;
279 return d->fontSizeMapUnitScale;
285 d->fontSizeMapUnitScale = scale;
307 d->textColor =
color;
323 return d->textFont.stretch() > 0 ? d->textFont.stretch() : 100;
329 d->textFont.setStretch( factor );
345 return d->multilineHeight;
351 d->multilineHeight = height;
356 return d->multilineHeightUnits;
362 d->multilineHeightUnits = unit;
367 return d->orientation;
381 : d->capitalization ;
388#if defined(HAS_KDE_QT5_SMALL_CAPS_FIX) || QT_VERSION >= QT_VERSION_CHECK(6, 3, 0)
391 d->textFont.setCapitalization( QFont::MixedCase );
397 return d->allowHtmlFormatting;
403 d->allowHtmlFormatting = allow;
408 return d->previewBackgroundColor;
414 d->previewBackgroundColor =
color;
420 QFont appFont = QApplication::font();
422 QString fontFamily = mTextFontFamily;
426 mTextFontFound =
false;
432 fontFamily = appFont.family();
436 mTextFontFound =
true;
441 d->fontSize = appFont.pointSizeF();
445 d->fontSize = layer->
customProperty( QStringLiteral(
"labeling/fontSize" ) ).toDouble();
448 if ( layer->
customProperty( QStringLiteral(
"labeling/fontSizeUnit" ) ).toString().isEmpty() )
450 d->fontSizeUnits = layer->
customProperty( QStringLiteral(
"labeling/fontSizeInMapUnits" ), QVariant(
false ) ).toBool() ?
451 Qgis::RenderUnit::MapUnits : Qgis::RenderUnit::Points;
458 d->fontSizeUnits = Qgis::RenderUnit::Points;
460 if ( layer->
customProperty( QStringLiteral(
"labeling/fontSizeMapUnitScale" ) ).toString().isEmpty() )
463 double oldMin = layer->
customProperty( QStringLiteral(
"labeling/fontSizeMapUnitMinScale" ), 0.0 ).toDouble();
464 d->fontSizeMapUnitScale.minScale = oldMin != 0 ? 1.0 / oldMin : 0;
465 double oldMax = layer->
customProperty( QStringLiteral(
"labeling/fontSizeMapUnitMaxScale" ), 0.0 ).toDouble();
466 d->fontSizeMapUnitScale.maxScale = oldMax != 0 ? 1.0 / oldMax : 0;
472 int fontWeight = layer->
customProperty( QStringLiteral(
"labeling/fontWeight" ) ).toInt();
473 bool fontItalic = layer->
customProperty( QStringLiteral(
"labeling/fontItalic" ) ).toBool();
474 d->textFont = QFont( fontFamily, d->fontSize, fontWeight, fontItalic );
478 d->textFont.setUnderline( layer->
customProperty( QStringLiteral(
"labeling/fontUnderline" ) ).toBool() );
479 d->textFont.setStrikeOut( layer->
customProperty( QStringLiteral(
"labeling/fontStrikeout" ) ).toBool() );
480 d->textFont.setLetterSpacing( QFont::AbsoluteSpacing, layer->
customProperty( QStringLiteral(
"labeling/fontLetterSpacing" ), QVariant( 0.0 ) ).toDouble() );
481 d->textFont.setWordSpacing( layer->
customProperty( QStringLiteral(
"labeling/fontWordSpacing" ), QVariant( 0.0 ) ).toDouble() );
483 if ( layer->
customProperty( QStringLiteral(
"labeling/textOpacity" ) ).toString().isEmpty() )
485 d->opacity = ( 1 - layer->
customProperty( QStringLiteral(
"labeling/textTransp" ) ).toInt() / 100.0 );
489 d->opacity = ( layer->
customProperty( QStringLiteral(
"labeling/textOpacity" ) ).toDouble() );
492 static_cast< Qgis::BlendMode >( layer->
customProperty( QStringLiteral(
"labeling/blendMode" ), QVariant(
static_cast< int >( Qgis::BlendMode::Normal ) ) ).toUInt() ) );
493 d->multilineHeight = layer->
customProperty( QStringLiteral(
"labeling/multilineHeight" ), QVariant( 1.0 ) ).toDouble();
504 QDomElement textStyleElem;
505 if ( elem.nodeName() == QLatin1String(
"text-style" ) )
506 textStyleElem = elem;
508 textStyleElem = elem.firstChildElement( QStringLiteral(
"text-style" ) );
509 QFont appFont = QApplication::font();
511 QString fontFamily = mTextFontFamily;
513 const QDomElement familiesElem = textStyleElem.firstChildElement( QStringLiteral(
"families" ) );
514 const QDomNodeList familyNodes = familiesElem.childNodes();
516 families.reserve( familyNodes.size() );
517 for (
int i = 0; i < familyNodes.count(); ++i )
519 const QDomElement familyElem = familyNodes.at( i ).toElement();
520 families << familyElem.attribute( QStringLiteral(
"name" ) );
524 mTextFontFound =
false;
530 mTextFontFound =
true;
534 for (
const QString &family : std::as_const(
families ) )
540 mTextFontFound =
true;
541 fontFamily = processedFamily;
546 if ( !mTextFontFound )
549 fontFamily = appFont.family();
555 mTextFontFound =
true;
558 if ( !mTextFontFound )
560 context.
pushMessage( QObject::tr(
"Font “%1” not available on system" ).arg( mTextFontFamily ) );
563 if ( textStyleElem.hasAttribute( QStringLiteral(
"fontSize" ) ) )
565 d->fontSize = textStyleElem.attribute( QStringLiteral(
"fontSize" ) ).toDouble();
569 d->fontSize = appFont.pointSizeF();
572 if ( !textStyleElem.hasAttribute( QStringLiteral(
"fontSizeUnit" ) ) )
574 d->fontSizeUnits = textStyleElem.attribute( QStringLiteral(
"fontSizeInMapUnits" ) ).toUInt() == 0 ? Qgis::RenderUnit::Points
575 : Qgis::RenderUnit::MapUnits;
582 if ( !textStyleElem.hasAttribute( QStringLiteral(
"fontSizeMapUnitScale" ) ) )
585 double oldMin = textStyleElem.attribute( QStringLiteral(
"fontSizeMapUnitMinScale" ), QStringLiteral(
"0" ) ).toDouble();
586 d->fontSizeMapUnitScale.minScale = oldMin != 0 ? 1.0 / oldMin : 0;
587 double oldMax = textStyleElem.attribute( QStringLiteral(
"fontSizeMapUnitMaxScale" ), QStringLiteral(
"0" ) ).toDouble();
588 d->fontSizeMapUnitScale.maxScale = oldMax != 0 ? 1.0 / oldMax : 0;
594 int fontWeight = textStyleElem.attribute( QStringLiteral(
"fontWeight" ) ).toInt();
595 bool fontItalic = textStyleElem.attribute( QStringLiteral(
"fontItalic" ) ).toInt();
596 d->textFont = QFont( fontFamily, d->fontSize, fontWeight, fontItalic );
597 d->textFont.setPointSizeF( d->fontSize );
600 d->forcedBold = textStyleElem.attribute( QStringLiteral(
"forcedBold" ) ).toInt();
601 d->forcedItalic = textStyleElem.attribute( QStringLiteral(
"forcedItalic" ) ).toInt();
602 d->textFont.setUnderline( textStyleElem.attribute( QStringLiteral(
"fontUnderline" ) ).toInt() );
603 d->textFont.setStrikeOut( textStyleElem.attribute( QStringLiteral(
"fontStrikeout" ) ).toInt() );
604 d->textFont.setKerning( textStyleElem.attribute( QStringLiteral(
"fontKerning" ), QStringLiteral(
"1" ) ).toInt() );
605 d->textFont.setLetterSpacing( QFont::AbsoluteSpacing, textStyleElem.attribute( QStringLiteral(
"fontLetterSpacing" ), QStringLiteral(
"0" ) ).toDouble() );
606 d->textFont.setWordSpacing( textStyleElem.attribute( QStringLiteral(
"fontWordSpacing" ), QStringLiteral(
"0" ) ).toDouble() );
608 if ( !textStyleElem.hasAttribute( QStringLiteral(
"textOpacity" ) ) )
610 d->opacity = ( 1 - textStyleElem.attribute( QStringLiteral(
"textTransp" ) ).toInt() / 100.0 );
614 d->opacity = ( textStyleElem.attribute( QStringLiteral(
"textOpacity" ) ).toDouble() );
616#ifdef HAS_KDE_QT5_FONT_STRETCH_FIX
617 d->textFont.setStretch( textStyleElem.attribute( QStringLiteral(
"stretchFactor" ), QStringLiteral(
"100" ) ).toInt() );
623 static_cast< Qgis::BlendMode >( textStyleElem.attribute( QStringLiteral(
"blendMode" ), QString::number(
static_cast< int >( Qgis::BlendMode::Normal ) ) ).toUInt() ) );
625 if ( !textStyleElem.hasAttribute( QStringLiteral(
"multilineHeight" ) ) )
627 QDomElement textFormatElem = elem.firstChildElement( QStringLiteral(
"text-format" ) );
628 d->multilineHeight = textFormatElem.attribute( QStringLiteral(
"multilineHeight" ), QStringLiteral(
"1" ) ).toDouble();
632 d->multilineHeight = textStyleElem.attribute( QStringLiteral(
"multilineHeight" ), QStringLiteral(
"1" ) ).toDouble();
635 d->multilineHeightUnits =
QgsUnitTypes::decodeRenderUnit( textStyleElem.attribute( QStringLiteral(
"multilineHeightUnit" ), QStringLiteral(
"percent" ) ), &ok );
637 if ( textStyleElem.hasAttribute( QStringLiteral(
"capitalization" ) ) )
640 d->capitalization =
static_cast< Qgis::Capitalization >( textStyleElem.attribute( QStringLiteral(
"fontCapitals" ), QStringLiteral(
"0" ) ).toUInt() );
643 d->textFont.setCapitalization( QFont::SmallCaps );
645 d->allowHtmlFormatting = textStyleElem.attribute( QStringLiteral(
"allowHtml" ), QStringLiteral(
"0" ) ).toInt();
647 if ( textStyleElem.firstChildElement( QStringLiteral(
"text-buffer" ) ).isNull() )
649 mBufferSettings.
readXml( elem );
653 mBufferSettings.
readXml( textStyleElem );
655 if ( textStyleElem.firstChildElement( QStringLiteral(
"text-mask" ) ).isNull() )
661 mMaskSettings.
readXml( textStyleElem );
663 if ( textStyleElem.firstChildElement( QStringLiteral(
"shadow" ) ).isNull() )
665 mShadowSettings.
readXml( elem );
669 mShadowSettings.
readXml( textStyleElem );
671 if ( textStyleElem.firstChildElement( QStringLiteral(
"background" ) ).isNull() )
673 mBackgroundSettings.
readXml( elem, context );
677 mBackgroundSettings.
readXml( textStyleElem, context );
680 QDomElement ddElem = textStyleElem.firstChildElement( QStringLiteral(
"dd_properties" ) );
681 if ( ddElem.isNull() )
683 ddElem = elem.firstChildElement( QStringLiteral(
"dd_properties" ) );
685 if ( !ddElem.isNull() )
692 d->mDataDefinedProperties.clear();
699 QDomElement textStyleElem = doc.createElement( QStringLiteral(
"text-style" ) );
700 textStyleElem.setAttribute( QStringLiteral(
"fontFamily" ), d->textFont.family() );
702 QDomElement familiesElem = doc.createElement( QStringLiteral(
"families" ) );
703 for (
const QString &family : std::as_const( d->families ) )
705 QDomElement familyElem = doc.createElement( QStringLiteral(
"family" ) );
706 familyElem.setAttribute( QStringLiteral(
"name" ), family );
707 familiesElem.appendChild( familyElem );
709 textStyleElem.appendChild( familiesElem );
712 textStyleElem.setAttribute( QStringLiteral(
"fontSize" ), d->fontSize );
715 textStyleElem.setAttribute( QStringLiteral(
"fontWeight" ), d->textFont.weight() );
716 textStyleElem.setAttribute( QStringLiteral(
"fontItalic" ), d->textFont.italic() );
717 textStyleElem.setAttribute( QStringLiteral(
"fontStrikeout" ), d->textFont.strikeOut() );
718 textStyleElem.setAttribute( QStringLiteral(
"fontUnderline" ), d->textFont.underline() );
719 textStyleElem.setAttribute( QStringLiteral(
"forcedBold" ), d->forcedBold );
720 textStyleElem.setAttribute( QStringLiteral(
"forcedItalic" ), d->forcedItalic );
723 textStyleElem.setAttribute( QStringLiteral(
"fontLetterSpacing" ), d->textFont.letterSpacing() );
724 textStyleElem.setAttribute( QStringLiteral(
"fontWordSpacing" ), d->textFont.wordSpacing() );
725 textStyleElem.setAttribute( QStringLiteral(
"fontKerning" ), d->textFont.kerning() );
726 textStyleElem.setAttribute( QStringLiteral(
"textOpacity" ), d->opacity );
727#ifdef HAS_KDE_QT5_FONT_STRETCH_FIX
728 if ( d->textFont.stretch() > 0 )
729 textStyleElem.setAttribute( QStringLiteral(
"stretchFactor" ), d->textFont.stretch() );
733 textStyleElem.setAttribute( QStringLiteral(
"multilineHeight" ), d->multilineHeight );
734 textStyleElem.setAttribute( QStringLiteral(
"multilineHeightUnit" ),
QgsUnitTypes::encodeUnit( d->multilineHeightUnits ) );
736 textStyleElem.setAttribute( QStringLiteral(
"allowHtml" ), d->allowHtmlFormatting ? QStringLiteral(
"1" ) : QStringLiteral(
"0" ) );
737 textStyleElem.setAttribute( QStringLiteral(
"capitalization" ), QString::number(
static_cast< int >( d->capitalization ) ) );
739 QDomElement ddElem = doc.createElement( QStringLiteral(
"dd_properties" ) );
742 textStyleElem.appendChild( mBufferSettings.
writeXml( doc ) );
743 textStyleElem.appendChild( mMaskSettings.
writeXml( doc ) );
744 textStyleElem.appendChild( mBackgroundSettings.
writeXml( doc, context ) );
745 textStyleElem.appendChild( mShadowSettings.
writeXml( doc ) );
746 textStyleElem.appendChild( ddElem );
748 return textStyleElem;
755 QMimeData *mimeData =
new QMimeData;
756 mimeData->setColorData( QVariant(
color() ) );
759 QDomDocument textDoc;
760 QDomElement textElem =
writeXml( textDoc, rwContext );
761 textDoc.appendChild( textElem );
762 mimeData->setText( textDoc.toString() );
771 if (
font.pointSizeF() > 0 )
776 else if (
font.pixelSize() > 0 )
790 case Qgis::RenderUnit::Points:
791 f.setPointSizeF(
size() );
794 case Qgis::RenderUnit::Millimeters:
795 f.setPointSizeF(
size() * 2.83464567 );
798 case Qgis::RenderUnit::Inches:
799 f.setPointSizeF(
size() * 72 );
802 case Qgis::RenderUnit::Pixels:
803 f.setPixelSize(
static_cast< int >( std::round(
size() ) ) );
806 case Qgis::RenderUnit::MapUnits:
807 case Qgis::RenderUnit::MetersInMapUnits:
808 case Qgis::RenderUnit::Unknown:
809 case Qgis::RenderUnit::Percentage:
824 QString text = data->text();
825 if ( !text.isEmpty() )
831 if ( doc.setContent( text ) )
833 elem = doc.documentElement();
835 format.
readXml( elem, rwContext );
846 if ( d->blendMode != QPainter::CompositionMode_SourceOver )
849 if ( mBufferSettings.
enabled() && mBufferSettings.
blendMode() != QPainter::CompositionMode_SourceOver )
852 if ( mBackgroundSettings.
enabled() && mBackgroundSettings.
blendMode() != QPainter::CompositionMode_SourceOver )
855 if ( mShadowSettings.
enabled() && mShadowSettings.
blendMode() != QPainter::CompositionMode_SourceOver )
864 return d->mDataDefinedProperties;
869 return d->mDataDefinedProperties;
874 QSet< QString > fields = d->mDataDefinedProperties.referencedFields( context.
expressionContext(),
true );
885 d->mDataDefinedProperties = collection;
891 if ( !d->mDataDefinedProperties.hasActiveProperties() )
894 QString ddFontFamily;
899 QString family = exprVal.toString().trimmed();
901 if ( d->textFont.family() != family )
907 ddFontFamily = family;
918 QString fontstyle = exprVal.toString().trimmed();
919 ddFontStyle = fontstyle;
929 bool ddItalic =
false;
939 QFontDatabase fontDb;
940 QFont appFont = QApplication::font();
941 bool newFontBuilt =
false;
942 if ( ddBold || ddItalic )
945 newFont = QFont( !ddFontFamily.isEmpty() ? ddFontFamily : d->textFont.family() );
947 newFont.setBold( ddBold );
948 newFont.setItalic( ddItalic );
950 else if ( !ddFontStyle.isEmpty()
951 && ddFontStyle.compare( QLatin1String(
"Ignore" ), Qt::CaseInsensitive ) != 0 )
953 if ( !ddFontFamily.isEmpty() )
956 QFont styledfont = fontDb.font( ddFontFamily, ddFontStyle, appFont.pointSize() );
957 if ( appFont != styledfont )
959 newFont = styledfont;
967 else if ( !ddFontFamily.isEmpty() )
969 if ( ddFontStyle.compare( QLatin1String(
"Ignore" ), Qt::CaseInsensitive ) != 0 )
972 QFont styledfont = fontDb.font( ddFontFamily, d->textNamedStyle, appFont.pointSize() );
973 if ( appFont != styledfont )
975 newFont = styledfont;
981 newFont = QFont( ddFontFamily );
989 newFont.setUnderline( d->textFont.underline() );
990 newFont.setStrikeOut( d->textFont.strikeOut() );
991 newFont.setWordSpacing( d->textFont.wordSpacing() );
992 newFont.setLetterSpacing( QFont::AbsoluteSpacing, d->textFont.letterSpacing() );
993 d->textFont = newFont;
1023 QString units = exprVal.toString();
1024 if ( !units.isEmpty() )
1029 d->fontSizeUnits = res;
1039 d->opacity = val.toDouble() / 100.0;
1043#ifdef HAS_KDE_QT5_FONT_STRETCH_FIX
1050 d->textFont.setStretch( val.toInt() );
1068 d->textFont.setLetterSpacing( QFont::AbsoluteSpacing, val.toDouble() );
1078 d->textFont.setWordSpacing( val.toDouble() );
1085 QString blendstr = exprVal.toString().trimmed();
1086 if ( !blendstr.isEmpty() )
1099 QPixmap pixmap(
size );
1100 pixmap.fill( Qt::transparent );
1102 painter.begin( &pixmap );
1104 painter.setRenderHint( QPainter::Antialiasing );
1106 QRect rect( 0, 0,
size.width(),
size.height() );
1109 painter.setPen( Qt::NoPen );
1111 if ( ( background1.lightnessF() < 0.7 ) )
1113 background1 = background1.darker( 125 );
1117 background1 = background1.lighter( 125 );
1120 QLinearGradient linearGrad( QPointF( 0, 0 ), QPointF( 0, rect.height() ) );
1121 linearGrad.setColorAt( 0, background1 );
1122 linearGrad.setColorAt( 1, background2 );
1123 painter.setBrush( QBrush( linearGrad ) );
1124 if (
size.width() > 30 )
1126 painter.drawRoundedRect( rect, 6, 6 );
1131 painter.drawRect( rect );
1133 painter.setBrush( Qt::NoBrush );
1134 painter.setPen( Qt::NoPen );
1142 QWidget *activeWindow = QApplication::activeWindow();
1143 const double logicalDpiX = activeWindow && activeWindow->screen() ? activeWindow->screen()->logicalDotsPerInchX() : 96.0;
1155 xtrans = tempFormat.
buffer().
sizeUnit() == Qgis::RenderUnit::Percentage
1156 ? fontSize * tempFormat.
buffer().
size() / 100
1161 double ytrans = 0.0;
1163 ytrans = std::max( ytrans, tempFormat.
buffer().
sizeUnit() == Qgis::RenderUnit::Percentage
1164 ? fontSize * tempFormat.
buffer().
size() / 100
1169 const QStringList text = QStringList() << ( previewText.isEmpty() ? QObject::tr(
"Aa" ) : previewText );
1171 QRectF textRect = rect;
1172 textRect.setLeft( xtrans + padding );
1173 textRect.setWidth( rect.width() - xtrans - 2 * padding );
1175 if ( textRect.width() > 2000 )
1176 textRect.setWidth( 2000 - 2 * padding );
1178 const double bottom = textRect.height() / 2 + textHeight / 2;
1179 textRect.setTop( bottom - textHeight );
1180 textRect.setBottom( bottom );
1185 painter.setBrush( Qt::NoBrush );
1187 if (
size.width() > 30 )
1189 painter.drawRoundedRect( rect, 6, 6 );
1194 painter.drawRect( rect );
BlendMode
Blending modes defining the available composition modes that can be used when painting.
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.
RenderUnit
Rendering size units.
@ 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 Qgis::BlendMode getBlendModeEnum(QPainter::CompositionMode blendMode)
Returns a BlendMode corresponding to a QPainter::CompositionMode.
static QPainter::CompositionMode getCompositionMode(Qgis::BlendMode blendMode)
Returns a QPainter::CompositionMode corresponding to a BlendMode.
@ 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, Qgis::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.
Qgis::RenderUnit sizeUnit() const
Returns the units used for the shape's size.
Container for settings relating to a text buffer.
Qgis::RenderUnit sizeUnit() const
Returns the units for the buffer size.
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.
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.
void setSizeUnit(Qgis::RenderUnit unit)
Sets the units for the size of rendered 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.
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...
void setLineHeightUnit(Qgis::RenderUnit unit)
Sets the unit for the line height for text.
Qgis::RenderUnit lineHeightUnit() const
Returns the units for the line height for text.
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.
Qgis::RenderUnit sizeUnit() const
Returns the units for the size of rendered text.
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.
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, Qgis::RenderUnit unit, const QgsMapUnitScale &mapUnitScale=QgsMapUnitScale())
Calculates pixel size (considering output size should be in pixel or map units, scale factors and opt...
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(), Qgis::TextLayoutMode mode=Qgis::TextLayoutMode::Rectangle)
Draws text within a rectangle using the specified settings.
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.
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 Qgis::RenderUnit decodeRenderUnit(const QString &string, bool *ok=nullptr)
Decodes a render unit from a string.
static Q_INVOKABLE QString encodeUnit(Qgis::DistanceUnit unit)
Encodes a distance unit to a string.
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)