diff options
| author | Hatem ElKharashy <hatem.elkharashy@qt.io> | 2026-07-21 09:56:27 +0300 |
|---|---|---|
| committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2026-08-28 10:55:06 +0000 |
| commit | 255542d9c2f13999ae31806533601caf47fa336a (patch) | |
| tree | d3342614134fbb200afb531d6ce58de3bbe8aab9 | |
| parent | be8bb67b783e73935351ca60a1e3420433424652 (diff) | |
VectorImage: Modify the visitor to avoid compilation errors
Change how QSvgFontEngine works with QSvgFont after the refactor in
Qt SVG module.
Change-Id: I196bb11ba0d3c9e783ce0fc00b7d3168889ba079
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
(cherry picked from commit cbdacc91486bbaad2b66669ed7cd69020f68e1ab)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
| -rw-r--r-- | src/quickvectorimage/generator/qsvgvisitorimpl.cpp | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/src/quickvectorimage/generator/qsvgvisitorimpl.cpp b/src/quickvectorimage/generator/qsvgvisitorimpl.cpp index c3a89b8200..ce14d3dc1b 100644 --- a/src/quickvectorimage/generator/qsvgvisitorimpl.cpp +++ b/src/quickvectorimage/generator/qsvgvisitorimpl.cpp @@ -605,7 +605,7 @@ namespace { class QSvgFontEngine : public QFontEngine { public: - QSvgFontEngine(const QSvgFont *font, qreal size); + QSvgFontEngine(const QString &family, const QSvgFont *font, qreal size); QFontEngine *cloneWithSize(qreal size) const override; @@ -637,14 +637,16 @@ namespace { private: const QSvgFont *m_font; + QString m_family; }; - QSvgFontEngine::QSvgFontEngine(const QSvgFont *font, qreal size) + QSvgFontEngine::QSvgFontEngine(const QString &family, const QSvgFont *font, qreal size) : QFontEngine(Proxy) , m_font(font) + , m_family(family) { fontDef.pixelSize = size; - fontDef.families = QStringList(m_font->m_familyName); + fontDef.families = QStringList(family); } QFixed QSvgFontEngine::emSquareSize() const @@ -734,7 +736,7 @@ namespace { QFontEngine *QSvgFontEngine::cloneWithSize(qreal size) const { - QSvgFontEngine *otherEngine = new QSvgFontEngine(m_font, size); + QSvgFontEngine *otherEngine = new QSvgFontEngine(m_family, m_font, size); return otherEngine; } @@ -800,17 +802,26 @@ void QSvgVisitorImpl::visitTextNode(const QSvgText *node) const bool isTextArea = node->type() == QSvgNode::Textarea; QString text; - const QSvgFont *svgFont = m_styleResolver->states().svgFont; bool needsRichText = false; bool preserveWhiteSpace = node->whitespaceMode() == QSvgText::Preserve; const QGradient *mainGradient = m_styleResolver->currentFillGradient(); + + auto *fontStyle = static_cast<QSvgFontStyle *>(node->styleProperty(QSvgStyleProperty::Font)); + QSvgFont *svgFont = nullptr; + QString svgFontFamily; + if (fontStyle) { + svgFontFamily = fontStyle->qfont().family(); + svgFont = node->document()->svgFont(svgFontFamily); + } + QFontEngine *fontEngine = nullptr; if (svgFont != nullptr) { - fontEngine = new QSvgFontEngine(svgFont, m_styleResolver->painter().font().pointSize()); + fontEngine = new QSvgFontEngine(svgFontFamily, svgFont, m_styleResolver->painter().font().pointSize()); fontEngine->ref.ref(); } + #if QT_CONFIG(texthtmlparser) bool needsPathNode = mainGradient != nullptr || svgFont != nullptr @@ -976,7 +987,7 @@ void QSvgVisitorImpl::visitTextNode(const QSvgText *node) // first) QFont blockFont = block.charFormat().font(); if (svgFont != nullptr - && blockFont.family() == svgFont->m_familyName) { + && blockFont.family() == svgFontFamily) { QRawFont rawFont; QRawFontPrivate *rawFontD = QRawFontPrivate::get(rawFont); rawFontD->setFontEngine(fontEngine->cloneWithSize(blockFont.pixelSize())); |
