Krita Source Code Documentation
Loading...
Searching...
No Matches
SvgTextLabel Class Reference

#include <SvgTextLabel.h>

+ Inheritance diagram for SvgTextLabel:

Public Slots

void setFontAxesValues (QVariantMap fontAxesValues)
 
void setFontFamilies (QStringList fontFamilies)
 
void setFontSize (qreal fontSize)
 
void setFontSlant (qreal fontSlant)
 
void setFontStyle (QFont::Style fontStyle)
 
void setFontWeight (qreal fontWeight)
 
void setFontWidth (qreal fontWidth)
 
void setLanguage (QString language)
 
void setOpenTypeFeatures (QVariantMap openTypeFeatures)
 
void setPadding (int padding)
 
void setText (QString text)
 
void setTextColor (QColor textColor)
 

Signals

void fontAxesValuesChanged (QVariantMap fontAxesValues)
 
void fontFamiliesChanged (QStringList)
 
void fontSizeChanged (qreal fontSize)
 
void fontSlantChanged (qreal fontSlant)
 
void fontStyleChanged (QFont::Style fontStyle)
 
void fontWeightChanged (qreal fontWeight)
 
void fontWidthChanged (qreal fontWidth)
 
void languageChanged (QString language)
 
void minimumRectChanged ()
 
void openTypeFeaturesChanged (QVariantMap openTypeFeatures)
 
void paddingChanged (int padding)
 
void textChanged (QString text)
 
void textColorChanged (QColor textColor)
 

Public Member Functions

QVariantMap fontAxesValues () const
 
QStringList fontFamilies () const
 
qreal fontSize () const
 
qreal fontSlant () const
 
QFont::Style fontStyle () const
 
qreal fontWeight () const
 
qreal fontWidth () const
 
QString language () const
 
QRectF minimumRect () const
 
QVariantMap openTypeFeatures () const
 
int padding () const
 
void paint (QPainter *painter) override
 
 Private ()
 
 SvgTextLabel (QQuickItem *parent=nullptr)
 
QString text () const
 
QColor textColor () const
 
 ~Private ()
 
 ~SvgTextLabel ()
 
- Public Member Functions inherited from Private
 Private (KisCanvas2 *c)
 

Public Attributes

bool addedShapeToPainter = false
 
int bottomPadding = 2
 
int leftPadding = 2
 
KoSvgTextProperties props
 
int rightPadding = 2
 
QScopedPointer< KoSvgTextShapeshape
 
QScopedPointer< KoShapePaintershapePainter
 
int topPadding = 2
 
- Public Attributes inherited from Private
KisCanvas2canvas
 
int displayedFrame
 
int intendedFrame
 

Protected Member Functions

void componentComplete () override
 componentComplete called when all properties have been set. used to avoid relayout being called time and time again when the properties change.
 

Properties

QVariantMap fontAxesValues
 
QML_ELEMENTQStringList fontFamilies
 
qreal fontSize
 
qreal fontSlant
 
QFont::Style fontStyle
 
qreal fontWeight
 
qreal fontWidth
 
QString language
 
QRectF minimumRect
 
QVariantMap openTypeFeatures
 
int padding
 
QString text
 
QColor textColor
 

Private Slots

void updateShape ()
 

Private Attributes

const QScopedPointer< Privated
 

Detailed Description

SvgTextLabel makes it possible to paint a KoSvgTextShape as a QML item. It will position and scale the text centered in the bounds of the items.

This is nowhere near as fast as a regular Text item, as Qt has a glyph cache, while Krita's system paints paths directly.

Definition at line 15 of file SvgTextLabel.cpp.

Constructor & Destructor Documentation

◆ ~Private()

SvgTextLabel::~Private ( )
inline

Definition at line 24 of file SvgTextLabel.cpp.

24{}

◆ SvgTextLabel()

SvgTextLabel::SvgTextLabel ( QQuickItem * parent = nullptr)

Definition at line 44 of file SvgTextLabel.cpp.

45 : QQuickPaintedItem(parent)
46 , d(new Private())
47{
48 setImplicitSize(10, 10);
49 setAntialiasing(true);
50 setOpaquePainting(true);
51
52 connect(this, SIGNAL(openTypeFeaturesChanged(QVariantMap)), this, SLOT(updateShape()));
53}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
const QScopedPointer< Private > d
void openTypeFeaturesChanged(QVariantMap openTypeFeatures)

