From 967536c12d8a8684899117aafd63faf8d831b656 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 27 Feb 2018 09:12:14 +0100 Subject: Fix warning when encountering font-size="none" Extend existing enum by "none" and extract a function to return the specification so that "none" can be cleanly handled. Task-number: QTBUG-66646 Change-Id: If4ec1056c6f0fa407f76b747634bb898e75a5474 Reviewed-by: Eirik Aavitsland --- src/svg/qsvghandler.cpp | 78 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 51 insertions(+), 27 deletions(-) diff --git a/src/svg/qsvghandler.cpp b/src/svg/qsvghandler.cpp index 6c0e742..0862b05 100644 --- a/src/svg/qsvghandler.cpp +++ b/src/svg/qsvghandler.cpp @@ -1288,6 +1288,49 @@ static void parsePen(QSvgNode *node, } } +enum FontSizeSpec { XXSmall, XSmall, Small, Medium, Large, XLarge, XXLarge, + FontSizeNone, FontSizeValue }; + +static const qreal sizeTable[] = +{ qreal(6.9), qreal(8.3), qreal(10.0), qreal(12.0), qreal(14.4), qreal(17.3), qreal(20.7) }; + +Q_STATIC_ASSERT(sizeof(sizeTable)/sizeof(sizeTable[0]) == FontSizeNone); + +static FontSizeSpec fontSizeSpec(const QStringRef &spec) +{ + switch (spec.at(0).unicode()) { + case 'x': + if (spec == QLatin1String("xx-small")) + return XXSmall; + if (spec == QLatin1String("x-small")) + return XSmall; + if (spec == QLatin1String("x-large")) + return XLarge; + if (spec == QLatin1String("xx-large")) + return XXLarge; + break; + case 's': + if (spec == QLatin1String("small")) + return Small; + break; + case 'm': + if (spec == QLatin1String("medium")) + return Medium; + break; + case 'l': + if (spec == QLatin1String("large")) + return Large; + break; + case 'n': + if (spec == QLatin1String("none")) + return FontSizeNone; + break; + default: + break; + } + return FontSizeValue; +} + static void parseFont(QSvgNode *node, const QSvgAttributes &attributes, QSvgHandler *handler) @@ -1311,38 +1354,19 @@ static void parseFont(QSvgNode *node, if (!attributes.fontSize.isEmpty() && attributes.fontSize != QT_INHERIT) { // TODO: Support relative sizes 'larger' and 'smaller'. - QSvgHandler::LengthType dummy; // should always be pixel size - qreal size = 0; - static const qreal sizeTable[] = { qreal(6.9), qreal(8.3), qreal(10.0), qreal(12.0), qreal(14.4), qreal(17.3), qreal(20.7) }; - enum AbsFontSize { XXSmall, XSmall, Small, Medium, Large, XLarge, XXLarge }; - switch (attributes.fontSize.at(0).unicode()) { - case 'x': - if (attributes.fontSize == QLatin1String("xx-small")) - size = sizeTable[XXSmall]; - else if (attributes.fontSize == QLatin1String("x-small")) - size = sizeTable[XSmall]; - else if (attributes.fontSize == QLatin1String("x-large")) - size = sizeTable[XLarge]; - else if (attributes.fontSize == QLatin1String("xx-large")) - size = sizeTable[XXLarge]; + const FontSizeSpec spec = fontSizeSpec(attributes.fontSize); + switch (spec) { + case FontSizeNone: break; - case 's': - if (attributes.fontSize == QLatin1String("small")) - size = sizeTable[Small]; - break; - case 'm': - if (attributes.fontSize == QLatin1String("medium")) - size = sizeTable[Medium]; - break; - case 'l': - if (attributes.fontSize == QLatin1String("large")) - size = sizeTable[Large]; + case FontSizeValue: { + QSvgHandler::LengthType dummy; // should always be pixel size + fontStyle->setSize(parseLength(attributes.fontSize.toString(), dummy, handler)); + } break; default: - size = parseLength(attributes.fontSize.toString(), dummy, handler); + fontStyle->setSize(sizeTable[spec]); break; } - fontStyle->setSize(size); } if (!attributes.fontStyle.isEmpty() && attributes.fontStyle != QT_INHERIT) { -- cgit v1.2.1