| #include "rive/shapes/ellipse.hpp" | |
| #include "rive/component_dirt.hpp" | |
| #include "rive/math/circle_constant.hpp" | |
| using namespace rive; | |
| Ellipse::Ellipse() | |
| { | |
| addVertex(&m_Vertex1); | |
| addVertex(&m_Vertex2); | |
| addVertex(&m_Vertex3); | |
| addVertex(&m_Vertex4); | |
| } | |
| void Ellipse::update(ComponentDirt value) | |
| { | |
| if (hasDirt(value, ComponentDirt::Path)) | |
| { | |
| auto radiusX = width() / 2.0f; | |
| auto radiusY = height() / 2.0f; | |
| auto ox = -originX() * width() + radiusX; | |
| auto oy = -originY() * height() + radiusY; | |
| m_Vertex1.x(ox); | |
| m_Vertex1.y(oy - radiusY); | |
| m_Vertex1.inPoint(Vec2D(ox - radiusX * circleConstant, oy - radiusY)); | |
| m_Vertex1.outPoint(Vec2D(ox + radiusX * circleConstant, oy - radiusY)); | |
| m_Vertex2.x(ox + radiusX); | |
| m_Vertex2.y(oy); | |
| m_Vertex2.inPoint(Vec2D(ox + radiusX, oy + circleConstant * -radiusY)); | |
| m_Vertex2.outPoint(Vec2D(ox + radiusX, oy + circleConstant * radiusY)); | |
| m_Vertex3.x(ox); | |
| m_Vertex3.y(oy + radiusY); | |
| m_Vertex3.inPoint(Vec2D(ox + radiusX * circleConstant, oy + radiusY)); | |
| m_Vertex3.outPoint(Vec2D(ox - radiusX * circleConstant, oy + radiusY)); | |
| m_Vertex4.x(ox - radiusX); | |
| m_Vertex4.y(oy); | |
| m_Vertex4.inPoint(Vec2D(ox - radiusX, oy + radiusY * circleConstant)); | |
| m_Vertex4.outPoint(Vec2D(ox - radiusX, oy - radiusY * circleConstant)); | |
| } | |
| Super::update(value); | |
| } |