References connect(), openTypeFeaturesChanged(), and updateShape().

◆ ~SvgTextLabel()

SvgTextLabel::~SvgTextLabel ( )

Definition at line 55 of file SvgTextLabel.cpp.

56{
57}

Member Function Documentation

◆ componentComplete()

void SvgTextLabel::componentComplete ( )
overrideprotected

componentComplete called when all properties have been set. used to avoid relayout being called time and time again when the properties change.

Definition at line 294 of file SvgTextLabel.cpp.

295{
296 QQuickPaintedItem::componentComplete();
297
298 if (this->window()) {
299 const qreal pixelRatio = this->window()->effectiveDevicePixelRatio();
300 d->shape->setResolution(pixelRatio*72, pixelRatio*72);
301 }
302 setOpaquePainting(fillColor().alpha() == 255);
303 if (!d->shapePainter) {
304 d->shapePainter.reset(new KoShapePainter());
305 if (!d->shape->boundingRect().isEmpty()) {
306 d->shapePainter->setShapes({d->shape.data()});
307 d->addedShapeToPainter = true;
308 }
309 }
310 updateShape();
311}

References d, and updateShape().

◆ fontAxesValues()

QVariantMap SvgTextLabel::fontAxesValues ( ) const

Definition at line 115 of file SvgTextLabel.cpp.

116{
117 return d->props.propertyOrDefault(KoSvgTextProperties::FontVariationSettingsId).toMap();
118}
@ FontVariationSettingsId
QStringList.

References d, and KoSvgTextProperties::FontVariationSettingsId.

◆ fontAxesValuesChanged

void SvgTextLabel::fontAxesValuesChanged ( QVariantMap fontAxesValues)
signal

◆ fontFamilies()

QStringList SvgTextLabel::fontFamilies ( ) const

Definition at line 89 of file SvgTextLabel.cpp.

90{
91 return d->shape->textProperties().property(KoSvgTextProperties::FontFamiliesId).value<QStringList>();
92}

References d, and KoSvgTextProperties::FontFamiliesId.

◆ fontFamiliesChanged

void SvgTextLabel::fontFamiliesChanged ( QStringList )
signal

◆ fontSize()

qreal SvgTextLabel::fontSize ( ) const

Definition at line 120 of file SvgTextLabel.cpp.

121{
122 return d->shape->textProperties().property(KoSvgTextProperties::FontSizeId).toReal();
123}

References d, and KoSvgTextProperties::FontSizeId.

◆ fontSizeChanged

void SvgTextLabel::fontSizeChanged ( qreal fontSize)
signal

◆ fontSlant()

qreal SvgTextLabel::fontSlant ( ) const

Definition at line 109 of file SvgTextLabel.cpp.

110{
111 KoSvgText::CssFontStyleData style = d->shape->textProperties().property(KoSvgTextProperties::FontStyleId).value<KoSvgText::CssFontStyleData>();
112 return style.slantValue.isAuto? 14.0: style.slantValue.customValue;
113}
@ FontStyleId
KoSvgText::CssSlantData.
When style is oblique, a custom slant value can be specified for variable fonts.
Definition KoSvgText.h:475
KoSvgText::AutoValue slantValue
Definition KoSvgText.h:479

References KoSvgText::AutoValue::customValue, d, KoSvgTextProperties::FontStyleId, KoSvgText::AutoValue::isAuto, and KoSvgText::CssFontStyleData::slantValue.

◆ fontSlantChanged

void SvgTextLabel::fontSlantChanged ( qreal fontSlant)
signal

◆ fontStyle()

QFont::Style SvgTextLabel::fontStyle ( ) const

Definition at line 104 of file SvgTextLabel.cpp.

105{
106 return d->shape->textProperties().property(KoSvgTextProperties::FontStyleId).value<KoSvgText::CssFontStyleData>().style;
107}

References d, and KoSvgTextProperties::FontStyleId.

◆ fontStyleChanged

void SvgTextLabel::fontStyleChanged ( QFont::Style fontStyle)
signal

◆ fontWeight()

qreal SvgTextLabel::fontWeight ( ) const

