summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>2011-04-14 18:16:18 +0200
committeraxis <qt-info@nokia.com>2011-04-26 14:55:38 +0200
commit039ce3e416905b41b22e4644cedc28122fc71ea8 (patch)
treefee4911666bf21315d100a154592a07b0172ecb9
parentec40dd2bb51868bca10dbd0c9116f3224ff2b29b (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.cpp2
-rw-r--r--src/declarative/items/qsgtextnode.cpp31
-rw-r--r--src/declarative/items/qsgtextnode_p.h6
-rw-r--r--src/declarative/scenegraph/qsgdefaultglyphnode.cpp4
-rw-r--r--src/declarative/scenegraph/qsgdefaultglyphnode_p.cpp43
-rw-r--r--src/declarative/scenegraph/qsgdefaultglyphnode_p_p.h6
-rw-r--r--src/declarative/scenegraph/qsgdistancefieldglyphcache.cpp103
-rw-r--r--src/declarative/scenegraph/qsgdistancefieldglyphcache_p.h13
-rw-r--r--src/declarative/scenegraph/qsgdistancefieldglyphnode.cpp4
-rw-r--r--src/gui/text/qrawfont_p.h2
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()