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>
bb10
Eirik Aavitsland 2019-04-10 12:35:39 +02:00
parent 8f8267f00b
commit d6c3fa6e0c
2 changed files with 80 additions and 1 deletions

View File

@ -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;

View File

@ -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