Definition at line 94 of file SvgTextLabel.cpp.

95{
96 return d->shape->textProperties().property(KoSvgTextProperties::FontWeightId).toReal();
97}

References d, and KoSvgTextProperties::FontWeightId.

◆ fontWeightChanged

void SvgTextLabel::fontWeightChanged ( qreal fontWeight)
signal

◆ fontWidth()

qreal SvgTextLabel::fontWidth ( ) const

Definition at line 99 of file SvgTextLabel.cpp.

100{
101 return d->shape->textProperties().property(KoSvgTextProperties::FontStretchId).toReal();
102}

References d, and KoSvgTextProperties::FontStretchId.

◆ fontWidthChanged

void SvgTextLabel::fontWidthChanged ( qreal fontWidth)
signal

◆ language()

QString SvgTextLabel::language ( ) const

Definition at line 149 of file SvgTextLabel.cpp.

150{
151 return d->shape->textProperties().property(KoSvgTextProperties::TextLanguage).toString();
152}
@ TextLanguage
a language string.

References d, and KoSvgTextProperties::TextLanguage.

◆ languageChanged

void SvgTextLabel::languageChanged ( QString language)
signal

◆ minimumRect()

QRectF SvgTextLabel::minimumRect ( ) const

Definition at line 313 of file SvgTextLabel.cpp.

314{
315 if (d->shape) {
316 const QRectF bbox = d->shape->selectionBoxes(0, d->shape->posForIndex(d->shape->plainText().size())).boundingRect();
317 return bbox.adjusted(-d->leftPadding, -d->topPadding, d->rightPadding, d->bottomPadding);
318 }
319 return QRectF();
320}

References d.

◆ minimumRectChanged

void SvgTextLabel::minimumRectChanged ( )
signal

◆ openTypeFeatures()

QVariantMap SvgTextLabel::openTypeFeatures ( ) const

Definition at line 134 of file SvgTextLabel.cpp.

135{
136 return d->shape->textProperties().property(KoSvgTextProperties::FontFeatureSettingsId).toMap();
137}
@ FontFeatureSettingsId
QStringList.

References d, and KoSvgTextProperties::FontFeatureSettingsId.

◆ openTypeFeaturesChanged

void SvgTextLabel::openTypeFeaturesChanged ( QVariantMap openTypeFeatures)
signal

◆ padding()

int SvgTextLabel::padding ( ) const

Definition at line 144 of file SvgTextLabel.cpp.

145{
146 return (d->leftPadding+d->rightPadding+d->topPadding+d->bottomPadding)/4;
147}

References d.

◆ paddingChanged

void SvgTextLabel::paddingChanged ( int padding)
signal

◆ paint()

void SvgTextLabel::paint ( QPainter * painter)
override

Definition at line 59 of file SvgTextLabel.cpp.

60{
61 // the QML item must be finalized before paint() is called
62 KIS_SAFE_ASSERT_RECOVER_RETURN(d->shapePainter);
63
64 if (width() == 0 || height() == 0) return;
65 if (!painter->isActive()) return;
66 painter->save();
67 if (d->shape->boundingRect().isEmpty()) {
68 painter->restore();
69 return;
70 }
71
72 QRectF bbox = d->shape->selectionBoxes(0, d->shape->posForIndex(d->shape->plainText().size())).boundingRect();
73 bbox = bbox.isEmpty()? d->shape->boundingRect(): bbox;
74
75 // Scale padding so that it is relative to the width and height.
76 const double newWidth = width()-(d->leftPadding+d->rightPadding);
77 const double newLeftPadding = (d->leftPadding / newWidth) * bbox.width();
78 const double newRightPadding = (d->rightPadding / newWidth) * bbox.width();
79 const double newHeight = height()-(d->topPadding+d->bottomPadding);
80 const double newTopPadding = (d->topPadding / newHeight) * bbox.height();
81 const double newBottomPadding = (d->bottomPadding / newHeight) * bbox.height();
82
83 d->shapePainter->paint(*painter,
84 QRectF(0, 0, width(), height()).toAlignedRect(),
85 bbox.adjusted(-newLeftPadding, -newTopPadding, newRightPadding, newBottomPadding));
86 painter->restore();
87}
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128

References d, and KIS_SAFE_ASSERT_RECOVER_RETURN.

