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));
}