Simplify AABB
diff --git a/include/rive/math/aabb.hpp b/include/rive/math/aabb.hpp
index 36bb3e5..16b8a1b 100644
--- a/include/rive/math/aabb.hpp
+++ b/include/rive/math/aabb.hpp
@@ -22,15 +22,9 @@
 
     class AABB {
     public:
-        union {
-            float buffer[4];
-            struct {
-                float minX, minY, maxX, maxY;
-            };
-        };
+        float minX, minY, maxX, maxY;
 
-    public:
-        AABB() : buffer{0} {}
+        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) {}
 
         AABB(float minX, float minY, float maxX, float maxY) :
@@ -45,17 +39,6 @@
         }
         bool operator!=(const AABB& o) const { return !(*this == o); }
 
-        inline const float* values() const { return buffer; }
-
-        float& operator[](std::size_t idx) { return buffer[idx]; }
-        const float& operator[](std::size_t idx) const { return buffer[idx]; }
-
-        static bool contains(const AABB& a, const AABB& b);
-        static bool isValid(const AABB& a);
-        static bool testOverlap(const AABB& a, const AABB& b);
-        static bool areIdentical(const AABB& a, const AABB& b);
-        static void transform(AABB& out, const AABB& a, const Mat2D& matrix);
-
         float left() const { return minX; }
         float top() const { return minY; }
         float right() const { return maxX; }
diff --git a/src/math/aabb.cpp b/src/math/aabb.cpp
index 62db4c4..028e213 100644
--- a/src/math/aabb.cpp
+++ b/src/math/aabb.cpp
@@ -24,47 +24,6 @@
     maxY = B;
 }
 
-bool AABB::contains(const AABB& a, const AABB& b) {
-    return a[0] <= b[0] && a[1] <= b[1] && b[2] <= a[2] && b[3] <= a[3];
-}
-
-bool AABB::isValid(const AABB& a) {
-    float dx = a[2] - a[0];
-    float dy = a[3] - a[1];
-    return dx >= 0.0f && dy >= 0.0f && std::isfinite(a[0]) && std::isfinite(a[1]) &&
-           std::isfinite(a[2]) && std::isfinite(a[3]);
-}
-
-bool AABB::testOverlap(const AABB& a, const AABB& b) {
-    float d1x = b[0] - a[2];
-    float d1y = b[1] - a[3];
-
-    float d2x = a[0] - b[2];
-    float d2y = a[1] - b[3];
-
-    if (d1x > 0.0 || d1y > 0.0) {
-        return false;
-    }
-
-    if (d2x > 0.0 || d2y > 0.0) {
-        return false;
-    }
-
-    return true;
-}
-
-void AABB::transform(AABB& out, const AABB& a, const Mat2D& matrix) {
-    const auto p1 = matrix * Vec2D(a[0], a[1]);
-    const auto p2 = matrix * Vec2D(a[2], a[1]);
-    const auto p3 = matrix * Vec2D(a[2], a[3]);
-    const auto p4 = matrix * Vec2D(a[0], a[3]);
-
-    out[0] = std::fmin(p1[0], std::fmin(p2[0], std::fmin(p3[0], p4[0])));
-    out[1] = std::fmin(p1[1], std::fmin(p2[1], std::fmin(p3[1], p4[1])));
-    out[2] = std::fmax(p1[0], std::fmax(p2[0], std::fmax(p3[0], p4[0])));
-    out[3] = std::fmax(p1[1], std::fmax(p2[1], std::fmax(p3[1], p4[1])));
-}
-
 static inline float graphics_roundf(float x) { return std::floor(x + 0.5f); }
 
 static inline int graphics_round(float x) { return (int)graphics_roundf(x); }
diff --git a/src/renderer.cpp b/src/renderer.cpp
index e41c250..d56657b 100644
--- a/src/renderer.cpp
+++ b/src/renderer.cpp
@@ -4,10 +4,10 @@
 using namespace rive;
 
 Mat2D rive::computeAlignment(Fit fit, Alignment alignment, const AABB& frame, const AABB& content) {
-    float contentWidth = content[2] - content[0];
-    float contentHeight = content[3] - content[1];
-    float x = -content[0] - contentWidth / 2.0 - (alignment.x() * contentWidth / 2.0);
-    float y = -content[1] - contentHeight / 2.0 - (alignment.y() * contentHeight / 2.0);
+    float contentWidth = content.width();
+    float contentHeight = content.height();
+    float x = -content.left() - contentWidth / 2.0 - (alignment.x() * contentWidth / 2.0);
+    float y = -content.top() - contentHeight / 2.0 - (alignment.y() * contentHeight / 2.0);
 
     float scaleX = 1.0, scaleY = 1.0;
 
@@ -52,8 +52,8 @@
     }
 
     Mat2D translation;
-    translation[4] = frame[0] + frame.width() / 2.0 + (alignment.x() * frame.width() / 2.0);
-    translation[5] = frame[1] + frame.height() / 2.0 + (alignment.y() * frame.height() / 2.0);
+    translation[4] = frame.left() + frame.width() / 2.0 + (alignment.x() * frame.width() / 2.0);
+    translation[5] = frame.top() + frame.height() / 2.0 + (alignment.y() * frame.height() / 2.0);
 
     return translation * Mat2D::fromScale(scaleX, scaleY) * Mat2D::fromTranslate(x, y);
 }