| #include "rive/constraints/constraint.hpp" |
| #include "rive/container_component.hpp" |
| #include "rive/transform_component.hpp" |
| #include "rive/core_context.hpp" |
| #include "rive/math/mat2d.hpp" |
| |
| using namespace rive; |
| |
| StatusCode Constraint::onAddedClean(CoreContext* context) { |
| if (!parent()->is<TransformComponent>()) { |
| return StatusCode::InvalidObject; |
| } |
| |
| parent()->as<TransformComponent>()->addConstraint(this); |
| |
| return StatusCode::Ok; |
| } |
| |
| void Constraint::markConstraintDirty() { |
| parent()->as<TransformComponent>()->markTransformDirty(); |
| } |
| |
| void Constraint::strengthChanged() { markConstraintDirty(); } |
| |
| void Constraint::buildDependencies() { |
| 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(); |
| } |
| |
| static Mat2D identity; |
| const Mat2D& rive::getParentWorld(const TransformComponent& component) { |
| auto parent = component.parent(); |
| if (parent->is<WorldTransformComponent>()) { |
| return parent->as<WorldTransformComponent>()->worldTransform(); |
| } |
| return identity; |
| } |