Make QFontEngine::type() non-virtual

Change-Id: I24ece90d6d8f96dad0c41a474a491b4ea96d97c3
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
bb10
Konstantin Ritt 2014-03-05 09:00:31 +02:00 committed by The Qt Project
parent e69284db08
commit 9f1089531d
12 changed files with 33 additions and 56 deletions

View File

@ -220,8 +220,8 @@ Q_AUTOTEST_EXPORT QList<QFontEngine *> QFontEngine_stopCollectingEngines()
// QFontEngine
QFontEngine::QFontEngine()
: ref(0),
QFontEngine::QFontEngine(Type type)
: m_type(type), ref(0),
font_(0), font_destroy_func(0),
face_(0), face_destroy_func(0)
{
@ -1369,7 +1369,15 @@ QFontEngine::GlyphCacheEntry &QFontEngine::GlyphCacheEntry::operator=(const Glyp
// ------------------------------------------------------------------
QFontEngineBox::QFontEngineBox(int size)
: _size(size)
: QFontEngine(Box),
_size(size)
{
cache_cost = sizeof(QFontEngineBox);
}
QFontEngineBox::QFontEngineBox(Type type, int size)
: QFontEngine(type),
_size(size)
{
cache_cost = sizeof(QFontEngineBox);
}
@ -1502,11 +1510,6 @@ bool QFontEngineBox::canRender(const QChar *, int) const
return true;
}
QFontEngine::Type QFontEngineBox::type() const
{
return Box;
}
QImage QFontEngineBox::alphaMapForGlyph(glyph_t)
{
QImage image(_size, _size, QImage::Format_Indexed8);
@ -1538,6 +1541,7 @@ static inline glyph_t stripped(glyph_t glyph)
{ return glyph & 0x00ffffff; }
QFontEngineMulti::QFontEngineMulti(int engineCount)
: QFontEngine(Multi)
{
engines.fill(0, engineCount);
cache_cost = 0;
@ -1968,13 +1972,4 @@ QImage QFontEngineMulti::alphaRGBMapForGlyph(glyph_t glyph, QFixed subPixelPosit
return engine(which)->alphaRGBMapForGlyph(stripped(glyph), subPixelPosition, t);
}
QTestFontEngine::QTestFontEngine(int size)
: QFontEngineBox(size)
{}
QFontEngine::Type QTestFontEngine::type() const
{
return TestFontEngine;
}
QT_END_NAMESPACE

View File

@ -635,6 +635,7 @@ static void convoluteBitmap(const uchar *src, uchar *dst, int width, int height,
}
QFontEngineFT::QFontEngineFT(const QFontDef &fd)
: QFontEngine(Freetype)
{
fontDef = fd;
matrix.xx = 0x10000;

View File

@ -228,9 +228,6 @@ private:
virtual glyph_t glyphIndex(uint ucs4) const;
void doKerning(QGlyphLayout *, ShaperFlags) const;
inline virtual Type type() const
{ return QFontEngine::Freetype; }
virtual void getUnscaledGlyph(glyph_t glyph, QPainterPath *path, glyph_metrics_t *metrics);
virtual bool supportsTransformation(const QTransform &transform) const;

View File

@ -125,9 +125,10 @@ public:
};
Q_DECLARE_FLAGS(ShaperFlags, ShaperFlag)
QFontEngine();
virtual ~QFontEngine();
inline Type type() const { return m_type; }
// all of these are in unscaled metrics if the engine supports uncsaled metrics,
// otherwise in design metrics
struct Properties {
@ -230,8 +231,6 @@ public:
virtual bool supportsTransformation(const QTransform &transform) const;
virtual Type type() const = 0;
virtual int glyphCount() const;
virtual int glyphMargin(GlyphFormat format) { return format == Format_A32 ? 2 : 0; }
@ -260,6 +259,10 @@ public:
};
virtual void setDefaultHintStyle(HintStyle) { }
private:
const Type m_type;
public:
QAtomicInt ref;
QFontDef fontDef;
@ -294,6 +297,8 @@ public:
inline QVariant userData() const { return m_userData; }
protected:
explicit QFontEngine(Type type);
QFixed lastRightBearing(const QGlyphLayout &glyphs, bool round = false);
inline void setUserData(const QVariant &userData) { m_userData = userData; }
@ -361,9 +366,11 @@ public:
virtual bool canRender(const QChar *string, int len) const;
virtual Type type() const;
inline int size() const { return _size; }
protected:
explicit QFontEngineBox(Type type, int size);
private:
friend class QFontPrivate;
int _size;
@ -403,9 +410,6 @@ public:
virtual qreal minLeftBearing() const;
virtual qreal minRightBearing() const;
virtual inline Type type() const
{ return QFontEngine::Multi; }
virtual bool canRender(const QChar *string, int len) const;
QFontEngine *engine(int at) const
@ -430,8 +434,7 @@ protected:
class QTestFontEngine : public QFontEngineBox
{
public:
QTestFontEngine(int size);
virtual Type type() const;
inline QTestFontEngine(int size) : QFontEngineBox(TestFontEngine, size) {}
};
QT_END_NAMESPACE

View File

@ -237,7 +237,8 @@ static inline unsigned int getChar(const QChar *str, int &i, const int len)
}
QFontEngineQPA::QFontEngineQPA(const QFontDef &def, const QByteArray &data)
: fontData(reinterpret_cast<const uchar *>(data.constData())), dataSize(data.size())
: QFontEngine(QPF2),
fontData(reinterpret_cast<const uchar *>(data.constData())), dataSize(data.size())
{
fontDef = def;
cache_cost = 100;
@ -510,11 +511,6 @@ QFixed QFontEngineQPA::lineThickness() const
return QFixed::fromReal(extractHeaderField(fontData, Tag_LineThickness).value<qreal>());
}
QFontEngine::Type QFontEngineQPA::type() const
{
return QFontEngine::QPF2;
}
bool QFontEngineQPA::isValid() const
{
return fontData && dataSize && (cmapOffset || externalCMap)

View File

@ -182,8 +182,6 @@ public:
QFixed underlinePosition() const;
QFixed lineThickness() const;
Type type() const;
virtual int glyphCount() const { return glyphMapEntries; }
bool isValid() const;

View File

@ -85,6 +85,7 @@ CGAffineTransform qt_transform_from_fontdef(const QFontDef &fontDef)
}
QCoreTextFontEngine::QCoreTextFontEngine(CTFontRef font, const QFontDef &def)
: QFontEngine(Mac)
{
fontDef = def;
transform = qt_transform_from_fontdef(fontDef);
@ -95,6 +96,7 @@ QCoreTextFontEngine::QCoreTextFontEngine(CTFontRef font, const QFontDef &def)
}
QCoreTextFontEngine::QCoreTextFontEngine(CGFontRef font, const QFontDef &def)
: QFontEngine(Mac)
{
fontDef = def;
transform = qt_transform_from_fontdef(fontDef);

View File

@ -84,8 +84,6 @@ public:
virtual int synthesized() const { return synthesisFlags; }
virtual bool supportsSubPixelPositions() const { return true; }
virtual Type type() const { return QFontEngine::Mac; }
void draw(CGContextRef ctx, qreal x, qreal y, const QTextItemInt &ti, int paintDeviceHeight);
virtual FaceId faceId() const;

View File

@ -272,7 +272,8 @@ int QWindowsFontEngine::getGlyphIndexes(const QChar *str, int numChars, QGlyphLa
QWindowsFontEngine::QWindowsFontEngine(const QString &name,
HFONT _hfont, bool stockFontIn, LOGFONT lf,
const QSharedPointer<QWindowsFontEngineData> &fontEngineData) :
const QSharedPointer<QWindowsFontEngineData> &fontEngineData)
: QFontEngine(Win),
m_fontEngineData(fontEngineData),
_name(name),
hfont(_hfont),
@ -771,11 +772,6 @@ qreal QWindowsFontEngine::minRightBearing() const
#endif // Q_OS_WINCE
}
QFontEngine::Type QWindowsFontEngine::type() const
{
return QFontEngine::Win;
}
static inline double qt_fixed_to_double(const FIXED &p) {
return ((p.value << 16) + p.fract) / 65536.0;
}

View File

@ -110,8 +110,6 @@ public:
virtual qreal minLeftBearing() const;
virtual qreal minRightBearing() const;
Type type() const;
virtual QImage alphaMapForGlyph(glyph_t t) { return alphaMapForGlyph(t, QTransform()); }
virtual QImage alphaMapForGlyph(glyph_t, const QTransform &xform);
virtual QImage alphaRGBMapForGlyph(glyph_t t, QFixed subPixelPosition, const QTransform &xform);

View File

@ -201,8 +201,8 @@ namespace {
QWindowsFontEngineDirectWrite::QWindowsFontEngineDirectWrite(IDWriteFontFace *directWriteFontFace,
qreal pixelSize,
const QSharedPointer<QWindowsFontEngineData> &d)
: m_fontEngineData(d)
: QFontEngine(DirectWrite)
, m_fontEngineData(d)
, m_directWriteFontFace(directWriteFontFace)
, m_directWriteBitmapRenderTarget(0)
, m_lineThickness(-1)
@ -642,11 +642,6 @@ QImage QWindowsFontEngineDirectWrite::alphaRGBMapForGlyph(glyph_t t,
: mask.convertToFormat(QImage::Format_RGB32);
}
QFontEngine::Type QWindowsFontEngineDirectWrite::type() const
{
return QFontEngine::DirectWrite;
}
QFontEngine *QWindowsFontEngineDirectWrite::cloneWithSize(qreal pixelSize) const
{
QFontEngine *fontEngine = new QWindowsFontEngineDirectWrite(m_directWriteFontFace,

View File

@ -97,8 +97,6 @@ public:
QFontEngine *cloneWithSize(qreal pixelSize) const;
Type type() const;
const QSharedPointer<QWindowsFontEngineData> &fontEngineData() const { return m_fontEngineData; }
static QString fontNameSubstitute(const QString &familyName);