|  | #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); | 
|  | } |