Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions ci/licenses_golden/licenses_flutter
Original file line number Diff line number Diff line change
Expand Up @@ -489,6 +489,7 @@ FILE: ../../../flutter/lib/web_ui/lib/src/engine/html/recording_canvas.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/html/render_vertices.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/html/scene.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/html/scene_builder.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/html/shaders/normalized_gradient.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/html/shaders/shader.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/html/shaders/shader_builder.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/html/surface.dart
Expand Down
1 change: 1 addition & 0 deletions lib/web_ui/lib/src/engine.dart
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ part 'engine/html/recording_canvas.dart';
part 'engine/html/render_vertices.dart';
part 'engine/html/scene.dart';
part 'engine/html/scene_builder.dart';
part 'engine/html/shaders/normalized_gradient.dart';
part 'engine/html/shaders/shader.dart';
part 'engine/html/shaders/shader_builder.dart';
part 'engine/html/surface.dart';
Expand Down
36 changes: 23 additions & 13 deletions lib/web_ui/lib/src/engine/bitmap_canvas.dart
Original file line number Diff line number Diff line change
Expand Up @@ -227,8 +227,8 @@ class BitmapCanvas extends EngineCanvas {
}

/// Sets the global paint styles to correspond to [paint].
void _setUpPaint(SurfacePaintData paint) {
_canvasPool.contextHandle.setUpPaint(paint);
void _setUpPaint(SurfacePaintData paint, ui.Rect? shaderBounds) {
_canvasPool.contextHandle.setUpPaint(paint, shaderBounds);
}

void _tearDownPaint() {
Expand Down Expand Up @@ -352,7 +352,9 @@ class BitmapCanvas extends EngineCanvas {
..lineTo(p2.dx, p2.dy);
drawPath(path, paint);
} else {
_setUpPaint(paint);
ui.Rect? shaderBounds = (paint.shader != null) ?
ui.Rect.fromPoints(p1, p2) : null;
_setUpPaint(paint, shaderBounds);
_canvasPool.strokeLine(p1, p2);
_tearDownPaint();
}
Expand All @@ -363,7 +365,9 @@ class BitmapCanvas extends EngineCanvas {
if (_useDomForRendering(paint)) {
drawRect(_computeScreenBounds(_canvasPool._currentTransform), paint);
} else {
_setUpPaint(paint);
ui.Rect? shaderBounds = (paint.shader != null) ?
_computePictureBounds() : null;
_setUpPaint(paint, shaderBounds);
_canvasPool.fill();
_tearDownPaint();
}
Expand All @@ -380,7 +384,7 @@ class BitmapCanvas extends EngineCanvas {
math.min(rect.left, rect.right), math.min(rect.top, rect.bottom)),
paint);
} else {
_setUpPaint(paint);
_setUpPaint(paint, rect);
_canvasPool.drawRect(rect, paint.style);
_tearDownPaint();
}
Expand Down Expand Up @@ -423,15 +427,15 @@ class BitmapCanvas extends EngineCanvas {
math.min(rect.left, rect.right), math.min(rect.top, rect.bottom)),
paint);
} else {
_setUpPaint(paint);
_canvasPool.drawRRect(rrect, paint.style);
_setUpPaint(paint, rrect.outerRect);
_canvasPool.drawRRect(rrect, paint.style);
_tearDownPaint();
}
}

@override
void drawDRRect(ui.RRect outer, ui.RRect inner, SurfacePaintData paint) {
_setUpPaint(paint);
_setUpPaint(paint, outer.outerRect);
_canvasPool.drawDRRect(outer, inner, paint.style);
_tearDownPaint();
}
Expand All @@ -449,7 +453,7 @@ class BitmapCanvas extends EngineCanvas {
element.style.borderRadius =
'${(rect.width / 2.0)}px / ${(rect.height / 2.0)}px';
} else {
_setUpPaint(paint);
_setUpPaint(paint, rect);
_canvasPool.drawOval(rect, paint.style);
_tearDownPaint();
}
Expand All @@ -468,7 +472,8 @@ class BitmapCanvas extends EngineCanvas {
paint);
element.style.borderRadius = '50%';
} else {
_setUpPaint(paint);
_setUpPaint(paint, paint.shader != null
? ui.Rect.fromCircle(center: c, radius: radius) : null);
_canvasPool.drawCircle(c, radius, paint.style);
_tearDownPaint();
}
Expand All @@ -490,7 +495,7 @@ class BitmapCanvas extends EngineCanvas {
}
_drawElement(svgElm, ui.Offset(0, 0), paint);
} else {
_setUpPaint(paint);
_setUpPaint(paint, paint.shader != null ? path.getBounds() : null);
_canvasPool.drawPath(path, paint.style);
_tearDownPaint();
}
Expand Down Expand Up @@ -813,7 +818,7 @@ class BitmapCanvas extends EngineCanvas {
ctx.font = style.cssFontString;
_cachedLastStyle = style;
}
_setUpPaint(paragraph._paint!.paintData);
_setUpPaint(paragraph._paint!.paintData, null);
double y = offset.dy + paragraph.alphabeticBaseline;
final int len = lines.length;
for (int i = 0; i < len; i++) {
Expand Down Expand Up @@ -920,7 +925,7 @@ class BitmapCanvas extends EngineCanvas {
_drawPointsPaint.strokeWidth = paint.strokeWidth;
_drawPointsPaint.maskFilter = paint.maskFilter;

_setUpPaint(_drawPointsPaint);
_setUpPaint(_drawPointsPaint, null);
_canvasPool.drawPoints(pointMode, points, paint.strokeWidth! / 2.0);
_tearDownPaint();
}
Expand Down Expand Up @@ -969,6 +974,11 @@ class BitmapCanvas extends EngineCanvas {
math.max(topRight.y, math.max(bottomRight.y, bottomLeft.y))),
);
}

/// Computes paint bounds to completely cover picture.
ui.Rect _computePictureBounds() {
return ui.Rect.fromLTRB(0, 0, _bounds.width, _bounds.height);
}
}

String? _stringForBlendMode(ui.BlendMode? blendMode) {
Expand Down
4 changes: 2 additions & 2 deletions lib/web_ui/lib/src/engine/canvas_pool.dart
Original file line number Diff line number Diff line change
Expand Up @@ -763,7 +763,7 @@ class ContextStateHandle {
/// Sets paint properties on the current canvas.
///
/// [tearDownPaint] must be called after calling this method.
void setUpPaint(SurfacePaintData paint) {
void setUpPaint(SurfacePaintData paint, ui.Rect? shaderBounds) {
if (assertionsEnabled) {
assert(!_debugIsPaintSetUp);
_debugIsPaintSetUp = true;
Expand All @@ -778,7 +778,7 @@ class ContextStateHandle {
if (paint.shader != null) {
final EngineGradient engineShader = paint.shader as EngineGradient;
final Object paintStyle =
engineShader.createPaintStyle(_canvasPool.context);
engineShader.createPaintStyle(_canvasPool.context, shaderBounds);
fillStyle = paintStyle;
strokeStyle = paintStyle;
} else if (paint.color != null) {
Expand Down
Loading