#include "rive/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);
}