From bedacd0c8c79f4f060b002eeddaa9d2ef68d316c Mon Sep 17 00:00:00 2001 From: Dipak Prajapati Date: Fri, 21 Oct 2022 17:58:40 +0530 Subject: [PATCH] feat: Expose paint from svgComponent to set opacity and have opacity effects (#2092) --- packages/flame_svg/lib/svg.dart | 9 +++++++-- packages/flame_svg/lib/svg_component.dart | 9 ++++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/flame_svg/lib/svg.dart b/packages/flame_svg/lib/svg.dart index 70ca0f4faf0..61279f2c7d0 100644 --- a/packages/flame_svg/lib/svg.dart +++ b/packages/flame_svg/lib/svg.dart @@ -41,14 +41,19 @@ class Svg { } /// Renders the svg on the [canvas] using the dimensions provided by [size]. - void render(Canvas canvas, Vector2 size) { + void render( + Canvas canvas, + Vector2 size, { + Paint? overridePaint, + }) { final _size = size.toSize(); final image = _getImage(_size); if (image != null) { canvas.save(); canvas.scale(1 / pixelRatio); - canvas.drawImage(image, Offset.zero, _paint); + final drawPaint = overridePaint ?? _paint; + canvas.drawImage(image, Offset.zero, drawPaint); canvas.restore(); } else { _render(canvas, _size); diff --git a/packages/flame_svg/lib/svg_component.dart b/packages/flame_svg/lib/svg_component.dart index 1f6444c9e2e..5814279f45a 100644 --- a/packages/flame_svg/lib/svg_component.dart +++ b/packages/flame_svg/lib/svg_component.dart @@ -4,7 +4,7 @@ import 'package:flame/components.dart'; import 'package:flame_svg/svg.dart'; /// Wraps [Svg] in a Flame component. -class SvgComponent extends PositionComponent { +class SvgComponent extends PositionComponent with HasPaint { /// The wrapped instance of [Svg]. Svg? _svg; @@ -18,7 +18,10 @@ class SvgComponent extends PositionComponent { super.anchor, super.children, super.priority, - }) : _svg = svg; + Paint? paint, + }) : _svg = svg { + this.paint = paint ?? this.paint; + } set svg(Svg? svg) { _svg?.dispose(); @@ -30,7 +33,7 @@ class SvgComponent extends PositionComponent { @override void render(Canvas canvas) { - _svg?.render(canvas, size); + _svg?.render(canvas, size, overridePaint: paint); } @override