diff --git a/assets/main.rml b/assets/main.rml
index 94a43ac..fa19728 100644
--- a/assets/main.rml
+++ b/assets/main.rml
@@ -5,5 +5,7 @@
Hello from RmlUi
+
+
diff --git a/readme.md b/readme.md
index be0a0a3..2af3ca0 100644
--- a/readme.md
+++ b/readme.md
@@ -8,7 +8,7 @@ I originally began creating this for a Game Jam project where I got the basic re
*Rendering features (from the RmlUi render interfface documentation https://mikke89.github.io/RmlUiDoc/pages/cpp_manual/interfaces/render.html#feature-table):*
- [x] Basic rendering
- [ ] Clip Mask
-- [ ] Transforms
+- [x] Transforms
- [ ] Layers
- [ ] Render textures
- [ ] Mask images
diff --git a/src/backend/RaylibRenderInterface.cpp b/src/backend/RaylibRenderInterface.cpp
index affb2bb..90b5c7c 100644
--- a/src/backend/RaylibRenderInterface.cpp
+++ b/src/backend/RaylibRenderInterface.cpp
@@ -39,6 +39,10 @@ void RaylibRenderInterface::RenderGeometry(Rml::CompiledGeometryHandle handle,
rlPushMatrix();
rlTranslatef(translation.x, translation.y, 0.0f);
+ if (has_transform) {
+ rlMultMatrixf(current_transform.data());
+ }
+
rlBegin(RL_TRIANGLES);
for (size_t i = 0; i + 2 < geo->indices.size(); i += 3) {
for (int j = 0; j < 3; ++j) {
@@ -113,4 +117,13 @@ void RaylibRenderInterface::SetScissorRegion(Rml::Rectanglei region) {
void RaylibRenderInterface::ApplyScissor() {
BeginScissorMode(scissor_region.Left(), scissor_region.Top(),
scissor_region.Width(), scissor_region.Height());
-}
\ No newline at end of file
+}
+
+void RaylibRenderInterface::SetTransform(const Rml::Matrix4f *transform) {
+ if (transform) {
+ has_transform = true;
+ current_transform = *transform;
+ } else {
+ has_transform = false;
+ }
+}
diff --git a/src/backend/RaylibRenderInterface.h b/src/backend/RaylibRenderInterface.h
index 7253348..45de261 100644
--- a/src/backend/RaylibRenderInterface.h
+++ b/src/backend/RaylibRenderInterface.h
@@ -30,9 +30,14 @@ public:
void EnableScissorRegion(bool enable) override;
void SetScissorRegion(Rml::Rectanglei region) override;
+ void SetTransform(const Rml::Matrix4f *transform) override;
+
private:
void ApplyScissor();
bool scissor_enabled = false;
Rml::Rectanglei scissor_region;
-};
\ No newline at end of file
+
+ bool has_transform = false;
+ Rml::Matrix4f current_transform;
+};
diff --git a/src/main.cpp b/src/main.cpp
index cef6dfc..cd28cee 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -50,6 +50,8 @@ int main() {
}
CloseWindow();
+ Rml::Debugger::Shutdown();
+ Rml::Shutdown();
return 0;
}