summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/painting/qcolor.cpp10
-rw-r--r--tests/auto/gui/painting/qcolor/tst_qcolor.cpp20
2 files changed, 30 insertions, 0 deletions
diff --git a/src/gui/painting/qcolor.cpp b/src/gui/painting/qcolor.cpp
index 72471c60d4..f8a455e28b 100644
--- a/src/gui/painting/qcolor.cpp
+++ b/src/gui/painting/qcolor.cpp
@@ -2883,6 +2883,8 @@ QColor &QColor::operator=(Qt::GlobalColor color) noexcept
Returns \c true if this color has the same color specification and component values as \a color;
otherwise returns \c false.
+ ExtendedRgb and Rgb specifications are considered matching in this context.
+
\sa spec()
*/
bool QColor::operator==(const QColor &color) const noexcept
@@ -2896,6 +2898,12 @@ bool QColor::operator==(const QColor &color) const noexcept
|| ct.ahsl.lightness == USHRT_MAX
|| color.ct.ahsl.lightness == USHRT_MAX)
&& (qAbs(ct.ahsl.lightness - color.ct.ahsl.lightness)) < 50);
+ } else if ((cspec == ExtendedRgb || color.cspec == ExtendedRgb) &&
+ (cspec == color.cspec || cspec == Rgb || color.cspec == Rgb)) {
+ return qFuzzyCompare(alphaF(), color.alphaF())
+ && qFuzzyCompare(redF(), color.redF())
+ && qFuzzyCompare(greenF(), color.greenF())
+ && qFuzzyCompare(blueF(), color.blueF());
} else {
return (cspec == color.cspec
&& ct.argb.alpha == color.ct.argb.alpha
@@ -2912,6 +2920,8 @@ bool QColor::operator==(const QColor &color) const noexcept
Returns \c true if this color has different color specification or component values from
\a color; otherwise returns \c false.
+ ExtendedRgb and Rgb specifications are considered matching in this context.
+
\sa spec()
*/
bool QColor::operator!=(const QColor &color) const noexcept
diff --git a/tests/auto/gui/painting/qcolor/tst_qcolor.cpp b/tests/auto/gui/painting/qcolor/tst_qcolor.cpp
index f8502c1e2f..5bbf60ea79 100644
--- a/tests/auto/gui/painting/qcolor/tst_qcolor.cpp
+++ b/tests/auto/gui/painting/qcolor/tst_qcolor.cpp
@@ -106,6 +106,8 @@ private slots:
void achromaticHslHue();
+ void equality();
+
void premultiply();
void unpremultiply_sse4();
void qrgba64();
@@ -1682,6 +1684,24 @@ void tst_QColor::achromaticHslHue()
QCOMPARE(hsl.hslHue(), -1);
}
+void tst_QColor::equality()
+{
+ QColor red = Qt::red;
+ QColor black = Qt::black;
+
+ QCOMPARE(red, red);
+ QCOMPARE(black, black);
+ QVERIFY(red != black);
+
+ // Encodings must match
+ QVERIFY(red != red.toHsv());
+ QVERIFY(black.toHsl() != black);
+
+ // Except for ExtendedRgb and Rgb, as it can be an automatic upgrade.
+ QCOMPARE(red, red.toExtendedRgb());
+ QCOMPARE(black.toExtendedRgb(), black);
+}
+
void tst_QColor::premultiply()
{
// Tests that qPremultiply(qUnpremultiply(x)) returns x.