Add support for rawFonts loaded from data in FaceId
The problem was that with an empty filename and index of 0, all raw fonts loaded from data had the same FaceId, and we wouldn't bother to load another one after doing this once. This commit introduces a uuid in FaceId to help distinguish them in that case. Change-Id: I93655ff07a7d8856af1f854024e207c519f8ed1a Reviewed-on: http://codereview.qt.nokia.com/1882 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com>
This commit is contained in:
parent
227cb8c0b9
commit
f74296ef7c
@ -155,6 +155,7 @@ public:
|
||||
struct FaceId {
|
||||
FaceId() : index(0), encoding(0) {}
|
||||
QByteArray filename;
|
||||
QByteArray uuid;
|
||||
int index;
|
||||
int encoding;
|
||||
};
|
||||
@ -303,7 +304,7 @@ inline bool operator ==(const QFontEngine::FaceId &f1, const QFontEngine::FaceId
|
||||
|
||||
inline uint qHash(const QFontEngine::FaceId &f)
|
||||
{
|
||||
return qHash((f.index << 16) + f.encoding) + qHash(f.filename);
|
||||
return qHash((f.index << 16) + f.encoding) + qHash(f.filename + f.uuid);
|
||||
}
|
||||
|
||||
|
||||
|
@ -45,6 +45,7 @@
|
||||
|
||||
#include "qrawfont_p.h"
|
||||
#include "qfontengine_ft_p.h"
|
||||
#include "quuid.h"
|
||||
|
||||
#if defined(Q_WS_X11) && !defined(QT_NO_FONTCONFIG)
|
||||
# include "qfontengine_x11_p.h"
|
||||
@ -87,6 +88,7 @@ public:
|
||||
FaceId faceId;
|
||||
faceId.filename = "";
|
||||
faceId.index = 0;
|
||||
faceId.uuid = QUuid::createUuid().toString().toAscii();
|
||||
|
||||
return init(faceId, true, Format_None, fontData);
|
||||
}
|
||||
|
@ -47,7 +47,6 @@
|
||||
class tst_QRawFont: public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
#if !defined(QT_NO_RAWFONT)
|
||||
private slots:
|
||||
void invalidRawFont();
|
||||
@ -94,6 +93,11 @@ private slots:
|
||||
|
||||
void rawFontSetPixelSize_data();
|
||||
void rawFontSetPixelSize();
|
||||
|
||||
#if defined(Q_WS_X11) || defined(Q_WS_MAC) && defined(QT_MAC_USE_COCOA)
|
||||
void multipleRawFontsFromData();
|
||||
#endif
|
||||
|
||||
#endif // QT_NO_RAWFONT
|
||||
};
|
||||
|
||||
@ -843,6 +847,25 @@ void tst_QRawFont::rawFontSetPixelSize()
|
||||
QCOMPARE(rawFont.pixelSize(), 24.0);
|
||||
}
|
||||
|
||||
#if defined(Q_WS_X11) || defined(Q_WS_MAC) && defined(QT_MAC_USE_COCOA)
|
||||
void tst_QRawFont::multipleRawFontsFromData()
|
||||
{
|
||||
QFile file(QString::fromLatin1(SRCDIR "testfont.ttf"));
|
||||
QRawFont testFont;
|
||||
if (file.open(QIODevice::ReadOnly)) {
|
||||
testFont.loadFromData(file.readAll(), 11, QFont::PreferDefaultHinting);
|
||||
file.close();
|
||||
}
|
||||
file.setFileName(QLatin1String(SRCDIR "testfont_bold_italic.ttf"));
|
||||
QRawFont testFontBoldItalic;
|
||||
if (file.open(QIODevice::ReadOnly))
|
||||
testFontBoldItalic.loadFromData(file.readAll(), 11, QFont::PreferDefaultHinting);
|
||||
|
||||
QVERIFY(testFont.familyName() != (testFontBoldItalic.familyName())
|
||||
|| testFont.styleName() != (testFontBoldItalic.styleName()));
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // QT_NO_RAWFONT
|
||||
|
||||
QTEST_MAIN(tst_QRawFont)
|
||||
|
Loading…
x
Reference in New Issue
Block a user