diff options
author | Konstantin Ritt <ritt.ks@gmail.com> | 2013-09-09 11:46:50 +0300 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-10 01:56:20 +0200 |
commit | 106843ad1afa2f5c0aedaa748088d4ebacd6d73d (patch) | |
tree | 4d6059989e0177d71ca8962b86de9dc255c46dea /src/gui/text | |
parent | 8b124a7ddefbacea60d2e5d44e39eed4aa83bec5 (diff) |
Make QFontEngine not derive from QObject
Whilst having the objectName set for each engine is
somewhat handy when debugging, deriving from QObject just for that
is a wasting of memory in all other cases.
This also broke the font engine abstraction by allowing qobject_cast()
to access some private data; the only sane way to distinguish
engines is querying their Type value.
Change-Id: Ib1d195692859eb39089f6d8d9016cb8f9dcc0400
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/gui/text')
-rw-r--r-- | src/gui/text/qfontengine.cpp | 2 | ||||
-rw-r--r-- | src/gui/text/qfontengine_p.h | 11 | ||||
-rw-r--r-- | src/gui/text/qfontengine_qpa.cpp | 5 |
3 files changed, 12 insertions, 6 deletions
diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp index d561fcf823..88a24b5e6a 100644 --- a/src/gui/text/qfontengine.cpp +++ b/src/gui/text/qfontengine.cpp @@ -206,7 +206,7 @@ Q_AUTOTEST_EXPORT QList<QFontEngine *> QFontEngine_stopCollectingEngines() // QFontEngine QFontEngine::QFontEngine() - : QObject(), ref(0), + : ref(0), font_(0), font_destroy_func(0), face_(0), face_destroy_func(0) { diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h index 4427000d03..1a6862898d 100644 --- a/src/gui/text/qfontengine_p.h +++ b/src/gui/text/qfontengine_p.h @@ -86,9 +86,8 @@ enum HB_Compat_Error { typedef void (*qt_destroy_func_t) (void *user_data); -class Q_GUI_EXPORT QFontEngine : public QObject +class Q_GUI_EXPORT QFontEngine { - Q_OBJECT public: enum Type { Box, @@ -300,9 +299,13 @@ public: QImage currentlyLockedAlphaMap; int m_subPixelPositionCount; // Number of positions within a single pixel for this cache + inline QVariant userData() const { return m_userData; } + protected: QFixed lastRightBearing(const QGlyphLayout &glyphs, bool round = false); + inline void setUserData(const QVariant &userData) { m_userData = userData; } + private: struct GlyphCacheEntry { const void *context; @@ -311,6 +314,9 @@ private: }; mutable QLinkedList<GlyphCacheEntry> m_glyphCaches; + +private: + QVariant m_userData; }; Q_DECLARE_OPERATORS_FOR_FLAGS(QFontEngine::ShaperFlags) @@ -368,7 +374,6 @@ private: class Q_GUI_EXPORT QFontEngineMulti : public QFontEngine { - Q_OBJECT public: explicit QFontEngineMulti(int engineCount); ~QFontEngineMulti(); diff --git a/src/gui/text/qfontengine_qpa.cpp b/src/gui/text/qfontengine_qpa.cpp index 0a730abcac..9b21d61aad 100644 --- a/src/gui/text/qfontengine_qpa.cpp +++ b/src/gui/text/qfontengine_qpa.cpp @@ -687,7 +687,6 @@ void QFontEngineMultiQPA::init(QFontEngine *fe) engines[0] = fe; fe->ref.ref(); fontDef = engines[0]->fontDef; - setObjectName(QStringLiteral("QFontEngineMultiQPA")); cache_cost = fe->cache_cost; } @@ -754,7 +753,9 @@ QFontEngine* QFontEngineMultiQPA::createMultiFontEngine(QFontEngine *fe, int scr QFontCache::EngineCache::Iterator it = fc->engineCache.find(key), end = fc->engineCache.end(); while (it != end && it.key() == key) { - QFontEngineMulti *cachedEngine = qobject_cast<QFontEngineMulti *>(it.value().data); + QFontEngineMulti *cachedEngine = 0; + if (it.value().data->type() == QFontEngine::Multi) + cachedEngine = static_cast<QFontEngineMulti *>(it.value().data); if (faceIsLocal || (cachedEngine && fe == cachedEngine->engine(0))) { engine = cachedEngine; fc->updateHitCountAndTimeStamp(it.value()); |