#include "rive/transform_component.hpp"
#include "rive/shapes/clipping_shape.hpp"
#include "rive/math/vec2d.hpp"
#include "rive/constraints/constraint.hpp"

using namespace rive;

float WorldTransformComponent::childOpacity() { return opacity(); }

void WorldTransformComponent::markWorldTransformDirty()
{
	addDirt(ComponentDirt::WorldTransform, true);
}

const Mat2D& WorldTransformComponent::worldTransform() const
{
	return m_WorldTransform;
}

Mat2D& WorldTransformComponent::mutableWorldTransform()
{
	return m_WorldTransform;
}

void WorldTransformComponent::opacityChanged()
{
	addDirt(ComponentDirt::RenderOpacity, true);
}

void WorldTransformComponent::worldTranslation(Vec2D& result) const
{
	result[0] = m_WorldTransform[4];
	result[1] = m_WorldTransform[5];
}
