blob: aabfef4bc77a8dcfc788a939f255e6903cf00264 [file] [log] [blame]
#include "rive/shapes/polygon.hpp"
#include "rive/shapes/star.hpp"
#include "rive/shapes/straight_vertex.hpp"
#include "rive/math/math_types.hpp"
#include <cmath>
using namespace rive;
Polygon::Polygon() {}
Polygon::~Polygon() {}
void Polygon::cornerRadiusChanged() { markPathDirty(); }
void Polygon::pointsChanged() { markPathDirty(); }
std::size_t Polygon::vertexCount() { return points(); }
void Polygon::buildPolygon() {
auto halfWidth = width() / 2;
auto halfHeight = height() / 2;
auto ox = -originX() * width() + halfWidth;
auto oy = -originY() * height() + halfHeight;
auto angle = -math::PI / 2;
auto inc = 2 * -math::PI / points();
for (StraightVertex& vertex : m_PolygonVertices) {
vertex.x(ox + cos(angle) * halfWidth);
vertex.y(oy + sin(angle) * halfHeight);
vertex.radius(cornerRadius());
angle += inc;
}
}
void Polygon::update(ComponentDirt value) {
if (hasDirt(value, ComponentDirt::Path)) {
if (m_PolygonVertices.size() != vertexCount()) {
m_PolygonVertices.resize(vertexCount());
m_Vertices.clear();
for (StraightVertex& vertex : m_PolygonVertices) {
m_Vertices.push_back(&vertex);
}
}
buildPolygon();
}
Super::update(value);
}