Browse Source

Merge pull request #5896 from AvaloniaUI/fixes/skia-drawingcontext-nre

Fix NRE in Skia DrawingContextImpl.
release/0.10.5
Dan Walmsley 5 years ago
parent
commit
fa3f3f7157
  1. 22
      src/Skia/Avalonia.Skia/DrawingContextImpl.cs
  2. 30
      tests/Avalonia.Skia.UnitTests/DrawingContextImplTests.cs

22
src/Skia/Avalonia.Skia/DrawingContextImpl.cs

@ -166,7 +166,10 @@ namespace Avalonia.Skia
{
using (var paint = CreatePaint(_strokePaint, pen, new Size(Math.Abs(p2.X - p1.X), Math.Abs(p2.Y - p1.Y))))
{
Canvas.DrawLine((float) p1.X, (float) p1.Y, (float) p2.X, (float) p2.Y, paint.Paint);
if (paint.Paint is object)
{
Canvas.DrawLine((float)p1.X, (float)p1.Y, (float)p2.X, (float)p2.Y, paint.Paint);
}
}
}
@ -361,7 +364,6 @@ namespace Avalonia.Skia
{
Canvas.DrawRect(rc, paint.Paint);
}
}
}
@ -397,15 +399,17 @@ namespace Avalonia.Skia
{
using (var paint = CreatePaint(_strokePaint, pen, rect.Rect.Size))
{
if (isRounded)
{
Canvas.DrawRoundRect(skRoundRect, paint.Paint);
}
else
if (paint.Paint is object)
{
Canvas.DrawRect(rc, paint.Paint);
if (isRounded)
{
Canvas.DrawRoundRect(skRoundRect, paint.Paint);
}
else
{
Canvas.DrawRect(rc, paint.Paint);
}
}
}
}
}

30
tests/Avalonia.Skia.UnitTests/DrawingContextImplTests.cs

@ -0,0 +1,30 @@
using Avalonia.Media;
using Avalonia.Skia.Helpers;
using SkiaSharp;
using Xunit;
namespace Avalonia.Skia.UnitTests
{
public class DrawingContextImplTests
{
[Fact]
public void DrawLine_With_Zero_Thickness_Pen_Does_Not_Throw()
{
var target = CreateTarget();
target.DrawLine(new Pen(Brushes.Black, 0), new Point(0, 0), new Point(10, 10));
}
[Fact]
public void DrawRectangle_With_Zero_Thickness_Pen_Does_Not_Throw()
{
var target = CreateTarget();
target.DrawRectangle(Brushes.Black, new Pen(Brushes.Black, 0), new RoundedRect(new Rect(0, 0, 100, 100), new CornerRadius(4)));
}
private DrawingContextImpl CreateTarget()
{
var canvas = new SKCanvas(new SKBitmap(100, 100));
return (DrawingContextImpl)DrawingContextHelper.WrapSkiaCanvas(canvas, new Vector(96, 96));
}
}
}
Loading…
Cancel
Save