diff options
| -rw-r--r-- | doc/global/macros.qdocconf | 8 | ||||
| -rw-r--r-- | src/gui/painting/qcolor.cpp | 30 |
2 files changed, 18 insertions, 20 deletions
diff --git a/doc/global/macros.qdocconf b/doc/global/macros.qdocconf index ae08c76ad93..f414b3fed18 100644 --- a/doc/global/macros.qdocconf +++ b/doc/global/macros.qdocconf @@ -91,11 +91,11 @@ macro.NdkFullVer = "27.2.12479018" macro.NdkCompilerVer = "Clang 17.0.2" macro.JdkVer = "17" macro.AndroidMinApiVer = "28" -macro.AndroidMaxApiVer = "35" +macro.AndroidMaxApiVer = "36" macro.AndroidMinVer = "9" -macro.AndroidMaxVer = "15" -macro.AndroidPlatformVer = "35" -macro.AndroidBuildToolsVer = "35.0.1" +macro.AndroidMaxVer = "16" +macro.AndroidPlatformVer = "36" +macro.AndroidBuildToolsVer = "36.0.0" macro.GradleVer = "8.14.3" macro.AGPVer = "8.10.1" macro.AAOSVer = "10 to 13" diff --git a/src/gui/painting/qcolor.cpp b/src/gui/painting/qcolor.cpp index fe79490f54b..d63da38b747 100644 --- a/src/gui/painting/qcolor.cpp +++ b/src/gui/painting/qcolor.cpp @@ -2196,29 +2196,27 @@ QColor QColor::toHsv() const noexcept color.ct.ahsv.alpha = ct.argb.alpha; color.ct.ahsv.pad = 0; - const float r = ct.argb.red / float(USHRT_MAX); - const float g = ct.argb.green / float(USHRT_MAX); - const float b = ct.argb.blue / float(USHRT_MAX); - const float max = Q_MAX_3(r, g, b); - const float min = Q_MIN_3(r, g, b); - const float delta = max - min; - color.ct.ahsv.value = qRound(max * USHRT_MAX); - if (qFuzzyIsNull(delta)) { + const ushort r = ct.argb.red; + const ushort g = ct.argb.green; + const ushort b = ct.argb.blue; + const auto [min, max] = std::minmax({r, g, b}); + color.ct.ahsv.value = max; + if (max == min) { // achromatic case, hue is undefined color.ct.ahsv.hue = USHRT_MAX; color.ct.ahsv.saturation = 0; } else { // chromatic case - float hue = 0; + const float delta = max - min; // cannot overflow + float hue; color.ct.ahsv.saturation = qRound((delta / max) * USHRT_MAX); - if (qFuzzyCompare(r, max)) { - hue = ((g - b) /delta); - } else if (qFuzzyCompare(g, max)) { - hue = (2.0f + (b - r) / delta); - } else if (qFuzzyCompare(b, max)) { - hue = (4.0f + (r - g) / delta); + if (max == r) { + hue = 0 + (g - b) / delta; + } else if (max == g) { + hue = 2 + (b - r) / delta; } else { - Q_ASSERT_X(false, "QColor::toHsv", "internal error"); + Q_ASSERT(max == b); // max({r,g,b}) must be one of r, g, and b! + hue = 4 + (r - g) / delta; } hue *= 60.0f; if (hue < 0.0f) |
