summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEirik Aavitsland <eirik.aavitsland@qt.io>2019-04-10 12:35:39 +0200
committerEirik Aavitsland <eirik.aavitsland@qt.io>2019-04-25 06:07:00 +0000
commitd6c3fa6e0cdb55b9676f1a3f1365d835a039a6e2 (patch)
tree600a76cb9676894967b840da6f367a51eace7c6b
parent8f8267f00bfa0d1716e38358ecc0fafff1d9df14 (diff)
Fix aliased painting with non-uniform scaling
The full stroker does not produce good results for aliased lines thinner than 1 pixel. Avoid it by making sure that such thin lines are painted by the cosmetic stroker, even when they have non-uniform transformation. Fixes: QTBUG-73866 Change-Id: I7b5f0fa555903246e0c3fd92cd435cc8c0b15a24 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
-rw-r--r--src/gui/painting/qpaintengine_raster.cpp2
-rw-r--r--tests/auto/other/lancelot/scripts/thinlines.qps79
2 files changed, 80 insertions, 1 deletions
diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp
index 90b6d16551..ab22a71134 100644
--- a/src/gui/painting/qpaintengine_raster.cpp
+++ b/src/gui/painting/qpaintengine_raster.cpp
@@ -796,7 +796,7 @@ void QRasterPaintEngine::updatePen(const QPen &pen)
s->flags.fast_pen = pen_style > Qt::NoPen
&& s->penData.blend
&& ((cosmetic && penWidth <= 1)
- || (!cosmetic && s->flags.tx_noshear && penWidth * s->txscale <= 1));
+ || (!cosmetic && (s->flags.tx_noshear || !s->flags.antialiased) && penWidth * s->txscale <= 1));
s->flags.non_complex_pen = qpen_capStyle(s->lastPen) <= Qt::SquareCap && s->flags.tx_noshear;
diff --git a/tests/auto/other/lancelot/scripts/thinlines.qps b/tests/auto/other/lancelot/scripts/thinlines.qps
new file mode 100644
index 0000000000..dddfff4538
--- /dev/null
+++ b/tests/auto/other/lancelot/scripts/thinlines.qps
@@ -0,0 +1,79 @@
+# Version: 1
+# CheckVsReference: 5%
+
+drawRect 0 0 800 800
+
+path_addRect p 0 0 75 75
+path_addEllipse p 25 25 75 75
+
+translate -500 -500
+
+begin_block drawing
+ save
+ drawLine 0 0 100 100
+
+ translate 0 100
+ drawPath p
+
+ translate 0 110
+ drawRect 0 0 100 100
+
+ translate 0 110
+ drawPolyline [0 0 100 0 50 50]
+
+ drawPoint 40 40
+ drawPoint 41 40
+ drawPoint 42 40
+ drawPoint 43 40
+ drawPoint 44 40
+ drawPoint 45 40
+ drawPoint 46 40
+ drawPoint 47 40
+ drawPoint 48 40
+ drawPoint 49 40
+ drawPoint 50 40
+
+ restore
+end_block
+
+begin_block univsnonuni
+ save
+
+ save
+ scale 0.7 0.7
+ repeat_block drawing
+ restore
+
+ translate 100 0
+ save
+ scale 0.7 0.8
+ repeat_block drawing
+ restore
+
+ restore
+end_block
+
+resetMatrix
+translate 20.5 20.5
+
+begin_block row
+save
+ repeat_block univsnonuni
+
+ translate 240 0
+ save
+ rotate 10
+ repeat_block univsnonuni
+ restore
+
+ translate 220 0
+ save
+ rotate_y 30
+ repeat_block univsnonuni
+ restore
+restore
+end_block
+
+translate 0 320
+setRenderHint AntiAliasing
+repeat_block row