◆ Private()

SvgTextLabel::Private ( )
inline

Definition at line 17 of file SvgTextLabel.cpp.

18 : shape(new KoSvgTextShape())
19 {
20 shape->setResolution(72, 72);
21 shape->setRelayoutBlocked(true);
22 shape->setFontMatchingDisabled(true);
23 }
QScopedPointer< KoSvgTextShape > shape

◆ setFontAxesValues

void SvgTextLabel::setFontAxesValues ( QVariantMap fontAxesValues)
slot

Definition at line 209 of file SvgTextLabel.cpp.

210{
211 QVariantMap current = d->props.property(KoSvgTextProperties::FontVariationSettingsId).toMap();
212 if (current == fontAxesValues)
213 return;
214
215 d->props.setProperty(KoSvgTextProperties::FontVariationSettingsId, QVariant::fromValue(fontAxesValues));
217}
QVariantMap fontAxesValues
void fontAxesValuesChanged(QVariantMap fontAxesValues)

References d, fontAxesValues, fontAxesValuesChanged(), and KoSvgTextProperties::FontVariationSettingsId.

◆ setFontFamilies

void SvgTextLabel::setFontFamilies ( QStringList fontFamilies)
slot

Definition at line 154 of file SvgTextLabel.cpp.

155{
156 QStringList current = d->props.property(KoSvgTextProperties::FontFamiliesId).value<QStringList>();
157 if (current == fontFamilies)
158 return;
159
162}
void fontFamiliesChanged(QStringList)
QML_ELEMENTQStringList fontFamilies

References d, fontFamilies, fontFamiliesChanged(), and KoSvgTextProperties::FontFamiliesId.

◆ setFontSize

void SvgTextLabel::setFontSize ( qreal fontSize)
slot

Definition at line 219 of file SvgTextLabel.cpp.

220{
222 if (qFuzzyCompare(current.value, fontSize))
223 return;
224
225 current.value = fontSize;
226 d->props.setProperty(KoSvgTextProperties::FontSizeId, QVariant::fromValue(current));
228}
static bool qFuzzyCompare(half p1, half p2)
void fontSizeChanged(qreal fontSize)

References d, fontSize, fontSizeChanged(), KoSvgTextProperties::FontSizeId, qFuzzyCompare(), and KoSvgText::CssLengthPercentage::value.

◆ setFontSlant

void SvgTextLabel::setFontSlant ( qreal fontSlant)
slot

Definition at line 195 of file SvgTextLabel.cpp.

196{
198 if (current.slantValue.isAuto && qFuzzyCompare(fontSlant, 14))
199 return;
200 if (!current.slantValue.isAuto && qFuzzyCompare(fontSlant, current.slantValue.customValue))
201 return;
202
204 current.slantValue.isAuto = false;
205 d->props.setProperty(KoSvgTextProperties::FontStyleId, QVariant::fromValue(current));
207}
void fontSlantChanged(qreal fontSlant)

References KoSvgText::AutoValue::customValue, d, fontSlant, fontSlantChanged(), KoSvgTextProperties::FontStyleId, KoSvgText::AutoValue::isAuto, and KoSvgText::CssFontStyleData::slantValue.

◆ setFontStyle

void SvgTextLabel::setFontStyle ( QFont::Style fontStyle)
slot

Definition at line 184 of file SvgTextLabel.cpp.

185{
187 if (current.style == fontStyle)
188 return;
189
190 current.style = fontStyle;
191 d->props.setProperty(KoSvgTextProperties::FontStyleId, QVariant::fromValue(current));
193}
QFont::Style fontStyle
void fontStyleChanged(QFont::Style fontStyle)

References d, fontStyle, fontStyleChanged(), KoSvgTextProperties::FontStyleId, and KoSvgText::CssFontStyleData::style.

◆ setFontWeight

void SvgTextLabel::setFontWeight ( qreal fontWeight)
slot

Definition at line 164 of file SvgTextLabel.cpp.

165{
166 qreal current = d->props.property(KoSvgTextProperties::FontWeightId).toReal();
167 if (qFuzzyCompare(current, fontWeight))
168 return;
169
172}
void fontWeightChanged(qreal fontWeight)

References d, fontWeight, fontWeightChanged(), KoSvgTextProperties::FontWeightId, and qFuzzyCompare().

