Fix non-framed artboard origin rendering.

Fixes issue caught by Duolingo with nested artboards and non-zero origins. Adds AABB::fromLTWH to keep AABB to Rect tidy.

Diffs=
99c5590bc Fix non-framed artboard origin rendering. (#4281)
diff --git a/.rive_head b/.rive_head
index 01bc573..c815147 100644
--- a/.rive_head
+++ b/.rive_head
@@ -1 +1 @@
-32e79999a88138e308ba4aef905c411361fa410b
+99c5590bcfe896005fa805bb3aba8b817ce22b4b
diff --git a/include/rive/math/aabb.hpp b/include/rive/math/aabb.hpp
index 0a7c400..81c1c6a 100644
--- a/include/rive/math/aabb.hpp
+++ b/include/rive/math/aabb.hpp
@@ -28,6 +28,10 @@
 
     AABB() : minX(0), minY(0), maxX(0), maxY(0) {}
     AABB(const AABB& o) : minX(o.minX), minY(o.minY), maxX(o.maxX), maxY(o.maxY) {}
+    static AABB fromLTWH(float x, float y, float width, float height)
+    {
+        return {x, y, x + width, y + height};
+    }
 
     AABB(float minX, float minY, float maxX, float maxY) :
         minX(minX), minY(minY), maxX(maxX), maxY(maxY)
diff --git a/src/artboard.cpp b/src/artboard.cpp
index 5de0d90..cee0426 100644
--- a/src/artboard.cpp
+++ b/src/artboard.cpp
@@ -406,7 +406,7 @@
     }
     if (hasDirt(value, ComponentDirt::Path))
     {
-        AABB bg = {-width() * originX(), -height() * originY(), width(), height()};
+        AABB bg = AABB::fromLTWH(-width() * originX(), -height() * originY(), width(), height());
         AABB clip;
         if (m_FrameOrigin)
         {