From 239db77186a4719529346cb5c3328a2228c49f0d Mon Sep 17 00:00:00 2001 From: ferhatb Date: Tue, 19 Jan 2021 12:29:12 -0800 Subject: [PATCH 1/3] Fix null exception when using drawPoints API with no strokeWidth --- lib/web_ui/lib/src/engine/bitmap_canvas.dart | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/web_ui/lib/src/engine/bitmap_canvas.dart b/lib/web_ui/lib/src/engine/bitmap_canvas.dart index 819f903a6cbe5..70ae34580e2e5 100644 --- a/lib/web_ui/lib/src/engine/bitmap_canvas.dart +++ b/lib/web_ui/lib/src/engine/bitmap_canvas.dart @@ -955,7 +955,12 @@ class BitmapCanvas extends EngineCanvas { _drawPointsPaint.maskFilter = paint.maskFilter; _setUpPaint(_drawPointsPaint, null); - _canvasPool.drawPoints(pointMode, points, paint.strokeWidth! / 2.0); + final double dpr = ui.window.devicePixelRatio; + // Use hairline (device pixel when strokeWidth is not specified). + final double strokeWidth = paint.strokeWidth == null ? 1.0 / (2 * dpr) + : paint.strokeWidth!; + // Draw point using circle with half radius. + _canvasPool.drawPoints(pointMode, points, strokeWidth / 2.0); _tearDownPaint(); } From b22395df6ee4601c3dc481d578c1d88a3c31c641 Mon Sep 17 00:00:00 2001 From: ferhatb Date: Tue, 19 Jan 2021 13:23:14 -0800 Subject: [PATCH 2/3] Fix drawPoints API crash when strokeWidth is not specified --- lib/web_ui/lib/src/engine/bitmap_canvas.dart | 8 +++---- .../engine/canvas_draw_points_test.dart | 21 +++++++++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/lib/web_ui/lib/src/engine/bitmap_canvas.dart b/lib/web_ui/lib/src/engine/bitmap_canvas.dart index 70ae34580e2e5..2440ff24f6bfd 100644 --- a/lib/web_ui/lib/src/engine/bitmap_canvas.dart +++ b/lib/web_ui/lib/src/engine/bitmap_canvas.dart @@ -951,15 +951,15 @@ class BitmapCanvas extends EngineCanvas { _drawPointsPaint.style = ui.PaintingStyle.fill; } _drawPointsPaint.color = paint.color; - _drawPointsPaint.strokeWidth = paint.strokeWidth; _drawPointsPaint.maskFilter = paint.maskFilter; - _setUpPaint(_drawPointsPaint, null); final double dpr = ui.window.devicePixelRatio; // Use hairline (device pixel when strokeWidth is not specified). - final double strokeWidth = paint.strokeWidth == null ? 1.0 / (2 * dpr) + final double strokeWidth = paint.strokeWidth == null ? 1.0 / dpr : paint.strokeWidth!; - // Draw point using circle with half radius. + _drawPointsPaint.strokeWidth = strokeWidth; + _setUpPaint(_drawPointsPaint, null); + // Draw point using circle with half radius. _canvasPool.drawPoints(pointMode, points, strokeWidth / 2.0); _tearDownPaint(); } diff --git a/lib/web_ui/test/golden_tests/engine/canvas_draw_points_test.dart b/lib/web_ui/test/golden_tests/engine/canvas_draw_points_test.dart index a381a3acdcd5a..d18fedfda97a1 100644 --- a/lib/web_ui/test/golden_tests/engine/canvas_draw_points_test.dart +++ b/lib/web_ui/test/golden_tests/engine/canvas_draw_points_test.dart @@ -59,4 +59,25 @@ void testMain() async { html.document.body.append(canvas.rootElement); await matchGoldenFile('canvas_draw_points.png', region: region); }); + + test('Should draw points with strokeWidth', () async { + final SurfacePaintData nullStrokePaint = + SurfacePaintData()..color = Color(0xffff0000); + canvas.drawPoints(PointMode.lines, Float32List.fromList([ + 30.0, 20.0, 200.0, 20.0]), nullStrokePaint); + final SurfacePaintData strokePaint1 = SurfacePaintData() + ..strokeWidth = 1.0 + ..color = Color(0xff0000ff); + canvas.drawPoints(PointMode.lines, Float32List.fromList([ + 30.0, 30.0, 200.0, 30.0]), strokePaint1); + final SurfacePaintData strokePaint3 = SurfacePaintData() + ..strokeWidth = 3.0 + ..color = Color(0xff00a000); + canvas.drawPoints(PointMode.lines, Float32List.fromList([ + 30.0, 40.0, 200.0, 40.0]), strokePaint3); + canvas.drawPoints(PointMode.points, Float32List.fromList([ + 30.0, 50.0, 40.0, 50.0, 50.0, 50.0]), strokePaint3); + html.document.body.append(canvas.rootElement); + await matchGoldenFile('canvas_draw_points_stroke.png', region: region); + }); } From fb8febfbe463e09a8485bb3c5c9d0e0b9ef0dfac Mon Sep 17 00:00:00 2001 From: ferhatb Date: Tue, 19 Jan 2021 14:51:19 -0800 Subject: [PATCH 3/3] update golden lock --- lib/web_ui/dev/goldens_lock.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/web_ui/dev/goldens_lock.yaml b/lib/web_ui/dev/goldens_lock.yaml index c89bd196e6ea7..c975dc3d2f50d 100644 --- a/lib/web_ui/dev/goldens_lock.yaml +++ b/lib/web_ui/dev/goldens_lock.yaml @@ -1,2 +1,2 @@ repository: https://github.com/flutter/goldens.git -revision: 1e65186b73045bb1034ade9f12b810caabd00462 +revision: 999507db8c924635a605325252702bad661e2ad2