| /* | |
| * Copyright 2022 Rive | |
| */ | |
| #ifndef _RIVE_RAW_PATH_HPP_ | |
| #define _RIVE_RAW_PATH_HPP_ | |
| #include "rive/span.hpp" | |
| #include "rive/math/aabb.hpp" | |
| #include "rive/math/mat2d.hpp" | |
| #include "rive/math/path_types.hpp" | |
| #include "rive/math/vec2d.hpp" | |
| #include <cmath> | |
| #include <stdio.h> | |
| #include <cstdint> | |
| #include <vector> | |
| namespace rive { | |
| class RawPath { | |
| public: | |
| std::vector<Vec2D> m_Points; | |
| std::vector<PathVerb> m_Verbs; | |
| RawPath() {} | |
| ~RawPath() {} | |
| bool empty() const { return m_Points.empty(); } | |
| AABB bounds() const; | |
| void move(Vec2D); | |
| void line(Vec2D); | |
| void quad(Vec2D, Vec2D); | |
| void cubic(Vec2D, Vec2D, Vec2D); | |
| void close(); | |
| RawPath transform(const Mat2D&) const; | |
| void transformInPlace(const Mat2D&); | |
| Span<const Vec2D> points() const { return toSpan(m_Points); } | |
| Span<Vec2D> points() { return toSpan(m_Points); } | |
| Span<const PathVerb> verbs() const { return toSpan(m_Verbs); } | |
| Span<PathVerb> verbs() { return toSpan(m_Verbs); } | |
| // Syntactic sugar for x,y -vs- vec2d | |
| void moveTo(float x, float y) { move({x, y}); } | |
| void lineTo(float x, float y) { line({x, y}); } | |
| void quadTo(float x, float y, float x1, float y1) { quad({x, y}, {x1, y1}); } | |
| void cubicTo(float x, float y, float x1, float y1, float x2, float y2) { | |
| cubic({x, y}, {x1, y1}, {x2, y2}); | |
| } | |
| // Helpers for adding new contours | |
| void addRect(const AABB&, PathDirection = PathDirection::cw); | |
| void addOval(const AABB&, PathDirection = PathDirection::cw); | |
| void addPoly(Span<const Vec2D>, bool isClosed); | |
| }; | |
| } // namespace rive | |
| #endif |