summaryrefslogtreecommitdiffstats
path: root/src/gui/painting/qcolortransform.cpp
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2022-05-31 14:43:07 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2022-05-31 22:23:40 +0200
commit5ea6da55e0d29a0dc526d4fa78a0590e0e4df8f6 (patch)
tree7e42982bb1ee44d57491da1c93878a9135268a04 /src/gui/painting/qcolortransform.cpp
parentfb8a88b05cd3f7663efaa9c5c5cf8143a1f2b66f (diff)
Test prepared qcolortransform
Add test of explicitly prepared qcolortransform, this is a state a transform can get into if used for an image transform. Also cleans up the test code. Change-Id: I9445ed114bed0edc790e14024aaae6a42989220b Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
Diffstat (limited to 'src/gui/painting/qcolortransform.cpp')
-rw-r--r--src/gui/painting/qcolortransform.cpp24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/gui/painting/qcolortransform.cpp b/src/gui/painting/qcolortransform.cpp
index c89909cff4..958d2fd2db 100644
--- a/src/gui/painting/qcolortransform.cpp
+++ b/src/gui/painting/qcolortransform.cpp
@@ -159,9 +159,15 @@ QRgb QColorTransform::map(QRgb argb) const
return argb;
constexpr float f = 1.0f / 255.0f;
QColorVector c = { qRed(argb) * f, qGreen(argb) * f, qBlue(argb) * f };
- c.x = d->colorSpaceIn->trc[0].apply(c.x);
- c.y = d->colorSpaceIn->trc[1].apply(c.y);
- c.z = d->colorSpaceIn->trc[2].apply(c.z);
+ if (d->colorSpaceIn->lut.generated.loadAcquire()) {
+ c.x = d->colorSpaceIn->lut[0]->toLinear(c.x);
+ c.y = d->colorSpaceIn->lut[1]->toLinear(c.y);
+ c.z = d->colorSpaceIn->lut[2]->toLinear(c.z);
+ } else {
+ c.x = d->colorSpaceIn->trc[0].apply(c.x);
+ c.y = d->colorSpaceIn->trc[1].apply(c.y);
+ c.z = d->colorSpaceIn->trc[2].apply(c.z);
+ }
c = d->colorMatrix.map(c);
c.x = std::max(0.0f, std::min(1.0f, c.x));
c.y = std::max(0.0f, std::min(1.0f, c.y));
@@ -190,9 +196,15 @@ QRgba64 QColorTransform::map(QRgba64 rgba64) const
return rgba64;
constexpr float f = 1.0f / 65535.0f;
QColorVector c = { rgba64.red() * f, rgba64.green() * f, rgba64.blue() * f };
- c.x = d->colorSpaceIn->trc[0].apply(c.x);
- c.y = d->colorSpaceIn->trc[1].apply(c.y);
- c.z = d->colorSpaceIn->trc[2].apply(c.z);
+ if (d->colorSpaceIn->lut.generated.loadAcquire()) {
+ c.x = d->colorSpaceIn->lut[0]->toLinear(c.x);
+ c.y = d->colorSpaceIn->lut[1]->toLinear(c.y);
+ c.z = d->colorSpaceIn->lut[2]->toLinear(c.z);
+ } else {
+ c.x = d->colorSpaceIn->trc[0].apply(c.x);
+ c.y = d->colorSpaceIn->trc[1].apply(c.y);
+ c.z = d->colorSpaceIn->trc[2].apply(c.z);
+ }
c = d->colorMatrix.map(c);
c.x = std::max(0.0f, std::min(1.0f, c.x));
c.y = std::max(0.0f, std::min(1.0f, c.y));