QGIS API Documentation 3.34.0-Prizren (ffbdd678812)
Loading...
Searching...
No Matches
qgstextcharacterformat.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgstextcharacterformat.cpp
3 -----------------
4 begin : May 2020
5 copyright : (C) Nyall Dawson
6 email : nyall dot dawson at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
17#include "qgsrendercontext.h"
18#include "qgsfontutils.h"
19
20#include <QTextCharFormat>
21
22Qgis::TextCharacterVerticalAlignment convertTextCharFormatVAlign( const QTextCharFormat &format, bool &set )
23{
24 set = format.hasProperty( QTextFormat::TextVerticalAlignment );
25 switch ( format.verticalAlignment() )
26 {
27 case QTextCharFormat::AlignNormal:
29 case QTextCharFormat::AlignSuperScript:
31 case QTextCharFormat::AlignSubScript:
33
34 // not yet supported
35 case QTextCharFormat::AlignMiddle:
36 case QTextCharFormat::AlignTop:
37 case QTextCharFormat::AlignBottom:
38 case QTextCharFormat::AlignBaseline:
39 set = false;
41 }
43}
44
45QgsTextCharacterFormat::QgsTextCharacterFormat( const QTextCharFormat &format )
46 : mTextColor( format.hasProperty( QTextFormat::ForegroundBrush ) ? format.foreground().color() : QColor() )
47 , mFontWeight( format.hasProperty( QTextFormat::FontWeight ) ? format.fontWeight() : -1 )
48 , mStyleName( format.font().styleName() )
49 , mItalic( format.hasProperty( QTextFormat::FontItalic ) ? ( format.fontItalic() ? BooleanValue::SetTrue : BooleanValue::SetFalse ) : BooleanValue::NotSet )
50 , mFontPointSize( format.hasProperty( QTextFormat::FontPointSize ) ? format.fontPointSize() : - 1 )
51 , mFontFamily( format.hasProperty( QTextFormat::FontFamily ) ? format.fontFamily() : QString() )
52 , mStrikethrough( format.hasProperty( QTextFormat::FontStrikeOut ) ? ( format.fontStrikeOut() ? BooleanValue::SetTrue : BooleanValue::SetFalse ) : BooleanValue::NotSet )
53 , mUnderline( format.hasProperty( QTextFormat::FontUnderline ) ? ( format.fontUnderline() ? BooleanValue::SetTrue : BooleanValue::SetFalse ) : BooleanValue::NotSet )
54 , mOverline( format.hasProperty( QTextFormat::FontOverline ) ? ( format.fontOverline() ? BooleanValue::SetTrue : BooleanValue::SetFalse ) : BooleanValue::NotSet )
55{
56 mVerticalAlign = convertTextCharFormatVAlign( format, mHasVerticalAlignSet );
57}
58
60{
61 return mTextColor;
62}
63
64void QgsTextCharacterFormat::setTextColor( const QColor &textColor )
65{
66 mTextColor = textColor;
67}
68
70{
71 return mFontPointSize;
72}
73
75{
76 mFontPointSize = size;
77}
78
80{
81 return mFontFamily;
82}
83
84void QgsTextCharacterFormat::setFamily( const QString &family )
85{
86 mFontFamily = family;
87}
88
93
95{
96 mStrikethrough = strikethrough;
97}
98
103
105{
106 mUnderline = underline;
107}
108
113
115{
116 mOverline = enabled;
117}
118
119void QgsTextCharacterFormat::updateFontForFormat( QFont &font, const QgsRenderContext &context, const double scaleFactor ) const
120{
121 // important -- MUST set family first
122 if ( !mFontFamily.isEmpty() )
123 QgsFontUtils::setFontFamily( font, mFontFamily );
124
125 if ( mFontPointSize != -1 )
126 font.setPixelSize( scaleFactor * context.convertToPainterUnits( mFontPointSize, Qgis::RenderUnit::Points ) );
127
129 font.setItalic( mItalic == QgsTextCharacterFormat::BooleanValue::SetTrue );
130
131 if ( mFontWeight != - 1 )
132 {
133#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
134 font.setWeight( mFontWeight );
135#else
136 if ( mFontWeight <= 150 )
137 font.setWeight( QFont::Thin );
138 else if ( mFontWeight <= 250 )
139 font.setWeight( QFont::ExtraLight );
140 else if ( mFontWeight <= 350 )
141 font.setWeight( QFont::Light );
142 else if ( mFontWeight <= 450 )
143 font.setWeight( QFont::Normal );
144 else if ( mFontWeight <= 550 )
145 font.setWeight( QFont::Medium );
146 else if ( mFontWeight <= 650 )
147 font.setWeight( QFont::DemiBold );
148 else if ( mFontWeight <= 750 )
149 font.setWeight( QFont::Bold );
150 else if ( mFontWeight <= 850 )
151 font.setWeight( QFont::ExtraBold );
152 else
153 font.setWeight( QFont::Black );
154#endif
155
156 // depending on the font, platform, and the phase of the moon, we need to both set the font weight AND the style name
157 // in order to get correct rendering!
158 font.setStyleName( mStyleName );
159 }
160
161 if ( mUnderline != BooleanValue::NotSet )
162 font.setUnderline( mUnderline == QgsTextCharacterFormat::BooleanValue::SetTrue );
163 if ( mOverline != BooleanValue::NotSet )
164 font.setOverline( mOverline == QgsTextCharacterFormat::BooleanValue::SetTrue );
165 if ( mStrikethrough != QgsTextCharacterFormat::BooleanValue::NotSet )
166 font.setStrikeOut( mStrikethrough == QgsTextCharacterFormat::BooleanValue::SetTrue );
167}
168
173
175{
176 mItalic = enabled;
177}
178
180{
181 return mFontWeight;
182}
183
185{
186 mFontWeight = fontWeight;
187}
TextCharacterVerticalAlignment
Text vertical alignment for characters.
Definition qgis.h:2197
@ Normal
Adjacent characters are positioned in the standard way for text in the writing system in use.
@ SubScript
Characters are placed below the base line for normal text.
@ SuperScript
Characters are placed above the base line for normal text.
@ Points
Points (e.g., for font sizes)
static void setFontFamily(QFont &font, const QString &family)
Sets the family for a font object.
Contains information about the context of a rendering operation.
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).
void setFamily(const QString &family)
Sets the font family name.
void updateFontForFormat(QFont &font, const QgsRenderContext &context, double scaleFactor=1.0) const
Updates the specified font in place, applying character formatting options which are applicable on a ...
void setFontWeight(int fontWeight)
Sets the font weight.
QColor textColor() const
Returns the character's text color, or an invalid color if no color override is set and the default f...
BooleanValue italic() const
Returns whether the format has italic enabled.
QgsTextCharacterFormat()=default
Constructor for QgsTextCharacterFormat.
void setStrikeOut(BooleanValue enabled)
Sets whether the format has strikethrough enabled.
void setOverline(BooleanValue enabled)
Sets whether the format has overline enabled.
BooleanValue
Status values for boolean format properties.
@ SetTrue
Property is set and true.
int fontWeight() const
Returns the font weight, or -1 if the font weight is not set and should be inherited.
BooleanValue strikeOut() const
Returns whether the format has strikethrough enabled.
double fontPointSize() const
Returns the font point size, or -1 if the font size is not set and should be inherited.
QString family() const
Returns the font family name, or an empty string if the family is not set and should be inherited.
BooleanValue underline() const
Returns whether the format has underline enabled.
void setTextColor(const QColor &textColor)
Sets the character's text color.
void setUnderline(BooleanValue enabled)
Sets whether the format has underline enabled.
void setItalic(BooleanValue enabled)
Sets whether the format has italic enabled.
BooleanValue overline() const
Returns whether the format has overline enabled.
void setFontPointSize(double size)
Sets the font point size.
#define BUILTIN_UNREACHABLE
Definition qgis.h:4993
Qgis::TextCharacterVerticalAlignment convertTextCharFormatVAlign(const QTextCharFormat &format, bool &set)