summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2016-11-25 18:29:49 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2016-11-29 15:44:52 +0000
commit94b83ae14201e9c28b9f4817ee020814300860aa (patch)
tree4f31372435b2f12725b0d08a354e81f56ade69c9
parent1155ca10f8e329d253f7dd58dad396321116798c (diff)
Fix bilinear sampling of more than 8x rotated transforms
The check for 8x zoom was inverted and checked for 1/8x zoom. Change-Id: I45156db709bab6b702769c2a70d4d2af51b5533a Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io> Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
-rw-r--r--src/gui/painting/qdrawhelper.cpp4
-rw-r--r--tests/auto/other/lancelot/scripts/pixmap_rotation.qps5
-rw-r--r--tests/auto/other/lancelot/scripts/pixmap_rotation2.qps8
3 files changed, 13 insertions, 4 deletions
diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp
index 656b04fdf3..724af095ad 100644
--- a/src/gui/painting/qdrawhelper.cpp
+++ b/src/gui/painting/qdrawhelper.cpp
@@ -2231,7 +2231,7 @@ static const uint * QT_FASTCALL fetchTransformedBilinearARGB32PM(uint *buffer, c
}
}
} else { //rotation
- if (std::abs(data->m11) > 8 || std::abs(data->m22) > 8) {
+ if (std::abs(data->m11) < (1./8.) || std::abs(data->m22) < (1./8.)) {
//if we are zooming more than 8 times, we use 8bit precision for the position.
while (b < end) {
int x1 = (fx >> 16);
@@ -2717,7 +2717,7 @@ static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Oper
layout->convertToARGB32PM(buf1, buf1, len * 2, clut, 0);
layout->convertToARGB32PM(buf2, buf2, len * 2, clut, 0);
- if (std::abs(data->m11) > 8 || std::abs(data->m22) > 8) {
+ if (std::abs(data->m11) < (1./8.) || std::abs(data->m22) < (1./8.)) {
//if we are zooming more than 8 times, we use 8bit precision for the position.
for (int i = 0; i < len; ++i) {
int distx = (fracX & 0x0000ffff) >> 8;
diff --git a/tests/auto/other/lancelot/scripts/pixmap_rotation.qps b/tests/auto/other/lancelot/scripts/pixmap_rotation.qps
index 2f1ffb53e6..8427af85af 100644
--- a/tests/auto/other/lancelot/scripts/pixmap_rotation.qps
+++ b/tests/auto/other/lancelot/scripts/pixmap_rotation.qps
@@ -22,9 +22,10 @@ end_block
resetMatrix
translate 340 120
+setRenderHint SmoothPixmapTransformation
repeat_block drawing
resetMatrix
-drawText 50 240 "Normal X form"
-drawText 270 240 "Smooth xform" \ No newline at end of file
+drawText 50 240 "Normal Xform"
+drawText 270 240 "Smooth Xform"
diff --git a/tests/auto/other/lancelot/scripts/pixmap_rotation2.qps b/tests/auto/other/lancelot/scripts/pixmap_rotation2.qps
new file mode 100644
index 0000000000..dfb93fe09c
--- /dev/null
+++ b/tests/auto/other/lancelot/scripts/pixmap_rotation2.qps
@@ -0,0 +1,8 @@
+# Version: 1
+# CheckVsReference: 1%
+
+setRenderHint SmoothPixmapTransformation
+translate 400 -120
+rotate 45
+scale 400 400
+drawImage solid2x2.png 0 0