64void QSGCurveGlyphNode::setGlyphs(
const QPointF &position,
const QGlyphRun &glyphs)
68 QRawFont font = glyphs.rawFont();
69 m_fontSize = font.pixelSize();
70 m_position = QPointF(position.x(), position.y() - font.ascent());
73 m_dirtyGeometry =
true;
75#ifdef QSG_RUNTIME_DESCRIPTION
76 qsgnode_set_description(
this, QString::number(glyphs.glyphIndexes().count())
77 + QStringLiteral(
" curve glyphs: ")
78 + m_glyphs.rawFont().familyName()
80 + QString::number(m_glyphs.rawFont().pixelSize()));
95void QSGCurveGlyphNode::updateGeometry()
98 m_glyphNode =
nullptr;
101 m_styleNode =
nullptr;
103 QSGCurveGlyphAtlas *curveGlyphAtlas = m_context->curveGlyphAtlas(m_glyphs.rawFont());
104 curveGlyphAtlas->populate(m_glyphs.glyphIndexes());
106 m_glyphNode =
new QSGCurveFillNode;
107 m_glyphNode->setColor(m_color);
111 float fontScale =
float(m_fontSize / curveGlyphAtlas->fontSize());
112 QSGCurveFillNode *raisedSunkenStyleNode =
nullptr;
113 QSGCurveStrokeNode *outlineNode =
nullptr;
114 if (m_style == QQuickText::Raised || m_style == QQuickText::Sunken) {
115 raisedSunkenStyleNode =
new QSGCurveFillNode;
116 raisedSunkenStyleNode ->setColor(m_styleColor);
118 offset = m_style == QQuickText::Raised ? QPointF(0.0f, 1.0f) : QPointF(0.0f, -1.0f);
119 m_styleNode = raisedSunkenStyleNode;
120 }
else if (m_style == QQuickText::Outline) {
121 outlineNode =
new QSGCurveStrokeNode;
122 outlineNode->setColor(m_styleColor);
123 outlineNode->setStrokeWidth(2 / fontScale);
124 outlineNode->setLocalScale(fontScale);
126 m_styleNode = outlineNode;
129 const QList<quint32> indexes = m_glyphs.glyphIndexes();
130 const QList<QPointF> positions = m_glyphs.positions();
131 for (qsizetype i = 0; i < indexes.size(); ++i) {
133 m_baseLine = positions.at(i);
134 curveGlyphAtlas->addGlyph(m_glyphNode,
136 m_position + positions.at(i),
138 if (raisedSunkenStyleNode !=
nullptr) {
139 curveGlyphAtlas->addGlyph(raisedSunkenStyleNode,
141 m_position + positions.at(i) + offset,
144 if (outlineNode !=
nullptr) {
148 curveGlyphAtlas->addStroke(outlineNode,
150 (m_position + positions.at(i)) / fontScale);
154 if (m_styleNode !=
nullptr) {
155 m_styleNode->cookGeometry();
156 appendChildNode(m_styleNode);
159 m_glyphNode->cookGeometry();
160 appendChildNode(m_glyphNode);
162 m_dirtyGeometry =
false;