From fef6090e78c70c8c8b1e84b19f406710be8933ff Mon Sep 17 00:00:00 2001 From: Luigi Rosso Date: Wed, 11 May 2022 15:35:52 -0700 Subject: [PATCH] Cleanup based on previous PR --- example/lib/simple_machine_action.dart | 9 ++------ lib/src/rive_render_box.dart | 30 ++++++++++++++------------ 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/example/lib/simple_machine_action.dart b/example/lib/simple_machine_action.dart index aebd943..30f45c9 100644 --- a/example/lib/simple_machine_action.dart +++ b/example/lib/simple_machine_action.dart @@ -9,22 +9,17 @@ class StateMachineAction extends StatefulWidget { } class _StateMachineActionState extends State { - void _onRiveInit(Artboard artboard) { - final controller = StateMachineController.fromArtboard(artboard, 'Switch'); - artboard.addController(controller!); - } - @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Light Switch'), ), - body: Center( + body: const Center( child: RiveAnimation.asset( 'assets/light_switch.riv', fit: BoxFit.contain, - onInit: _onRiveInit, + stateMachines: ['Switch'], ), ), ); diff --git a/lib/src/rive_render_box.dart b/lib/src/rive_render_box.dart index 7fe40e0..218fe6f 100644 --- a/lib/src/rive_render_box.dart +++ b/lib/src/rive_render_box.dart @@ -206,19 +206,21 @@ abstract class RiveRenderBox extends RenderBox { } Mat2D computeAlignment([Offset offset = Offset.zero]) { - AABB bounds = aabb; + AABB frame = AABB.fromValues( + offset.dx, offset.dy, offset.dx + size.width, offset.dy + size.height); + AABB content = aabb; - double contentWidth = bounds[2] - bounds[0]; - double contentHeight = bounds[3] - bounds[1]; + double contentWidth = content[2] - content[0]; + double contentHeight = content[3] - content[1]; if (contentWidth == 0 || contentHeight == 0) { return Mat2D(); } - double x = -1 * bounds[0] - + double x = -1 * content[0] - contentWidth / 2.0 - (_alignment.x * contentWidth / 2.0); - double y = -1 * bounds[1] - + double y = -1 * content[1] - contentHeight / 2.0 - (_alignment.y * contentHeight / 2.0); @@ -226,25 +228,25 @@ abstract class RiveRenderBox extends RenderBox { switch (_fit) { case BoxFit.fill: - scaleX = size.width / contentWidth; - scaleY = size.height / contentHeight; + scaleX = frame.width / contentWidth; + scaleY = frame.height / contentHeight; break; case BoxFit.contain: double minScale = - min(size.width / contentWidth, size.height / contentHeight); + min(frame.width / contentWidth, frame.height / contentHeight); scaleX = scaleY = minScale; break; case BoxFit.cover: double maxScale = - max(size.width / contentWidth, size.height / contentHeight); + max(frame.width / contentWidth, frame.height / contentHeight); scaleX = scaleY = maxScale; break; case BoxFit.fitHeight: - double minScale = size.height / contentHeight; + double minScale = frame.height / contentHeight; scaleX = scaleY = minScale; break; case BoxFit.fitWidth: - double minScale = size.width / contentWidth; + double minScale = frame.width / contentWidth; scaleX = scaleY = minScale; break; case BoxFit.none: @@ -252,15 +254,15 @@ abstract class RiveRenderBox extends RenderBox { break; case BoxFit.scaleDown: double minScale = - min(size.width / contentWidth, size.height / contentHeight); + min(frame.width / contentWidth, frame.height / contentHeight); scaleX = scaleY = minScale < 1.0 ? minScale : 1.0; break; } Mat2D transform = Mat2D(); - transform[4] = size.width / 2.0 + (_alignment.x * size.width / 2.0); - transform[5] = size.height / 2.0 + (_alignment.y * size.height / 2.0); + transform[4] = frame.width / 2.0 + (_alignment.x * frame.width / 2.0); + transform[5] = frame.height / 2.0 + (_alignment.y * frame.height / 2.0); if (offsetViewTransform) { transform[4] += offset.dx; transform[5] += offset.dy;