5#ifndef FLUTTER_IMPELLER_GEOMETRY_PATH_H_
6#define FLUTTER_IMPELLER_GEOMETRY_PATH_H_
122 size_t contour_index)
const;
141 using Applier = std::function<void(
size_t index,
const T& component)>;
168 std::make_unique<std::vector<Point>>(),
178 struct ComponentIndexPair {
182 ComponentIndexPair() {}
185 :
type(a_type), index(a_index) {}
200 Data(Data&& other) =
default;
202 Data(
const Data& other) =
default;
208 std::vector<ComponentIndexPair> components;
209 std::vector<Point> points;
210 std::vector<ContourComponent> contours;
212 std::optional<Rect>
bounds;
215 explicit Path(Data data);
217 std::shared_ptr<const Data> data_;
220static_assert(
sizeof(
Path) ==
sizeof(std::shared_ptr<struct Anonymous>));
Paths are lightweight objects that describe a collection of linear, quadratic, or cubic segments....
FillType GetFillType() const
size_t GetComponentCount(std::optional< ComponentType > type={}) const
bool GetContourComponentAtIndex(size_t index, ContourComponent &contour) const
void EnumerateComponents(const Applier< LinearPathComponent > &linear_applier, const Applier< QuadraticPathComponent > &quad_applier, const Applier< CubicPathComponent > &cubic_applier, const Applier< ContourComponent > &contour_applier) const
std::optional< Rect > GetTransformedBoundingBox(const Matrix &transform) const
std::function< void(size_t index, const T &component)> Applier
bool GetLinearComponentAtIndex(size_t index, LinearPathComponent &linear) const
bool GetQuadraticComponentAtIndex(size_t index, QuadraticPathComponent &quadratic) const
bool GetCubicComponentAtIndex(size_t index, CubicPathComponent &cubic) const
Polyline CreatePolyline(Scalar scale, Polyline::PointBufferPtr point_buffer=std::make_unique< std::vector< Point > >(), Polyline::ReclaimPointBufferCallback reclaim=nullptr) const
std::optional< Rect > GetBoundingBox() const
Optional< SkRect > bounds
struct PathData * Data(SkPath *path)
@ kRound
Points are drawn as squares.
@ kSquare
Points are drawn as circles.
static SkColor4f transform(SkColor4f c, SkColorSpace *src, SkColorSpace *dst)
A 4x4 matrix using column-major storage.
size_t component_start_index
Vector2 start_direction
The direction of the contour's start cap.
size_t start_index
Index that denotes the first point of this contour.
std::vector< Component > components
Vector2 end_direction
The direction of the contour's end cap.
std::vector< PolylineContour > contours
Point & GetPoint(size_t index) const
std::function< void(PointBufferPtr)> ReclaimPointBufferCallback
std::unique_ptr< std::vector< Point > > PointBufferPtr
std::tuple< size_t, size_t > GetContourPointBounds(size_t contour_index) const
static sk_sp< SkShader > linear(sk_sp< SkShader > shader)