From ac9eb4f86de4aaf41246977dff81c0c4b61b4d1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ole-Andr=C3=A9=20Rodlie?= Date: Wed, 27 Nov 2024 00:03:42 +0100 Subject: [PATCH 1/2] SVG Import: fix colors RGB(A) are int (0-255) unless %. --- src/core/svgimporter.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/core/svgimporter.cpp b/src/core/svgimporter.cpp index db1c4edc9..cc395b316 100644 --- a/src/core/svgimporter.cpp +++ b/src/core/svgimporter.cpp @@ -245,15 +245,19 @@ bool toColor(const QString &colorStr, QColor &color) str.remove(isRGB ? "rgb" : "rgba").remove(";").remove("(").remove(")"); QStringList components = str.split(",", Qt::SkipEmptyParts); if (components.size() >= 3) { + const bool isFloat = components[0].contains("%") || + components[1].contains("%") || + components[2].contains("%"); qreal r = components[0].contains("%") ? components[0].remove("%").simplified().toFloat() / 100. : - components[0].simplified().toFloat(); + components[0].simplified().toInt(); qreal g = components[1].contains("%") ? components[1].remove("%").simplified().toFloat() / 100. : - components[1].simplified().toFloat(); + components[1].simplified().toInt(); qreal b = components[2].contains("%") ? components[2].remove("%").simplified().toFloat() / 100. : - components[2].simplified().toFloat(); + components[2].simplified().toInt(); qreal a = components.size() == 4 ? components[3].contains("%") ? components[3].remove("%").simplified().toFloat() / 100. : - components[3].simplified().toFloat() : 1.0; - color.setRgbF(r, g, b, a); + components[3].simplified().toInt() : (isFloat ? 1.0 : 255); + if (isFloat) { color.setRgbF(r, g, b, a); } + else { color.setRgb(r, g, b, a); } } else { return false; } } else { if (QColor::isValidColor(colorStr.simplified())) { color = QColor(colorStr.simplified()); } From c6481a355f97375565038af4b76ab58b5129d600 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ole-Andr=C3=A9=20Rodlie?= Date: Wed, 27 Nov 2024 00:30:38 +0100 Subject: [PATCH 2/2] SVG Import: fix color alpha --- src/core/svgimporter.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/core/svgimporter.cpp b/src/core/svgimporter.cpp index cc395b316..15fc59c4a 100644 --- a/src/core/svgimporter.cpp +++ b/src/core/svgimporter.cpp @@ -248,16 +248,19 @@ bool toColor(const QString &colorStr, QColor &color) const bool isFloat = components[0].contains("%") || components[1].contains("%") || components[2].contains("%"); + const bool hasAlpha = components.size() == 4; + qreal r = components[0].contains("%") ? components[0].remove("%").simplified().toFloat() / 100. : components[0].simplified().toInt(); qreal g = components[1].contains("%") ? components[1].remove("%").simplified().toFloat() / 100. : components[1].simplified().toInt(); qreal b = components[2].contains("%") ? components[2].remove("%").simplified().toFloat() / 100. : components[2].simplified().toInt(); - qreal a = components.size() == 4 ? components[3].contains("%") ? components[3].remove("%").simplified().toFloat() / 100. : - components[3].simplified().toInt() : (isFloat ? 1.0 : 255); - if (isFloat) { color.setRgbF(r, g, b, a); } - else { color.setRgb(r, g, b, a); } + qreal a = hasAlpha ? components[3].contains("%") ? components[3].remove("%").simplified().toFloat() / 100. : + components[3].simplified().toFloat() : 1.0; + if (isFloat) { color.setRgbF(r, g, b); } + else { color.setRgb(r, g, b); } + if (hasAlpha) { color.setAlphaF(a); } } else { return false; } } else { if (QColor::isValidColor(colorStr.simplified())) { color = QColor(colorStr.simplified()); }