diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/io/qdatastream.h | 2 | ||||
-rw-r--r-- | src/gui/text/qfont.cpp | 35 | ||||
-rw-r--r-- | src/gui/text/qfont_p.h | 2 |
3 files changed, 32 insertions, 7 deletions
diff --git a/src/corelib/io/qdatastream.h b/src/corelib/io/qdatastream.h index fb8dce0641b..3bf90b39a31 100644 --- a/src/corelib/io/qdatastream.h +++ b/src/corelib/io/qdatastream.h @@ -89,7 +89,7 @@ public: Qt_5_1 = 14, Qt_5_2 = 15, Qt_5_3 = Qt_5_2, - Qt_5_4 = Qt_5_3 + Qt_5_4 = 16 #if QT_VERSION >= 0x050500 #error Add the datastream version for this Qt version #endif diff --git a/src/gui/text/qfont.cpp b/src/gui/text/qfont.cpp index 2e21a81187c..0fffa608a4a 100644 --- a/src/gui/text/qfont.cpp +++ b/src/gui/text/qfont.cpp @@ -2163,6 +2163,8 @@ QDataStream &operator<<(QDataStream &s, const QFont &font) s << font.d->request.family.toLatin1(); } else { s << font.d->request.family; + if (s.version() >= QDataStream::Qt_5_4) + s << font.d->request.styleName; } if (s.version() >= QDataStream::Qt_4_0) { @@ -2183,8 +2185,14 @@ QDataStream &operator<<(QDataStream &s, const QFont &font) } s << (quint8) font.d->request.styleHint; - if (s.version() >= QDataStream::Qt_3_1) - s << (quint8) font.d->request.styleStrategy; + if (s.version() >= QDataStream::Qt_3_1) { + // Continue writing 8 bits for versions < 5.4 so that we don't write too much, + // even though we need 16 to store styleStrategy, so there is some data loss. + if (s.version() >= QDataStream::Qt_5_4) + s << (quint16) font.d->request.styleStrategy; + else + s << (quint8) font.d->request.styleStrategy; + } s << (quint8) 0 << (quint8) font.d->request.weight << get_font_bits(s.version(), font.d.data()); @@ -2196,6 +2204,8 @@ QDataStream &operator<<(QDataStream &s, const QFont &font) s << font.d->letterSpacing.value(); s << font.d->wordSpacing.value(); } + if (s.version() >= QDataStream::Qt_5_4) + s << (quint8)font.d->request.hintingPreference; return s; } @@ -2213,7 +2223,8 @@ QDataStream &operator>>(QDataStream &s, QFont &font) font.d = new QFontPrivate; font.resolve_mask = QFont::AllPropertiesResolved; - quint8 styleHint, styleStrategy = QFont::PreferDefault, charSet, weight, bits; + quint8 styleHint, charSet, weight, bits; + quint16 styleStrategy = QFont::PreferDefault; if (s.version() == 1) { QByteArray fam; @@ -2221,6 +2232,8 @@ QDataStream &operator>>(QDataStream &s, QFont &font) font.d->request.family = QString::fromLatin1(fam); } else { s >> font.d->request.family; + if (s.version() >= QDataStream::Qt_5_4) + s >> font.d->request.styleName; } if (s.version() >= QDataStream::Qt_4_0) { @@ -2240,8 +2253,15 @@ QDataStream &operator>>(QDataStream &s, QFont &font) font.d->request.pixelSize = pixelSize; } s >> styleHint; - if (s.version() >= QDataStream::Qt_3_1) - s >> styleStrategy; + if (s.version() >= QDataStream::Qt_3_1) { + if (s.version() >= QDataStream::Qt_5_4) { + s >> styleStrategy; + } else { + quint8 tempStyleStrategy; + s >> tempStyleStrategy; + styleStrategy = tempStyleStrategy; + } + } s >> charSet; s >> weight; @@ -2271,6 +2291,11 @@ QDataStream &operator>>(QDataStream &s, QFont &font) s >> value; font.d->wordSpacing.setValue(value); } + if (s.version() >= QDataStream::Qt_5_4) { + quint8 value; + s >> value; + font.d->request.hintingPreference = QFont::HintingPreference(value); + } return s; } diff --git a/src/gui/text/qfont_p.h b/src/gui/text/qfont_p.h index b78d6692b43..da24c6cb675 100644 --- a/src/gui/text/qfont_p.h +++ b/src/gui/text/qfont_p.h @@ -92,7 +92,7 @@ struct QFontDef uint weight : 7; // 0-99 uint fixedPitch : 1; uint style : 2; - uint stretch : 12; // 0-400 + uint stretch : 12; // 0-4000 uint hintingPreference : 2; uint ignorePitch : 1; |