#include "shapes/rectangle.hpp"

using namespace rive;

Rectangle::Rectangle()
{
	addVertex(&m_Vertex1);
	addVertex(&m_Vertex2);
	addVertex(&m_Vertex3);
	addVertex(&m_Vertex4);
}

void Rectangle::cornerRadiusTLChanged() { markPathDirty(); }
void Rectangle::cornerRadiusTRChanged() { markPathDirty(); }
void Rectangle::cornerRadiusBLChanged() { markPathDirty(); }
void Rectangle::cornerRadiusBRChanged() { markPathDirty(); }

void Rectangle::update(ComponentDirt value)
{
	if (hasDirt(value, ComponentDirt::Path))
	{
		auto radius = cornerRadiusTL();
		auto link = linkCornerRadius();

		auto ox = -originX() * width();
		auto oy = -originY() * height();

		m_Vertex1.x(ox);
		m_Vertex1.y(oy);
		m_Vertex1.radius(radius);

		m_Vertex2.x(ox + width());
		m_Vertex2.y(oy);
		m_Vertex2.radius(link ? radius : cornerRadiusTR());

		m_Vertex3.x(ox + width());
		m_Vertex3.y(oy + height());
		m_Vertex3.radius(link ? radius : cornerRadiusBR());

		m_Vertex4.x(ox);
		m_Vertex4.y(oy + height());
		m_Vertex4.radius(link ? radius : cornerRadiusBL());
	}

	Super::update(value);
}