From 09cff9b79462724c3852c61e5d7d3832f4c27713 Mon Sep 17 00:00:00 2001
From: Luigi Rosso <luigi.rosso@gmail.com>
Date: Sat, 23 Jan 2021 11:10:25 -0800
Subject: [PATCH] Adding support for intrinsic size.

---
 lib/src/rive.dart            |  4 ++++
 lib/src/rive_render_box.dart | 11 ++++++++++-
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/lib/src/rive.dart b/lib/src/rive.dart
index 249bfeb..28beb6b 100644
--- a/lib/src/rive.dart
+++ b/lib/src/rive.dart
@@ -24,6 +24,8 @@ class Rive extends LeafRenderObjectWidget {
       ..artboard = artboard
       ..fit = fit
       ..alignment = alignment
+      ..intrinsicSize =
+          artboard == null ? Size.zero : Size(artboard.width, artboard.height)
       ..useIntrinsicSize = useIntrinsicSize;
   }
 
@@ -34,6 +36,8 @@ class Rive extends LeafRenderObjectWidget {
       ..artboard = artboard
       ..fit = fit
       ..alignment = alignment
+      ..intrinsicSize =
+          artboard == null ? Size.zero : Size(artboard.width, artboard.height)
       ..useIntrinsicSize = useIntrinsicSize;
   }
 
diff --git a/lib/src/rive_render_box.dart b/lib/src/rive_render_box.dart
index 4a4e0d2..93ce25b 100644
--- a/lib/src/rive_render_box.dart
+++ b/lib/src/rive_render_box.dart
@@ -12,6 +12,12 @@ abstract class RiveRenderBox extends RenderBox {
   Alignment _alignment;
   bool _useIntrinsicSize = false;
 
+  @override
+  Size computeDryLayout(BoxConstraints constraints) {
+    return constraints
+        .constrainSizeAndAttemptToPreserveAspectRatio(_intrinsicSize);
+  }
+
   bool get useIntrinsicSize => _useIntrinsicSize;
   set useIntrinsicSize(bool value) {
     if (_useIntrinsicSize == value) {
@@ -66,7 +72,10 @@ abstract class RiveRenderBox extends RenderBox {
 
   @override
   void performResize() {
-    size = _useIntrinsicSize ? constraints.smallest : constraints.biggest;
+    if (_useIntrinsicSize) {
+      super.performResize();
+    }
+    size = constraints.biggest;
   }
 
   @override