blob: ed047186a49a9a76717c384b5f483999d304ad9b [file] [log] [blame]
#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;
}