blob: 18d491011d90c0cc8d8862dbffdb46d76cfa0621 [file] [log] [blame]
#include "rive/shapes/star.hpp"
#include "rive/shapes/straight_vertex.hpp"
#include <cmath>
#include <cstdio>
using namespace rive;
Star::Star() {}
void Star::innerRadiusChanged() { markPathDirty(); }
std::size_t Star::vertexCount() { return points() * 2; }
void Star::buildPolygon() {
auto halfWidth = width() / 2;
auto halfHeight = height() / 2;
auto innerHalfWidth = width() * innerRadius() / 2;
auto innerHalfHeight = height() * innerRadius() / 2;
auto ox = -originX() * width() + halfWidth;
auto oy = -originY() * height() + halfHeight;
std::size_t length = vertexCount();
auto angle = -M_PI / 2;
auto inc = 2 * M_PI / length;
for (std::size_t i = 0; i < length; i += 2) {
{
StraightVertex& vertex = m_PolygonVertices[i];
vertex.x(ox + cos(angle) * halfWidth);
vertex.y(oy + sin(angle) * halfHeight);
vertex.radius(cornerRadius());
angle += inc;
}
{
StraightVertex& vertex = m_PolygonVertices[i + 1];
vertex.x(ox + cos(angle) * innerHalfWidth);
vertex.y(oy + sin(angle) * innerHalfHeight);
vertex.radius(cornerRadius());
angle += inc;
}
}
}
void Star::update(ComponentDirt value) { Super::update(value); }