Move computeAlignment off of Renderer
diff --git a/include/rive/renderer.hpp b/include/rive/renderer.hpp
index 9bcb3ee..affe81f 100644
--- a/include/rive/renderer.hpp
+++ b/include/rive/renderer.hpp
@@ -19,6 +19,9 @@
 namespace rive {
     class Vec2D;
 
+    // Helper that computes a matrix to "align" content (source) to fit inside frame (destination).
+    Mat2D computeAlignment(Fit, Alignment, const AABB& frame, const AABB& content);
+
     // A render buffer holds an immutable array of values
     class RenderBuffer : public RefCnt {
         const size_t m_Count;
@@ -139,13 +142,9 @@
         void scale(float sx, float sy);
         void rotate(float radians);
 
-        void computeAlignment(Mat2D& result,
-                              Fit fit,
-                              const Alignment& alignment,
-                              const AABB& frame,
-                              const AABB& content);
-
-        void align(Fit fit, const Alignment& alignment, const AABB& frame, const AABB& content);
+        void align(Fit fit, Alignment alignment, const AABB& frame, const AABB& content) {
+            transform(computeAlignment(fit, alignment, frame, content));
+        }
     };
 
     // Returns a full-formed RenderPath -- can be treated as immutable
diff --git a/skia/viewer/src/main.cpp b/skia/viewer/src/main.cpp
index e297964..eb2e6e2 100644
--- a/skia/viewer/src/main.cpp
+++ b/skia/viewer/src/main.cpp
@@ -280,12 +280,10 @@
             rive::SkiaRenderer renderer(canvas);
             renderer.save();
 
-            rive::Mat2D viewTransform;
-            renderer.computeAlignment(viewTransform,
-                                      rive::Fit::contain,
-                                      rive::Alignment::center,
-                                      rive::AABB(0, 0, width, height),
-                                      artboardInstance->bounds());
+            auto viewTransform = rive::computeAlignment(rive::Fit::contain,
+                                                        rive::Alignment::center,
+                                                        rive::AABB(0, 0, width, height),
+                                                        artboardInstance->bounds());
             renderer.transform(viewTransform);
             // Store the inverse view so we can later go from screen to world.
             rive::Mat2D::invert(gInverseViewTransform, viewTransform);
diff --git a/src/renderer.cpp b/src/renderer.cpp
index fc961a2..e41c250 100644
--- a/src/renderer.cpp
+++ b/src/renderer.cpp
@@ -3,18 +3,7 @@
 
 using namespace rive;
 
-void Renderer::translate(float tx, float ty) { this->transform(Mat2D(1, 0, 0, 1, tx, ty)); }
-
-void Renderer::scale(float sx, float sy) { this->transform(Mat2D(sx, 0, 0, sy, 0, 0)); }
-
-void Renderer::rotate(float radians) {
-    const float s = std::sin(radians);
-    const float c = std::cos(radians);
-    this->transform(Mat2D(c, s, -s, c, 0, 0));
-}
-
-void Renderer::computeAlignment(
-    Mat2D& result, Fit fit, const Alignment& alignment, const AABB& frame, const AABB& content) {
+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);
@@ -66,11 +55,15 @@
     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);
 
-    result = translation * Mat2D::fromScale(scaleX, scaleY) * Mat2D::fromTranslate(x, y);
+    return translation * Mat2D::fromScale(scaleX, scaleY) * Mat2D::fromTranslate(x, y);
 }
 
-void Renderer::align(Fit fit, const Alignment& alignment, const AABB& frame, const AABB& content) {
-    Mat2D result;
-    computeAlignment(result, fit, alignment, frame, content);
-    transform(result);
+void Renderer::translate(float tx, float ty) { this->transform(Mat2D(1, 0, 0, 1, tx, ty)); }
+
+void Renderer::scale(float sx, float sy) { this->transform(Mat2D(sx, 0, 0, sy, 0, 0)); }
+
+void Renderer::rotate(float radians) {
+    const float s = std::sin(radians);
+    const float c = std::cos(radians);
+    this->transform(Mat2D(c, s, -s, c, 0, 0));
 }