◆ setFontWidth

void SvgTextLabel::setFontWidth ( qreal fontWidth)
slot

Definition at line 174 of file SvgTextLabel.cpp.

175{
176 qreal current = d->props.property(KoSvgTextProperties::FontStretchId).toReal();
177 if (qFuzzyCompare(current, fontWidth))
178 return;
179
182}
void fontWidthChanged(qreal fontWidth)

References d, KoSvgTextProperties::FontStretchId, fontWidth, fontWidthChanged(), and qFuzzyCompare().

◆ setLanguage

void SvgTextLabel::setLanguage ( QString language)
slot

Definition at line 284 of file SvgTextLabel.cpp.

285{
286 const QString lang = d->props.property(KoSvgTextProperties::TextLanguage).toString();
287 if (lang == language) {
288 return;
289 }
290 d->props.setProperty(KoSvgTextProperties::TextLanguage, language);
292}
void languageChanged(QString language)
QString language

References d, language, languageChanged(), and KoSvgTextProperties::TextLanguage.

◆ setOpenTypeFeatures

void SvgTextLabel::setOpenTypeFeatures ( QVariantMap openTypeFeatures)
slot

Definition at line 248 of file SvgTextLabel.cpp.

249{
250 QVariantMap otf = d->props.property(KoSvgTextProperties::FontFeatureSettingsId).toMap();
251 if (otf == openTypeFeatures)
252 return;
253
254 d->props.setProperty(KoSvgTextProperties::FontFeatureSettingsId, QVariant::fromValue(openTypeFeatures));
256}
QVariantMap openTypeFeatures

References d, KoSvgTextProperties::FontFeatureSettingsId, openTypeFeatures, and openTypeFeaturesChanged().

◆ setPadding

void SvgTextLabel::setPadding ( int padding)
slot

Definition at line 270 of file SvgTextLabel.cpp.

271{
272 const int currentPadding = (d->leftPadding+d->rightPadding+d->topPadding+d->bottomPadding)/4;
273 if (currentPadding == padding)
274 return;
275
276 d->leftPadding = padding;
277 d->rightPadding = padding;
278 d->topPadding = padding;
279 d->bottomPadding = padding;
281 emit minimumRectChanged();
282}
void minimumRectChanged()
void paddingChanged(int padding)

References d, minimumRectChanged(), padding, and paddingChanged().

◆ setText

void SvgTextLabel::setText ( QString text)
slot

Definition at line 258 of file SvgTextLabel.cpp.

259{
260 if (d->shape->plainText() == text)
261 return;
262
263 int length = d->shape->plainText().size();
264 int start = 0;
265 d->shape->removeText(start, length);
266 d->shape->insertText(0, text);
267 emit textChanged(d->shape->plainText());
268}
qreal length(const QPointF &vec)
Definition Ellipse.cc:82
void textChanged(QString text)

References d, length(), text, and textChanged().

◆ setTextColor

void SvgTextLabel::setTextColor ( QColor textColor)
slot

Definition at line 230 of file SvgTextLabel.cpp.

231{
232 if (d->props.hasProperty(KoSvgTextProperties::FillId)) {
233 KoColorBackground *bg = dynamic_cast<KoColorBackground*>(d->shape->background().data());
234 if (bg) {
235 if (bg->color() == textColor)
236 return;
237 }
238 }
239
241 d->props.setProperty(KoSvgTextProperties::FillId, d->shape->textProperties().property(KoSvgTextProperties::FillId));
243 if (!opaquePainting() && isComponentComplete()) {
244 update(boundingRect().toAlignedRect());
245 }
246}
A simple solid color shape background.
QColor color() const
Returns the background color.
@ FillId
KoSvgText::BackgroundProperty.
bool update(QSpinBox *spinBox)
QColor textColor
void textColorChanged(QColor textColor)

References KoColorBackground::color(), d, KoSvgTextProperties::FillId, textColor, and textColorChanged().

◆ text()

QString SvgTextLabel::text ( ) const

Definition at line 139 of file SvgTextLabel.cpp.

140{
141 return d->shape->plainText();
142}

References d.

◆ textChanged

void SvgTextLabel::textChanged ( QString text)
signal

◆ textColor()

QColor SvgTextLabel::textColor ( ) const

