From 6727bbe3dfeadf97af3a9c771553a4c7e3007d4b Mon Sep 17 00:00:00 2001 From: Dariusz Komosinski Date: Tue, 5 Mar 2019 18:26:53 +0100 Subject: [PATCH] Fix Skia rendering hairline width strokes when Pen thickness is 0. --- src/Skia/Avalonia.Skia/DrawingContextImpl.cs | 8 ++++++- .../Shapes/RectangleTests.cs | 20 ++++++++++++++++++ .../Rectangle_0px_Stroke.expected.png | Bin 0 -> 610 bytes .../Rectangle_0px_Stroke.expected.png | Bin 0 -> 610 bytes 4 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 tests/TestFiles/Direct2D1/Shapes/Rectangle/Rectangle_0px_Stroke.expected.png create mode 100644 tests/TestFiles/Skia/Shapes/Rectangle/Rectangle_0px_Stroke.expected.png diff --git a/src/Skia/Avalonia.Skia/DrawingContextImpl.cs b/src/Skia/Avalonia.Skia/DrawingContextImpl.cs index 353354da5e..10e746cbd5 100644 --- a/src/Skia/Avalonia.Skia/DrawingContextImpl.cs +++ b/src/Skia/Avalonia.Skia/DrawingContextImpl.cs @@ -501,7 +501,6 @@ namespace Avalonia.Skia { var paint = new SKPaint { - IsStroke = false, IsAntialias = true }; @@ -558,6 +557,13 @@ namespace Avalonia.Skia /// private PaintWrapper CreatePaint(Pen pen, Size targetSize) { + // In Skia 0 thickness means - use hairline rendering + // and for us it means - there is nothing rendered. + if (pen.Thickness == 0d) + { + return default; + } + var rv = CreatePaint(pen.Brush, targetSize); var paint = rv.Paint; diff --git a/tests/Avalonia.RenderTests/Shapes/RectangleTests.cs b/tests/Avalonia.RenderTests/Shapes/RectangleTests.cs index d48765a360..6d4a840641 100644 --- a/tests/Avalonia.RenderTests/Shapes/RectangleTests.cs +++ b/tests/Avalonia.RenderTests/Shapes/RectangleTests.cs @@ -20,6 +20,26 @@ namespace Avalonia.Direct2D1.RenderTests.Shapes { } + [Fact] + public async Task Rectangle_0px_Stroke() + { + Decorator target = new Decorator + { + Padding = new Thickness(8), + Width = 200, + Height = 200, + Child = new Rectangle + { + Fill = Brushes.Transparent, + Stroke = Brushes.Black, + StrokeThickness = 0 + } + }; + + await RenderToFile(target); + CompareImages(); + } + [Fact] public async Task Rectangle_1px_Stroke() { diff --git a/tests/TestFiles/Direct2D1/Shapes/Rectangle/Rectangle_0px_Stroke.expected.png b/tests/TestFiles/Direct2D1/Shapes/Rectangle/Rectangle_0px_Stroke.expected.png new file mode 100644 index 0000000000000000000000000000000000000000..27aacea049120e0237d04b64879b49dcd2c345db GIT binary patch literal 610 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yv7|ftIx;Y9?C1WI$O`0h7I;J! zGcfQS24TkI`72U@f)XXJ5hcO-X(i=}MX3x0iJ5sNdU>fO3MP7ndZsDv5kQj}A9%Vr zhE&A8J+YCufkA-T@LT*ZL9gnZ2Zws+?`Ez`VVcb8qh>Jkz$jxV2EvD(&skS_v(4Lj TKJ5oEJurB>`njxgN@xNA1oFn1 literal 0 HcmV?d00001 diff --git a/tests/TestFiles/Skia/Shapes/Rectangle/Rectangle_0px_Stroke.expected.png b/tests/TestFiles/Skia/Shapes/Rectangle/Rectangle_0px_Stroke.expected.png new file mode 100644 index 0000000000000000000000000000000000000000..27aacea049120e0237d04b64879b49dcd2c345db GIT binary patch literal 610 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yv7|ftIx;Y9?C1WI$O`0h7I;J! zGcfQS24TkI`72U@f)XXJ5hcO-X(i=}MX3x0iJ5sNdU>fO3MP7ndZsDv5kQj}A9%Vr zhE&A8J+YCufkA-T@LT*ZL9gnZ2Zws+?`Ez`VVcb8qh>Jkz$jxV2EvD(&skS_v(4Lj TKJ5oEJurB>`njxgN@xNA1oFn1 literal 0 HcmV?d00001