diff --git a/lib/web_ui/dev/goldens_lock.yaml b/lib/web_ui/dev/goldens_lock.yaml index 5dca7678842be..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: 510c545ee4dd94f7d620cdc51a9027fdd8e521bc +revision: 999507db8c924635a605325252702bad661e2ad2 diff --git a/lib/web_ui/lib/src/engine/bitmap_canvas.dart b/lib/web_ui/lib/src/engine/bitmap_canvas.dart index 819f903a6cbe5..2440ff24f6bfd 100644 --- a/lib/web_ui/lib/src/engine/bitmap_canvas.dart +++ b/lib/web_ui/lib/src/engine/bitmap_canvas.dart @@ -951,11 +951,16 @@ class BitmapCanvas extends EngineCanvas { _drawPointsPaint.style = ui.PaintingStyle.fill; } _drawPointsPaint.color = paint.color; - _drawPointsPaint.strokeWidth = paint.strokeWidth; _drawPointsPaint.maskFilter = paint.maskFilter; + final double dpr = ui.window.devicePixelRatio; + // Use hairline (device pixel when strokeWidth is not specified). + final double strokeWidth = paint.strokeWidth == null ? 1.0 / dpr + : paint.strokeWidth!; + _drawPointsPaint.strokeWidth = strokeWidth; _setUpPaint(_drawPointsPaint, null); - _canvasPool.drawPoints(pointMode, points, paint.strokeWidth! / 2.0); + // 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); + }); }