From 37c68503cbada547291ec4c4873dc054a8b82510 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Tue, 11 Aug 2020 01:18:05 +0200 Subject: QFont: Extend the string description to include the missing elements This extends to/fromString to include style strategy, capitalization, letter and word spacing and stretch. QFont::fromString() keeps compatibility with strings from earlier versions as well. Fixes: QTBUG-67687 Change-Id: I5e95a58f1cd850214af2a7d8906a214facd4e661 Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/gui/text/qfont.cpp | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'src/gui/text') diff --git a/src/gui/text/qfont.cpp b/src/gui/text/qfont.cpp index b5eab1cdb5..b4e33b4270 100644 --- a/src/gui/text/qfont.cpp +++ b/src/gui/text/qfont.cpp @@ -1988,7 +1988,13 @@ QString QFont::toString() const QString::number((int) underline()) + comma + QString::number((int) strikeOut()) + comma + QString::number((int)fixedPitch()) + comma + - QString::number((int) false); + QString::number((int) false) + comma + + QString::number((int)capitalization()) + comma + + QString::number((int)letterSpacingType()) + comma + + QString::number(letterSpacing()) + comma + + QString::number(wordSpacing()) + comma + + QString::number(stretch()) + comma + + QString::number((int)styleStrategy()); QString fontStyle = styleName(); if (!fontStyle.isEmpty()) @@ -2022,7 +2028,7 @@ bool QFont::fromString(const QString &descrip) const auto sr = QStringView(descrip).trimmed(); const auto l = sr.split(QLatin1Char(',')); const int count = l.count(); - if (!count || (count > 2 && count < 9) || count > 11 || + if (!count || (count > 2 && count < 9) || count == 9 || count > 17 || l.first().isEmpty()) { qWarning("QFont::fromString: Invalid description '%s'", descrip.isEmpty() ? "(empty)" : descrip.toLatin1().data()); @@ -2048,8 +2054,15 @@ bool QFont::fromString(const QString &descrip) setUnderline(l[6].toInt()); setStrikeOut(l[7].toInt()); setFixedPitch(l[8].toInt()); - if (count == 11) - d->request.styleName = l[10].toString(); + if (count >= 16) { + setCapitalization((Capitalization)l[10].toInt()); + setLetterSpacing((SpacingType)l[11].toInt(), l[12].toDouble()); + setWordSpacing(l[13].toDouble()); + setStretch(l[14].toInt()); + setStyleStrategy((StyleStrategy)l[15].toInt()); + } + if (count == 11 || count == 17) + d->request.styleName = l[count - 1].toString(); else d->request.styleName.clear(); } -- cgit v1.2.3