diff options
author | Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com> | 2011-04-14 18:16:18 +0200 |
---|---|---|
committer | axis <qt-info@nokia.com> | 2011-04-26 14:55:38 +0200 |
commit | 039ce3e416905b41b22e4644cedc28122fc71ea8 (patch) | |
tree | fee4911666bf21315d100a154592a07b0172ecb9 | |
parent | ec40dd2bb51868bca10dbd0c9116f3224ff2b29b (diff) |
Update SceneGraph to use QRawFont API
Necessary changes to compile and work with changes to QGlyphs API
-rw-r--r-- | src/declarative/items/qsgtext.cpp | 2 | ||||
-rw-r--r-- | src/declarative/items/qsgtextnode.cpp | 31 | ||||
-rw-r--r-- | src/declarative/items/qsgtextnode_p.h | 6 | ||||
-rw-r--r-- | src/declarative/scenegraph/qsgdefaultglyphnode.cpp | 4 | ||||
-rw-r--r-- | src/declarative/scenegraph/qsgdefaultglyphnode_p.cpp | 43 | ||||
-rw-r--r-- | src/declarative/scenegraph/qsgdefaultglyphnode_p_p.h | 6 | ||||
-rw-r--r-- | src/declarative/scenegraph/qsgdistancefieldglyphcache.cpp | 103 | ||||
-rw-r--r-- | src/declarative/scenegraph/qsgdistancefieldglyphcache_p.h | 13 | ||||
-rw-r--r-- | src/declarative/scenegraph/qsgdistancefieldglyphnode.cpp | 4 | ||||
-rw-r--r-- | src/gui/text/qrawfont_p.h | 2 |
10 files changed, 91 insertions, 123 deletions
diff --git a/src/declarative/items/qsgtext.cpp b/src/declarative/items/qsgtext.cpp index 6b2e39986a..ab4669eb45 100644 --- a/src/declarative/items/qsgtext.cpp +++ b/src/declarative/items/qsgtext.cpp @@ -702,7 +702,7 @@ void QSGText::setFont(const QFont &font) QFont oldFont = d->font; d->font = font; if (QSGDistanceFieldGlyphCache::distanceFieldEnabled()) - qt_disableFontHinting(d->font); + d->font.setHintingPreference(QFont::PreferNoHinting); if (d->font.pointSizeF() != -1) { // 0.5pt resolution diff --git a/src/declarative/items/qsgtextnode.cpp b/src/declarative/items/qsgtextnode.cpp index dcd28a6f1b..3bbe0d2832 100644 --- a/src/declarative/items/qsgtextnode.cpp +++ b/src/declarative/items/qsgtextnode.cpp @@ -52,9 +52,11 @@ #include <qtextlayout.h> #include <qabstracttextdocumentlayout.h> #include <qxmlstream.h> +#include <qrawfont.h> #include <private/qdeclarativestyledtext_p.h> #include <private/qfont_p.h> #include <private/qfontengine_p.h> +#include <private/qrawfont_p.h> QT_BEGIN_NAMESPACE @@ -119,31 +121,32 @@ void QSGTextNode::setStyleColor(const QColor &styleColor) } #endif -void QSGTextNode::addTextDecorations(const QPointF &position, const QFont &font, const QColor &color, - qreal width) +void QSGTextNode::addTextDecorations(const QPointF &position, const QRawFont &font, const QColor &color, + qreal width, bool hasOverline, bool hasStrikeOut, bool hasUnderline) { - QFontPrivate *dptrFont = QFontPrivate::get(font); - QFontEngine *fontEngine = dptrFont->engineForScript(QUnicodeTables::Common); + Q_ASSERT(font.isValid()); + QRawFontPrivate *dptrFont = QRawFontPrivate::get(font); + QFontEngine *fontEngine = dptrFont->fontEngine; qreal lineThickness = fontEngine->lineThickness().toReal(); QRectF line(position.x(), position.y() - lineThickness / 2.0, width, lineThickness); - if (font.underline()) { + if (hasUnderline) { int underlinePosition = fontEngine->underlinePosition().ceil().toInt(); QRectF underline(line); underline.translate(0.0, underlinePosition); appendChildNode(new QSGSimpleRectNode(underline, color)); } - qreal ascent = fontEngine->ascent().toReal(); - if (font.overline()) { + qreal ascent = font.ascent(); + if (hasOverline) { QRectF overline(line); overline.translate(0.0, -ascent); appendChildNode(new QSGSimpleRectNode(overline, color)); } - if (font.strikeOut()) { + if (hasStrikeOut) { QRectF strikeOut(line); strikeOut.translate(0.0, ascent / -3.0); appendChildNode(new QSGSimpleRectNode(strikeOut, color)); @@ -189,8 +192,11 @@ void QSGTextNode::addTextLayout(const QPointF &position, QTextLayout *textLayout addGlyphs(position, glyphsList.at(i), color, style, styleColor); QFont font = textLayout->font(); - if (font.strikeOut() || font.underline() || font.overline()) - addTextDecorations(position, font, color, textLayout->boundingRect().width()); + QRawFont rawFont = QRawFont::fromFont(font); + if (font.strikeOut() || font.underline() || font.overline()) { + addTextDecorations(position, rawFont, color, textLayout->boundingRect().width(), + font.overline(), font.strikeOut(), font.underline()); + } } @@ -356,10 +362,11 @@ void QSGTextNode::addTextBlock(const QPointF &position, QTextDocument *textDocum QSGGlyphNode *glyphNode = addGlyphs(position + blockPosition + ascent, glyphs, color, style, styleColor); - QFont font = glyphs.font(); + QRawFont font = glyphs.font(); QPointF baseLine = glyphNode->baseLine(); qreal width = glyphNode->boundingRect().width(); - addTextDecorations(baseLine, font, color, width); + addTextDecorations(baseLine, font, color, width, + glyphs.overline(), glyphs.strikeOut(), glyphs.underline()); } } diff --git a/src/declarative/items/qsgtextnode_p.h b/src/declarative/items/qsgtextnode_p.h index 012aa0233b..e7bd95faee 100644 --- a/src/declarative/items/qsgtextnode_p.h +++ b/src/declarative/items/qsgtextnode_p.h @@ -53,6 +53,7 @@ class QTextBlock; class QColor; class QTextDocument; class QSGContext; +class QRawFont; class QSGTextNode : public QSGTransformNode { @@ -73,9 +74,8 @@ private: const QColor &overrideColor, QSGText::TextStyle style = QSGText::Normal, const QColor &styleColor = QColor()); QSGGlyphNode *addGlyphs(const QPointF &position, const QGlyphs &glyphs, const QColor &color, QSGText::TextStyle style = QSGText::Normal, const QColor &styleColor = QColor()); - void addTextDecorations(const QPointF &position, const QFont &font, const QColor &color, - qreal width); - + void addTextDecorations(const QPointF &position, const QRawFont &font, const QColor &color, + qreal width, bool hasOverline, bool hasStrikeOut, bool hasUnderline); QSGContext *m_context; }; diff --git a/src/declarative/scenegraph/qsgdefaultglyphnode.cpp b/src/declarative/scenegraph/qsgdefaultglyphnode.cpp index 5b1fd133ae..57482a9cf4 100644 --- a/src/declarative/scenegraph/qsgdefaultglyphnode.cpp +++ b/src/declarative/scenegraph/qsgdefaultglyphnode.cpp @@ -74,8 +74,8 @@ void QSGDefaultGlyphNode::setGlyphs(const QPointF &position, const QGlyphs &glyp if (m_material != 0) delete m_material; - QFontEngine *fe = QFontPrivate::get(glyphs.font())->engineForScript(QUnicodeTables::Common); - m_material = new QSGTextMaskMaterial(fe); + QRawFont font = glyphs.font(); + m_material = new QSGTextMaskMaterial(font); m_material->setColor(m_color); QRectF boundingRect; diff --git a/src/declarative/scenegraph/qsgdefaultglyphnode_p.cpp b/src/declarative/scenegraph/qsgdefaultglyphnode_p.cpp index 489f55c005..00090be9ea 100644 --- a/src/declarative/scenegraph/qsgdefaultglyphnode_p.cpp +++ b/src/declarative/scenegraph/qsgdefaultglyphnode_p.cpp @@ -49,6 +49,8 @@ #include <private/qsgtexture_p.h> +#include <private/qrawfont_p.h> + QT_BEGIN_NAMESPACE class QSGTextMaskMaterialData : public QSGMaterialShader @@ -144,42 +146,33 @@ void QSGTextMaskMaterialData::updateState(const RenderState &state, QSGMaterial m_program.setUniformValue(m_matrix_id, state.combinedMatrix()); } -QSGTextMaskMaterial::QSGTextMaskMaterial(QFontEngine *fontEngine) - : m_texture(0), m_glyphCache(), m_fontEngine(fontEngine), m_originalFontEngine(fontEngine) +QSGTextMaskMaterial::QSGTextMaskMaterial(const QRawFont &font) + : m_texture(0), m_glyphCache(), m_font(font) { - Q_ASSERT(m_fontEngine != 0); - -#if defined(Q_WS_MAC) - // A QFont is always backed by a multi font engine on Mac. SInce QGlyphs contains a - // non-font-merging font at this point, we can assume the multi engine contains a - // single font engine which represents the font needed to display the glyphs. - if (m_originalFontEngine->type() == QFontEngine::Multi) { - m_fontEngine = static_cast<QFontEngineMulti *>(m_originalFontEngine)->engine(0); - } -#endif - - m_originalFontEngine->ref.ref(); init(); } QSGTextMaskMaterial::~QSGTextMaskMaterial() { - Q_ASSERT(m_originalFontEngine != 0); - m_originalFontEngine->ref.deref(); } void QSGTextMaskMaterial::init() { + Q_ASSERT(m_font.isValid()); + QFontEngineGlyphCache::Type type = QFontEngineGlyphCache::Raster_A8; setFlag(Blending, true); QGLContext *ctx = const_cast<QGLContext *>(QGLContext::currentContext()); Q_ASSERT(ctx != 0); - m_glyphCache = m_fontEngine->glyphCache(ctx, type, QTransform()); - if (!m_glyphCache || m_glyphCache->cacheType() != type) { - m_glyphCache = new QGLTextureGlyphCache(ctx, type, QTransform()); - m_fontEngine->setGlyphCache(ctx, m_glyphCache.data()); + QRawFontPrivate *fontD = QRawFontPrivate::get(m_font); + if (fontD->fontEngine != 0) { + m_glyphCache = fontD->fontEngine->glyphCache(ctx, type, QTransform()); + if (!m_glyphCache || m_glyphCache->cacheType() != type) { + m_glyphCache = new QGLTextureGlyphCache(ctx, type, QTransform()); + fontD->fontEngine->setGlyphCache(ctx, m_glyphCache.data()); + } } #if !defined(QT_OPENGL_ES_2) @@ -197,14 +190,16 @@ void QSGTextMaskMaterial::populate(const QPointF &p, QRectF *boundingRect, QPointF *baseLine) { + Q_ASSERT(m_font.isValid()); QVector<QFixedPoint> fixedPointPositions; for (int i=0; i<glyphPositions.size(); ++i) fixedPointPositions.append(QFixedPoint::fromPointF(glyphPositions.at(i))); QTextureGlyphCache *cache = glyphCache(); - cache->populate(m_fontEngine, glyphIndexes.size(), glyphIndexes.constData(), - fixedPointPositions.data()); + QRawFontPrivate *fontD = QRawFontPrivate::get(m_font); + cache->populate(fontD->fontEngine, glyphIndexes.size(), glyphIndexes.constData(), + fixedPointPositions.data()); cache->fillInPendingGlyphs(); int margin = cache->glyphMargin(); @@ -215,8 +210,8 @@ void QSGTextMaskMaterial::populate(const QPointF &p, Q_ASSERT(geometry->stride() == sizeof(QVector4D)); ushort *ip = geometry->indexDataAsUShort(); - QPointF position(p.x(), p.y() - m_fontEngine->ascent().toReal()); - bool supportsSubPixelPositions = m_fontEngine->supportsSubPixelPositions(); + QPointF position(p.x(), p.y() - m_font.ascent()); + bool supportsSubPixelPositions = fontD->fontEngine->supportsSubPixelPositions(); for (int i=0; i<glyphIndexes.size(); ++i) { QFixed subPixelPosition; if (supportsSubPixelPositions) diff --git a/src/declarative/scenegraph/qsgdefaultglyphnode_p_p.h b/src/declarative/scenegraph/qsgdefaultglyphnode_p_p.h index 1e90426019..b5f0d70020 100644 --- a/src/declarative/scenegraph/qsgdefaultglyphnode_p_p.h +++ b/src/declarative/scenegraph/qsgdefaultglyphnode_p_p.h @@ -47,6 +47,7 @@ #include <qsggeometry.h> #include <qshareddata.h> #include <private/qsgtexture_p.h> +#include <qrawfont.h> QT_BEGIN_NAMESPACE @@ -57,7 +58,7 @@ class Geometry; class QSGTextMaskMaterial: public QSGMaterial { public: - QSGTextMaskMaterial(QFontEngine *fontEngine); + QSGTextMaskMaterial(const QRawFont &font); ~QSGTextMaskMaterial(); virtual QSGMaterialType *type() const; @@ -84,8 +85,7 @@ private: QSGPlainTexture *m_texture; QExplicitlySharedDataPointer<QFontEngineGlyphCache> m_glyphCache; - QFontEngine *m_fontEngine; - QFontEngine *m_originalFontEngine; + QRawFont m_font; QColor m_color; QSize m_size; }; diff --git a/src/declarative/scenegraph/qsgdistancefieldglyphcache.cpp b/src/declarative/scenegraph/qsgdistancefieldglyphcache.cpp index ae4a58b594..957632c46f 100644 --- a/src/declarative/scenegraph/qsgdistancefieldglyphcache.cpp +++ b/src/declarative/scenegraph/qsgdistancefieldglyphcache.cpp @@ -47,20 +47,13 @@ #include <qglshaderprogram.h> #include <private/qglengineshadersource_p.h> #include <private/qsgcontext_p.h> +#include <private/qrawfont_p.h> #include <qglfunctions.h> +#include <qglyphs.h> +#include <qrawfont.h> QT_BEGIN_NAMESPACE -void qt_disableFontHinting(QFont &font) -{ - QFontEngine *fontEngine = QFontPrivate::get(font)->engineForScript(QUnicodeTables::Common); - if (fontEngine->type() == QFontEngine::Multi) { - QFontEngineMulti *fem = static_cast<QFontEngineMulti *>(fontEngine); - fontEngine = fem->engine(0); - } - fontEngine->setDefaultHintStyle(QFontEngine::HintNone); -} - #define QT_DISTANCEFIELD_DEFAULT_BASEFONTSIZE 54 #define QT_DISTANCEFIELD_DEFAULT_TILESIZE 64 #define QT_DISTANCEFIELD_DEFAULT_SCALE 16 @@ -486,18 +479,20 @@ static void convert_to_Format_Alpha(QImage *image) } } -static bool fontHasNarrowOutlines(const QFont &f) +static bool fontHasNarrowOutlines(const QRawFont &f) { - QFont font = f; + return true; + QRawFont font = f; font.setPixelSize(QT_DISTANCEFIELD_DEFAULT_BASEFONTSIZE); - QRect br = QFontMetrics(font).boundingRect(QLatin1Char('O')); - QImage im(br.size(), QImage::Format_ARGB32_Premultiplied); - im.fill(Qt::transparent); - QPainter p(&im); - p.setCompositionMode(QPainter::CompositionMode_Source); - p.setFont(font); - p.drawText(-br.x(), -br.y(), QLatin1String("O")); - p.end(); + Q_ASSERT(font.isValid()); + + QVector<quint32> glyphIndices = font.glyphIndexesForString(QLatin1String("O")); + if (glyphIndices.size() < 1) + return false; + + QImage im = font.alphaMapForGlyph(glyphIndices.at(0), QRawFont::PixelAntialiasing); + if (im.isNull()) + return false; int minHThick = 999; int minVThick = 999; @@ -540,26 +535,20 @@ DEFINE_BOOL_CONFIG_OPTION(disableDistanceField, QML_DISABLE_DISTANCEFIELD) QHash<QString, QSGDistanceFieldGlyphCache *> QSGDistanceFieldGlyphCache::m_caches; QHash<QString, QGLContextGroupResource<QSGDistanceFieldGlyphCache::DistanceFieldTextureData> > QSGDistanceFieldGlyphCache::m_textures_data; -static QString fontKey(const QFont &font) +static QString fontKey(const QRawFont &font) { QString key; - QFontEngine *fontEngine = QFontPrivate::get(font)->engineForScript(QUnicodeTables::Common); - if (fontEngine->type() == QFontEngine::Multi) { - QFontEngineMulti *fem = static_cast<QFontEngineMulti *>(fontEngine); - fontEngine = fem->engine(0); - } - - key = fontEngine->fontDef.family; + key = font.familyName(); key.remove(QLatin1String(" ")); - QString italic = font.italic() ? QLatin1String("i") : QLatin1String(""); + QString italic = font.style() == QFont::StyleItalic ? QLatin1String("i") : QLatin1String(""); QString bold = font.weight() > QFont::Normal ? QLatin1String("b") : QLatin1String(""); - key += bold + italic + QString::number(fontEngine->fontDef.pixelSize); + key += bold + italic + QString::number(qreal(font.pixelSize())); return key; } -QSGDistanceFieldGlyphCache *QSGDistanceFieldGlyphCache::get(const QGLContext *ctx, const QFont &font) +QSGDistanceFieldGlyphCache *QSGDistanceFieldGlyphCache::get(const QGLContext *ctx, const QRawFont &font) { QString key = QString::number(long(ctx), 16) + fontKey(font); QHash<QString, QSGDistanceFieldGlyphCache *>::iterator atlas = m_caches.find(key); @@ -574,39 +563,30 @@ QSGDistanceFieldGlyphCache::DistanceFieldTextureData *QSGDistanceFieldGlyphCache return m_textures_data[m_distanceFieldKey].value(ctx); } -QSGDistanceFieldGlyphCache::QSGDistanceFieldGlyphCache(const QGLContext *c, const QFont &font) +QSGDistanceFieldGlyphCache::QSGDistanceFieldGlyphCache(const QGLContext *c, const QRawFont &font) : QObject() , m_maxTextureSize(0) , ctx(c) , m_blitProgram(0) { + Q_ASSERT(font.isValid()); m_font = font; - m_fontEngine = QFontPrivate::get(m_font)->engineForScript(QUnicodeTables::Common); - if (m_fontEngine->type() == QFontEngine::Multi) { - QFontEngineMulti *fem = static_cast<QFontEngineMulti *>(m_fontEngine); - m_fontEngine = fem->engine(0); - } - qt_disableFontHinting(m_font); - QString basename = m_fontEngine->fontDef.family; + QString basename = m_font.familyName(); basename.remove(QLatin1String(" ")); - QString italic = m_font.italic() ? QLatin1String("i") : QLatin1String(""); + QString italic = m_font.style() == QFont::StyleItalic ? QLatin1String("i") : QLatin1String(""); QString bold = m_font.weight() > QFont::Normal ? QLatin1String("b") : QLatin1String(""); m_distanceFieldKey = basename + bold + italic; m_textureData = textureData(); - m_glyphCount = m_fontEngine->glyphCount(); + QRawFontPrivate *fontD = QRawFontPrivate::get(m_font); + m_glyphCount = fontD->fontEngine->glyphCount(); m_textureData->doubleGlyphResolution = fontHasNarrowOutlines(font) && m_glyphCount < QT_DISTANCEFIELD_HIGHGLYPHCOUNT; - QFont referenceFont = m_font; - referenceFont.setPixelSize(QT_DISTANCEFIELD_BASEFONTSIZE); - qt_disableFontHinting(referenceFont); - m_referenceFontEngine = QFontPrivate::get(referenceFont)->engineForScript(QUnicodeTables::Common); - if (m_referenceFontEngine->type() == QFontEngine::Multi) { - QFontEngineMulti *fem = static_cast<QFontEngineMulti *>(m_referenceFontEngine); - m_referenceFontEngine = fem->engine(0); - } + m_referenceFont = m_font; + m_referenceFont.setPixelSize(QT_DISTANCEFIELD_BASEFONTSIZE); + Q_ASSERT(m_referenceFont.isValid()); m_vertexCoordinateArray[0] = -1.0f; m_vertexCoordinateArray[1] = -1.0f; @@ -666,9 +646,7 @@ QSGDistanceFieldGlyphCache::Metrics QSGDistanceFieldGlyphCache::glyphMetrics(gly { QHash<glyph_t, Metrics>::iterator metric = m_metrics.find(glyph); if (metric == m_metrics.end()) { - QPainterPath path; - QFixedPoint p; - m_fontEngine->addGlyphsToPath(&glyph, &p, 1, &path, 0); + QPainterPath path = m_font.pathForGlyph(glyph); Metrics m; m.width = path.boundingRect().width(); @@ -689,19 +667,10 @@ QSGDistanceFieldGlyphCache::TexCoord QSGDistanceFieldGlyphCache::glyphTexCoord(g QImage QSGDistanceFieldGlyphCache::renderDistanceFieldGlyph(glyph_t glyph) const { - QFont renderFont = m_font; + QRawFont renderFont = m_font; renderFont.setPixelSize(QT_DISTANCEFIELD_BASEFONTSIZE * QT_DISTANCEFIELD_SCALE); - qt_disableFontHinting(renderFont); - QFontEngine *fontEngine = QFontPrivate::get(renderFont)->engineForScript(QUnicodeTables::Common); - if (fontEngine->type() == QFontEngine::Multi) { - QFontEngineMulti *fem = static_cast<QFontEngineMulti *>(fontEngine); - fontEngine = fem->engine(0); - } - - QPainterPath path; - QFixedPoint pt; - fontEngine->addGlyphsToPath(&glyph, &pt, 1, &path, 0); + QPainterPath path = renderFont.pathForGlyph(glyph); path.translate(-path.boundingRect().topLeft()); path.setFillRule(Qt::WindingFill); @@ -714,7 +683,7 @@ QImage QSGDistanceFieldGlyphCache::renderDistanceFieldGlyph(glyph_t glyph) const qreal QSGDistanceFieldGlyphCache::fontScale() const { - return m_fontEngine->fontDef.pixelSize / QT_DISTANCEFIELD_BASEFONTSIZE; + return qreal(m_font.pixelSize()) / QT_DISTANCEFIELD_BASEFONTSIZE; } int QSGDistanceFieldGlyphCache::distanceFieldRadius() const @@ -738,10 +707,7 @@ void QSGDistanceFieldGlyphCache::populate(int count, const glyph_t *glyphs) || (cacheIsFull() && m_textureData->unusedGlyphs.isEmpty())) continue; - QPainterPath path; - QFixedPoint p; - m_referenceFontEngine->addGlyphsToPath(&glyphIndex, &p, 1, &path, 0); - + QPainterPath path = m_referenceFont.pathForGlyph(glyphIndex); if (path.isEmpty()) { m_textureData->texCoords.insert(glyphIndex, TexCoord()); continue; @@ -814,6 +780,7 @@ void QSGDistanceFieldGlyphCache::createTexture(int width, int height) glDeleteTextures(1, &m_textureData->texture); m_textureData->texture = 0; } + } void QSGDistanceFieldGlyphCache::resizeTexture(int width, int height) diff --git a/src/declarative/scenegraph/qsgdistancefieldglyphcache_p.h b/src/declarative/scenegraph/qsgdistancefieldglyphcache_p.h index 434f72e919..60e5b5921a 100644 --- a/src/declarative/scenegraph/qsgdistancefieldglyphcache_p.h +++ b/src/declarative/scenegraph/qsgdistancefieldglyphcache_p.h @@ -43,14 +43,13 @@ #define DISTANCEFIELDGLYPHCACHE_H #include <qgl.h> +#include <qrawfont.h> #include <private/qgl_p.h> #include <private/qfont_p.h> #include <private/qfontengine_p.h> QT_BEGIN_NAMESPACE -void qt_disableFontHinting(QFont &font); - class QGLShaderProgram; class Q_DECLARATIVE_EXPORT QSGDistanceFieldGlyphCache : public QObject @@ -59,7 +58,7 @@ class Q_DECLARATIVE_EXPORT QSGDistanceFieldGlyphCache : public QObject public: ~QSGDistanceFieldGlyphCache(); - static QSGDistanceFieldGlyphCache *get(const QGLContext *ctx, const QFont &font); + static QSGDistanceFieldGlyphCache *get(const QGLContext *ctx, const QRawFont &font); struct Metrics { qreal width; @@ -108,16 +107,16 @@ private Q_SLOTS: void onContextDestroyed(const QGLContext *context); private: - QSGDistanceFieldGlyphCache(const QGLContext *c, const QFont &font); + QSGDistanceFieldGlyphCache(const QGLContext *c, const QRawFont &font); void createTexture(int width, int height); void resizeTexture(int width, int height); static QHash<QString, QSGDistanceFieldGlyphCache *> m_caches; - QFont m_font; - QFontEngine *m_fontEngine; - QFontEngine *m_referenceFontEngine; + QRawFont m_font; + QRawFont m_referenceFont; + QString m_distanceFieldKey; int m_glyphCount; QHash<glyph_t, Metrics> m_metrics; diff --git a/src/declarative/scenegraph/qsgdistancefieldglyphnode.cpp b/src/declarative/scenegraph/qsgdistancefieldglyphnode.cpp index f37e2cddd1..ed2dba1ea3 100644 --- a/src/declarative/scenegraph/qsgdistancefieldglyphnode.cpp +++ b/src/declarative/scenegraph/qsgdistancefieldglyphnode.cpp @@ -89,8 +89,8 @@ void QSGDistanceFieldGlyphNode::setPreferredAntialiasingMode(AntialiasingMode mo void QSGDistanceFieldGlyphNode::setGlyphs(const QPointF &position, const QGlyphs &glyphs) { - QFontEngine *fe = QFontPrivate::get(glyphs.font())->engineForScript(QUnicodeTables::Common); - m_position = QPointF(position.x(), position.y() - fe->ascent().toReal()); + QRawFont font = glyphs.font(); + m_position = QPointF(position.x(), position.y() - font.ascent()); m_glyphs = glyphs; updateFont(); diff --git a/src/gui/text/qrawfont_p.h b/src/gui/text/qrawfont_p.h index f9a9ab55cd..18f3e7d006 100644 --- a/src/gui/text/qrawfont_p.h +++ b/src/gui/text/qrawfont_p.h @@ -62,7 +62,7 @@ QT_BEGIN_NAMESPACE namespace { class CustomFontFileLoader; } -class Q_AUTOTEST_EXPORT QRawFontPrivate +class Q_GUI_EXPORT QRawFontPrivate { public: QRawFontPrivate() |