#include "shapes/path_vertex.hpp"
#include "shapes/path.hpp"

using namespace rive;

Vec2D PathVertex::renderTranslation()
{
	if (hasWeight())
	{
		return m_Weight->translation();
	}
	return Vec2D(x(), y());
}

StatusCode PathVertex::onAddedDirty(CoreContext* context)
{
	StatusCode code = Super::onAddedDirty(context);
	if (code != StatusCode::Ok)
	{
		return code;
	}
	if (!parent()->is<Path>())
	{
		return StatusCode::MissingObject;
	}
	parent()->as<Path>()->addVertex(this);
	return StatusCode::Ok;
}

void PathVertex::markPathDirty()
{
	if (parent() == nullptr)
	{
		// This is an acceptable condition as the parametric paths create points
		// that are not part of the core context.
		return;
	}
	parent()->as<Path>()->markPathDirty();
}

void PathVertex::xChanged() { markPathDirty(); }
void PathVertex::yChanged() { markPathDirty(); }

void PathVertex::deform(Mat2D& worldTransform, float* boneTransforms)
{
	Weight::deform(x(),
	               y(),
	               m_Weight->indices(),
	               m_Weight->values(),
	               worldTransform,
	               boneTransforms,
	               m_Weight->translation());
}