summaryrefslogtreecommitdiffstats
path: root/src/gui/painting/qcolor.cpp
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-05-13 08:53:37 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-05-27 12:41:52 +0000
commitdfc5a1035607d433acdb64b0798bc6d8d9cad729 (patch)
tree6bd572d2ff76e6e572bea3bf8a479f06ece6f7cb /src/gui/painting/qcolor.cpp
parentee92ee7a3cf7ef6017a2950a590005abfd37cf1a (diff)
Do a proper convert from [0-65535] to [0-255] on QColor integer reads
We need to divide by 257 and round to undo our setter. Pick-to: 5.15 Fixes: QTBUG-84168 Change-Id: I55d2a8d1d05125d9560309cd77459cc94a92030f Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
Diffstat (limited to 'src/gui/painting/qcolor.cpp')
-rw-r--r--src/gui/painting/qcolor.cpp59
1 files changed, 30 insertions, 29 deletions
diff --git a/src/gui/painting/qcolor.cpp b/src/gui/painting/qcolor.cpp
index c3ecaf0901..72471c60d4 100644
--- a/src/gui/painting/qcolor.cpp
+++ b/src/gui/painting/qcolor.cpp
@@ -39,6 +39,7 @@
#include "qcolor.h"
#include "qcolor_p.h"
+#include "qdrawhelper_p.h"
#include "qfloat16.h"
#include "qnamespace.h"
#include "qdatastream.h"
@@ -1052,11 +1053,11 @@ void QColor::getHsv(int *h, int *s, int *v, int *a) const
}
*h = ct.ahsv.hue == USHRT_MAX ? -1 : ct.ahsv.hue / 100;
- *s = ct.ahsv.saturation >> 8;
- *v = ct.ahsv.value >> 8;
+ *s = qt_div_257(ct.ahsv.saturation);
+ *v = qt_div_257(ct.ahsv.value);
if (a)
- *a = ct.ahsv.alpha >> 8;
+ *a = qt_div_257(ct.ahsv.alpha);
}
/*!
@@ -1164,11 +1165,11 @@ void QColor::getHsl(int *h, int *s, int *l, int *a) const
}
*h = ct.ahsl.hue == USHRT_MAX ? -1 : ct.ahsl.hue / 100;
- *s = ct.ahsl.saturation >> 8;
- *l = ct.ahsl.lightness >> 8;
+ *s = qt_div_257(ct.ahsl.saturation);
+ *l = qt_div_257(ct.ahsl.lightness);
if (a)
- *a = ct.ahsl.alpha >> 8;
+ *a = qt_div_257(ct.ahsl.alpha);
}
/*!
@@ -1296,12 +1297,12 @@ void QColor::getRgb(int *r, int *g, int *b, int *a) const
return;
}
- *r = ct.argb.red >> 8;
- *g = ct.argb.green >> 8;
- *b = ct.argb.blue >> 8;
+ *r = qt_div_257(ct.argb.red);
+ *g = qt_div_257(ct.argb.green);
+ *b = qt_div_257(ct.argb.blue);
if (a)
- *a = ct.argb.alpha >> 8;
+ *a = qt_div_257(ct.argb.alpha);
}
/*!
@@ -1379,7 +1380,7 @@ QRgb QColor::rgba() const noexcept
{
if (cspec != Invalid && cspec != Rgb)
return toRgb().rgba();
- return qRgba(ct.argb.red >> 8, ct.argb.green >> 8, ct.argb.blue >> 8, ct.argb.alpha >> 8);
+ return qRgba(qt_div_257(ct.argb.red), qt_div_257(ct.argb.green), qt_div_257(ct.argb.blue), qt_div_257(ct.argb.alpha));
}
/*!
@@ -1442,7 +1443,7 @@ QRgb QColor::rgb() const noexcept
{
if (cspec != Invalid && cspec != Rgb)
return toRgb().rgb();
- return qRgb(ct.argb.red >> 8, ct.argb.green >> 8, ct.argb.blue >> 8);
+ return qRgb(qt_div_257(ct.argb.red), qt_div_257(ct.argb.green), qt_div_257(ct.argb.blue));
}
/*!
@@ -1469,7 +1470,7 @@ int QColor::alpha() const noexcept
{
if (cspec == ExtendedRgb)
return qRound(qreal(castF16(ct.argbExtended.alphaF16)) * 255);
- return ct.argb.alpha >> 8;
+ return qt_div_257(ct.argb.alpha);
}
@@ -1531,7 +1532,7 @@ int QColor::red() const noexcept
{
if (cspec != Invalid && cspec != Rgb)
return toRgb().red();
- return ct.argb.red >> 8;
+ return qt_div_257(ct.argb.red);
}
/*!
@@ -1558,7 +1559,7 @@ int QColor::green() const noexcept
{
if (cspec != Invalid && cspec != Rgb)
return toRgb().green();
- return ct.argb.green >> 8;
+ return qt_div_257(ct.argb.green);
}
/*!
@@ -1586,7 +1587,7 @@ int QColor::blue() const noexcept
{
if (cspec != Invalid && cspec != Rgb)
return toRgb().blue();
- return ct.argb.blue >> 8;
+ return qt_div_257(ct.argb.blue);
}
@@ -1747,7 +1748,7 @@ int QColor::hsvSaturation() const noexcept
{
if (cspec != Invalid && cspec != Hsv)
return toHsv().saturation();
- return ct.ahsv.saturation >> 8;
+ return qt_div_257(ct.ahsv.saturation);
}
/*!
@@ -1759,7 +1760,7 @@ int QColor::value() const noexcept
{
if (cspec != Invalid && cspec != Hsv)
return toHsv().value();
- return ct.ahsv.value >> 8;
+ return qt_div_257(ct.ahsv.value);
}
/*!
@@ -1849,7 +1850,7 @@ int QColor::hslSaturation() const noexcept
{
if (cspec != Invalid && cspec != Hsl)
return toHsl().hslSaturation();
- return ct.ahsl.saturation >> 8;
+ return qt_div_257(ct.ahsl.saturation);
}
/*!
@@ -1863,7 +1864,7 @@ int QColor::lightness() const noexcept
{
if (cspec != Invalid && cspec != Hsl)
return toHsl().lightness();
- return ct.ahsl.lightness >> 8;
+ return qt_div_257(ct.ahsl.lightness);
}
/*!
@@ -1917,7 +1918,7 @@ int QColor::cyan() const noexcept
{
if (cspec != Invalid && cspec != Cmyk)
return toCmyk().cyan();
- return ct.acmyk.cyan >> 8;
+ return qt_div_257(ct.acmyk.cyan);
}
/*!
@@ -1929,7 +1930,7 @@ int QColor::magenta() const noexcept
{
if (cspec != Invalid && cspec != Cmyk)
return toCmyk().magenta();
- return ct.acmyk.magenta >> 8;
+ return qt_div_257(ct.acmyk.magenta);
}
/*!
@@ -1941,7 +1942,7 @@ int QColor::yellow() const noexcept
{
if (cspec != Invalid && cspec != Cmyk)
return toCmyk().yellow();
- return ct.acmyk.yellow >> 8;
+ return qt_div_257(ct.acmyk.yellow);
}
/*!
@@ -1954,7 +1955,7 @@ int QColor::black() const noexcept
{
if (cspec != Invalid && cspec != Cmyk)
return toCmyk().black();
- return ct.acmyk.black >> 8;
+ return qt_div_257(ct.acmyk.black);
}
/*!
@@ -2635,13 +2636,13 @@ void QColor::getCmyk(int *c, int *m, int *y, int *k, int *a) const
return;
}
- *c = ct.acmyk.cyan >> 8;
- *m = ct.acmyk.magenta >> 8;
- *y = ct.acmyk.yellow >> 8;
- *k = ct.acmyk.black >> 8;
+ *c = qt_div_257(ct.acmyk.cyan);
+ *m = qt_div_257(ct.acmyk.magenta);
+ *y = qt_div_257(ct.acmyk.yellow);
+ *k = qt_div_257(ct.acmyk.black);
if (a)
- *a = ct.acmyk.alpha >> 8;
+ *a = qt_div_257(ct.acmyk.alpha);
}
/*!