| #ifndef _RIVE_COMMAND_PATH_HPP_ |
| #define _RIVE_COMMAND_PATH_HPP_ |
| |
| #include "rive/math/mat2d.hpp" |
| #include "rive/math/path_types.hpp" |
| |
| namespace rive { |
| class RenderPath; |
| |
| /// Abstract path used to build up commands used for rendering. |
| class CommandPath { |
| public: |
| virtual ~CommandPath() {} |
| virtual void reset() = 0; |
| virtual void fillRule(FillRule value) = 0; |
| virtual void addPath(CommandPath* path, const Mat2D& transform) = 0; |
| |
| virtual void moveTo(float x, float y) = 0; |
| virtual void lineTo(float x, float y) = 0; |
| virtual void cubicTo(float ox, float oy, float ix, float iy, float x, float y) = 0; |
| virtual void close() = 0; |
| |
| virtual RenderPath* renderPath() = 0; |
| |
| // non-virtual helpers |
| |
| void addRect(float x, float y, float width, float height) { |
| moveTo(x, y); |
| lineTo(x + width, y); |
| lineTo(x + width, y + height); |
| lineTo(x, y + height); |
| close(); |
| } |
| |
| void move(Vec2D v) { this->moveTo(v.x(), v.y()); } |
| void line(Vec2D v) { this->lineTo(v.x(), v.y()); } |
| void cubic(Vec2D a, Vec2D b, Vec2D c) { |
| this->cubicTo(a.x(), a.y(), b.x(), b.y(), c.x(), c.y()); |
| } |
| }; |
| } // namespace rive |
| #endif |