@@ -227,8 +227,8 @@ class BitmapCanvas extends EngineCanvas {
227227 }
228228
229229 /// Sets the global paint styles to correspond to [paint] .
230- void _setUpPaint (SurfacePaintData paint) {
231- _canvasPool.contextHandle.setUpPaint (paint);
230+ void _setUpPaint (SurfacePaintData paint, ui. Rect ? shaderBounds ) {
231+ _canvasPool.contextHandle.setUpPaint (paint, shaderBounds );
232232 }
233233
234234 void _tearDownPaint () {
@@ -352,7 +352,9 @@ class BitmapCanvas extends EngineCanvas {
352352 ..lineTo (p2.dx, p2.dy);
353353 drawPath (path, paint);
354354 } else {
355- _setUpPaint (paint);
355+ ui.Rect ? shaderBounds = (paint.shader != null ) ?
356+ ui.Rect .fromPoints (p1, p2) : null ;
357+ _setUpPaint (paint, shaderBounds);
356358 _canvasPool.strokeLine (p1, p2);
357359 _tearDownPaint ();
358360 }
@@ -363,7 +365,9 @@ class BitmapCanvas extends EngineCanvas {
363365 if (_useDomForRendering (paint)) {
364366 drawRect (_computeScreenBounds (_canvasPool._currentTransform), paint);
365367 } else {
366- _setUpPaint (paint);
368+ ui.Rect ? shaderBounds = (paint.shader != null ) ?
369+ _computePictureBounds () : null ;
370+ _setUpPaint (paint, shaderBounds);
367371 _canvasPool.fill ();
368372 _tearDownPaint ();
369373 }
@@ -380,7 +384,7 @@ class BitmapCanvas extends EngineCanvas {
380384 math.min (rect.left, rect.right), math.min (rect.top, rect.bottom)),
381385 paint);
382386 } else {
383- _setUpPaint (paint);
387+ _setUpPaint (paint, rect );
384388 _canvasPool.drawRect (rect, paint.style);
385389 _tearDownPaint ();
386390 }
@@ -423,15 +427,15 @@ class BitmapCanvas extends EngineCanvas {
423427 math.min (rect.left, rect.right), math.min (rect.top, rect.bottom)),
424428 paint);
425429 } else {
426- _setUpPaint (paint);
427- _canvasPool.drawRRect (rrect, paint.style);
430+ _setUpPaint (paint, rrect.outerRect );
431+ _canvasPool.drawRRect (rrect, paint.style);
428432 _tearDownPaint ();
429433 }
430434 }
431435
432436 @override
433437 void drawDRRect (ui.RRect outer, ui.RRect inner, SurfacePaintData paint) {
434- _setUpPaint (paint);
438+ _setUpPaint (paint, outer.outerRect );
435439 _canvasPool.drawDRRect (outer, inner, paint.style);
436440 _tearDownPaint ();
437441 }
@@ -449,7 +453,7 @@ class BitmapCanvas extends EngineCanvas {
449453 element.style.borderRadius =
450454 '${(rect .width / 2.0 )}px / ${(rect .height / 2.0 )}px' ;
451455 } else {
452- _setUpPaint (paint);
456+ _setUpPaint (paint, rect );
453457 _canvasPool.drawOval (rect, paint.style);
454458 _tearDownPaint ();
455459 }
@@ -468,7 +472,8 @@ class BitmapCanvas extends EngineCanvas {
468472 paint);
469473 element.style.borderRadius = '50%' ;
470474 } else {
471- _setUpPaint (paint);
475+ _setUpPaint (paint, paint.shader != null
476+ ? ui.Rect .fromCircle (center: c, radius: radius) : null );
472477 _canvasPool.drawCircle (c, radius, paint.style);
473478 _tearDownPaint ();
474479 }
@@ -490,7 +495,7 @@ class BitmapCanvas extends EngineCanvas {
490495 }
491496 _drawElement (svgElm, ui.Offset (0 , 0 ), paint);
492497 } else {
493- _setUpPaint (paint);
498+ _setUpPaint (paint, paint.shader != null ? path. getBounds () : null );
494499 _canvasPool.drawPath (path, paint.style);
495500 _tearDownPaint ();
496501 }
@@ -813,7 +818,7 @@ class BitmapCanvas extends EngineCanvas {
813818 ctx.font = style.cssFontString;
814819 _cachedLastStyle = style;
815820 }
816- _setUpPaint (paragraph._paint! .paintData);
821+ _setUpPaint (paragraph._paint! .paintData, null );
817822 double y = offset.dy + paragraph.alphabeticBaseline;
818823 final int len = lines.length;
819824 for (int i = 0 ; i < len; i++ ) {
@@ -920,7 +925,7 @@ class BitmapCanvas extends EngineCanvas {
920925 _drawPointsPaint.strokeWidth = paint.strokeWidth;
921926 _drawPointsPaint.maskFilter = paint.maskFilter;
922927
923- _setUpPaint (_drawPointsPaint);
928+ _setUpPaint (_drawPointsPaint, null );
924929 _canvasPool.drawPoints (pointMode, points, paint.strokeWidth! / 2.0 );
925930 _tearDownPaint ();
926931 }
@@ -969,6 +974,11 @@ class BitmapCanvas extends EngineCanvas {
969974 math.max (topRight.y, math.max (bottomRight.y, bottomLeft.y))),
970975 );
971976 }
977+
978+ /// Computes paint bounds to completely cover picture.
979+ ui.Rect _computePictureBounds () {
980+ return ui.Rect .fromLTRB (0 , 0 , _bounds.width, _bounds.height);
981+ }
972982}
973983
974984String ? _stringForBlendMode (ui.BlendMode ? blendMode) {
0 commit comments