From ec8002ea05de842ad502aa906a7a80d8007b83d4 Mon Sep 17 00:00:00 2001 From: matt Sullivan Date: Fri, 11 Jun 2021 13:49:03 -0700 Subject: [PATCH] Exposes antialiasing option in Rive and RiveAnimation --- example/lib/simple_animation.dart | 1 + lib/src/rive.dart | 11 +++++++++ lib/src/widgets/rive_animation.dart | 38 +++++++++++++++-------------- 3 files changed, 32 insertions(+), 18 deletions(-) diff --git a/example/lib/simple_animation.dart b/example/lib/simple_animation.dart index c15b1ef..a5b51b9 100644 --- a/example/lib/simple_animation.dart +++ b/example/lib/simple_animation.dart @@ -15,6 +15,7 @@ class SimpleAnimation extends StatelessWidget { child: RiveAnimation.network( 'https://cdn.rive.app/animations/vehicles.riv', fit: BoxFit.cover, + antialiasing: false, ), ), ); diff --git a/lib/src/rive.dart b/lib/src/rive.dart index f02d229..99896ac 100644 --- a/lib/src/rive.dart +++ b/lib/src/rive.dart @@ -6,6 +6,7 @@ import 'package:rive/src/rive_render_box.dart'; import 'package:rive/src/runtime_artboard.dart'; class Rive extends LeafRenderObjectWidget { + /// Artboard used for drawing final Artboard artboard; /// Determines whether to use the inherent size of the [artboard], i.e. the @@ -27,12 +28,19 @@ class Rive extends LeafRenderObjectWidget { /// this to `true`. final bool useArtboardSize; + /// Fit for the rendering artboard final BoxFit fit; + + /// Alignment for the rendering artboard final Alignment alignment; + /// Enables/disables anitalising + final bool antialiasing; + const Rive({ required this.artboard, this.useArtboardSize = false, + this.antialiasing = true, BoxFit? fit, Alignment? alignment, }) : fit = fit ?? BoxFit.contain, @@ -40,6 +48,8 @@ class Rive extends LeafRenderObjectWidget { @override RenderObject createRenderObject(BuildContext context) { + // Doing this here and not in constructor so it can remain const + artboard.antialiasing = antialiasing; return RiveRenderObject(artboard as RuntimeArtboard) ..fit = fit ..alignment = alignment @@ -50,6 +60,7 @@ class Rive extends LeafRenderObjectWidget { @override void updateRenderObject( BuildContext context, covariant RiveRenderObject renderObject) { + artboard.antialiasing = antialiasing; renderObject ..artboard = artboard ..fit = fit diff --git a/lib/src/widgets/rive_animation.dart b/lib/src/widgets/rive_animation.dart index 9075c3e..6857c48 100644 --- a/lib/src/widgets/rive_animation.dart +++ b/lib/src/widgets/rive_animation.dart @@ -15,15 +15,31 @@ enum _Source { /// animation are not specified, the default artboard and first animation fonund /// within it are used. class RiveAnimation extends StatefulWidget { + /// The asset name or url final String name; + + /// The type of source used to retrieve the asset final _Source src; + + /// The name of the artboard to use; default artboard if not specified final String? artboard; + + /// List of animations to play; default animation if not specified final List animations; + + /// List of state machines to play; none will play if not specified final List stateMachines; + + /// Fit for the animation in the widget final BoxFit? fit; + + /// Alignment for the animation in the widget final Alignment? alignment; - /// Widget displayed while the rive is loading. + /// Enable/disable antialiasing when rendering + final bool antialiasing; + + /// Widget displayed while the rive is loading final Widget? placeHolder; /// Creates a new RiveAnimation from an asset bundle @@ -35,6 +51,7 @@ class RiveAnimation extends StatefulWidget { this.fit, this.alignment, this.placeHolder, + this.antialiasing = true, }) : src = _Source.asset; const RiveAnimation.network( @@ -45,6 +62,7 @@ class RiveAnimation extends StatefulWidget { this.fit, this.alignment, this.placeHolder, + this.antialiasing = true, }) : src = _Source.network; @override @@ -88,23 +106,6 @@ class _RiveAnimationState extends State { final res = await http.get(Uri.parse(widget.name)); final data = ByteData.view(res.bodyBytes.buffer); _init(data); - // final client = HttpClient(); - // final contents = []; - - // client - // .getUrl(Uri.parse(widget.name)) - // .then( - // (req) async => req.close(), - // ) - // .then( - // (res) => res.listen( - // contents.addAll, - // onDone: () { - // final data = ByteData.view(Uint8List.fromList(contents).buffer); - // _init(data); - // }, - // ), - // ); } /// Initializes the artboard, animation, and controller @@ -157,6 +158,7 @@ class _RiveAnimationState extends State { artboard: _artboard!, fit: widget.fit, alignment: widget.alignment, + antialiasing: widget.antialiasing, ) : widget.placeHolder ?? const SizedBox(); }