Fix from rive-app/rive#2965
diff --git a/include/constraints/constraint.hpp b/include/constraints/constraint.hpp
index ae330ac..e8427b1 100644
--- a/include/constraints/constraint.hpp
+++ b/include/constraints/constraint.hpp
@@ -13,6 +13,7 @@
 		virtual void markConstraintDirty();
 		virtual void constrain(TransformComponent* component) = 0;
 		void buildDependencies() override;
+		void onDirty(ComponentDirt dirt) override;
 	};
 } // namespace rive
 
diff --git a/src/constraints/constraint.cpp b/src/constraints/constraint.cpp
index 9da89eb..cd32ec6 100644
--- a/src/constraints/constraint.cpp
+++ b/src/constraints/constraint.cpp
@@ -28,4 +28,11 @@
 {
 	Super::buildDependencies();
 	parent()->addDependent(this);
+}
+
+void Constraint::onDirty(ComponentDirt dirt)
+{
+	// Whenever the constraint gets any dirt, make sure to mark the constrained
+	// component dirty.
+	markConstraintDirty();
 }
\ No newline at end of file