diff options
author | Eirik Aavitsland <eirik.aavitsland@qt.io> | 2017-08-18 10:19:48 +0200 |
---|---|---|
committer | Eirik Aavitsland <eirik.aavitsland@qt.io> | 2017-08-18 11:37:19 +0000 |
commit | 73573fce295caef35da706a8c8c796ec18e6baf1 (patch) | |
tree | 9a0c60ce7faf656adc7f68d84727a77d5fe00b86 | |
parent | 5f7287cfb690d9692d319bd617a5bdd6a2f2f26e (diff) |
Fix huge painting artefact of certain dashed lines
The artefacts appeared for square-capped dashed pens when the end of
the line fell a tiny fraction into the start of a new dash. At that
point in the dashing algorithm, accumulated precision errors in the
'length' variable could make it slightly differ from the actual length
between the start and end points of the line fragment. Although both
values would be "almost zero", the rasterizeLine() function's square
capping would make the error very visible; see the bug report.
Fix by calculating the precise length of the last line fragment.
Task-number: QTBUG-56969
Change-Id: I7b69c0d465649be61fb87ac7b8348f0c299486ee
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
-rw-r--r-- | src/gui/painting/qpaintengine_raster.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index f99a247270..ef58f96fbc 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -3207,7 +3207,7 @@ void QRasterPaintEnginePrivate::rasterizeLine_dashed(QLineF line, QLineF l = line; if (dash >= length) { - dash = length; + dash = line.length(); // Avoid accumulated precision error in 'length' *dashOffset += dash / width; length = 0; } else { |