Definition at line 125 of file SvgTextLabel.cpp.

126{
127 KoColorBackground *bg = dynamic_cast<KoColorBackground*>(d->shape->background().data());
128 if (bg) {
129 return bg->color();
130 }
131 return Qt::black;
132}

References KoColorBackground::color(), and d.

◆ textColorChanged

void SvgTextLabel::textColorChanged ( QColor textColor)
signal

◆ updateShape

void SvgTextLabel::updateShape ( )
privateslot

Definition at line 322 of file SvgTextLabel.cpp.

323{
324 if (d->shape->textProperties() == d->props) {
325 return;
326 }
327 d->shape->setPropertiesAtPos(-1, d->props);
328 d->shape->relayout();
329 if (!d->addedShapeToPainter && d->shapePainter && !d->shape->boundingRect().isEmpty()) {
330 d->shapePainter->setShapes({d->shape.data()});
331 d->addedShapeToPainter = true;
332 }
333 if (isVisible()) {
334 update(boundingRect().toAlignedRect());
335 }
336 emit minimumRectChanged();
337}

References d, and minimumRectChanged().

Member Data Documentation

◆ addedShapeToPainter

bool SvgTextLabel::addedShapeToPainter = false

Definition at line 41 of file SvgTextLabel.cpp.

◆ bottomPadding

int SvgTextLabel::bottomPadding = 2

Definition at line 37 of file SvgTextLabel.cpp.

◆ d

const QScopedPointer<Private> SvgTextLabel::d
private

Definition at line 136 of file SvgTextLabel.h.

◆ leftPadding

int SvgTextLabel::leftPadding = 2

Definition at line 38 of file SvgTextLabel.cpp.

◆ props

KoSvgTextProperties SvgTextLabel::props

Definition at line 34 of file SvgTextLabel.cpp.

◆ rightPadding

int SvgTextLabel::rightPadding = 2

Definition at line 39 of file SvgTextLabel.cpp.

◆ shape

QScopedPointer<KoSvgTextShape> SvgTextLabel::shape

Definition at line 26 of file SvgTextLabel.cpp.

◆ shapePainter

QScopedPointer<KoShapePainter> SvgTextLabel::shapePainter

The shape painter is initialized only after QML item loading is completed

Definition at line 32 of file SvgTextLabel.cpp.

◆ topPadding

int SvgTextLabel::topPadding = 2

Definition at line 36 of file SvgTextLabel.cpp.

Property Documentation

◆ fontAxesValues

QVariantMap SvgTextLabel::fontAxesValues
readwrite

Definition at line 30 of file SvgTextLabel.h.

◆ fontFamilies

QML_ELEMENTQStringList SvgTextLabel::fontFamilies
readwrite

Definition at line 25 of file SvgTextLabel.h.

◆ fontSize

qreal SvgTextLabel::fontSize
readwrite

Definition at line 31 of file SvgTextLabel.h.

◆ fontSlant

qreal SvgTextLabel::fontSlant
readwrite

Definition at line 29 of file SvgTextLabel.h.

◆ fontStyle

QFont::Style SvgTextLabel::fontStyle
readwrite

Definition at line 28 of file SvgTextLabel.h.

◆ fontWeight

qreal SvgTextLabel::fontWeight
readwrite

Definition at line 26 of file SvgTextLabel.h.

◆ fontWidth

qreal SvgTextLabel::fontWidth
readwrite

Definition at line 27 of file SvgTextLabel.h.

◆ language

QString SvgTextLabel::language
readwrite

Definition at line 36 of file SvgTextLabel.h.

◆ minimumRect

QRectF SvgTextLabel::minimumRect
read

Definition at line 37 of file SvgTextLabel.h.

◆ openTypeFeatures

QVariantMap SvgTextLabel::openTypeFeatures
readwrite

Definition at line 33 of file SvgTextLabel.h.

◆ padding

int SvgTextLabel::padding
readwrite

Definition at line 35 of file SvgTextLabel.h.

◆ text

QString SvgTextLabel::text
readwrite

Definition at line 34 of file SvgTextLabel.h.

◆ textColor

QColor SvgTextLabel::textColor
readwrite

Definition at line 32 of file SvgTextLabel.h.


The documentation for this class was generated from the following files: