Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
path.cc
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
8#include "third_party/skia/include/core/SkPathBuilder.h"
9#include "third_party/skia/include/core/SkString.h"
10#include "third_party/skia/include/pathops/SkPathOps.h"
11#include "third_party/skia/include/utils/SkParsePath.h"
12
13SKWASM_EXPORT SkPathBuilder* path_create() {
15 return new SkPathBuilder();
16}
17
18SKWASM_EXPORT void path_dispose(SkPathBuilder* path) {
20 delete path;
21}
22
23SKWASM_EXPORT SkPathBuilder* path_copy(SkPathBuilder* path) {
25 return new SkPathBuilder(path->snapshot());
26}
27
28SKWASM_EXPORT void path_setFillType(SkPathBuilder* path,
29 SkPathFillType fill_type) {
30 path->setFillType(fill_type);
31}
32
33SKWASM_EXPORT SkPathFillType path_getFillType(SkPathBuilder* path) {
34 return path->fillType();
35}
36
37SKWASM_EXPORT void path_moveTo(SkPathBuilder* path, SkScalar x, SkScalar y) {
38 path->moveTo({x, y});
39}
40
41SKWASM_EXPORT void path_relativeMoveTo(SkPathBuilder* path,
42 SkScalar x,
43 SkScalar y) {
44 path->rMoveTo({x, y});
45}
46
47SKWASM_EXPORT void path_lineTo(SkPathBuilder* path, SkScalar x, SkScalar y) {
48 path->lineTo({x, y});
49}
50
51SKWASM_EXPORT void path_relativeLineTo(SkPathBuilder* path,
52 SkScalar x,
53 SkScalar y) {
54 path->rLineTo({x, y});
55}
56
57SKWASM_EXPORT void path_quadraticBezierTo(SkPathBuilder* path,
58 SkScalar x1,
59 SkScalar y1,
60 SkScalar x2,
61 SkScalar y2) {
62 path->quadTo({x1, y1}, {x2, y2});
63}
64
66 SkScalar x1,
67 SkScalar y1,
68 SkScalar x2,
69 SkScalar y2) {
70 path->rQuadTo({x1, y1}, {x2, y2});
71}
72
73SKWASM_EXPORT void path_cubicTo(SkPathBuilder* path,
74 SkScalar x1,
75 SkScalar y1,
76 SkScalar x2,
77 SkScalar y2,
78 SkScalar x3,
79 SkScalar y3) {
80 path->cubicTo({x1, y1}, {x2, y2}, {x3, y3});
81}
82
83SKWASM_EXPORT void path_relativeCubicTo(SkPathBuilder* path,
84 SkScalar x1,
85 SkScalar y1,
86 SkScalar x2,
87 SkScalar y2,
88 SkScalar x3,
89 SkScalar y3) {
90 path->rCubicTo({x1, y1}, {x2, y2}, {x3, y3});
91}
92
93SKWASM_EXPORT void path_conicTo(SkPathBuilder* path,
94 SkScalar x1,
95 SkScalar y1,
96 SkScalar x2,
97 SkScalar y2,
98 SkScalar w) {
99 path->conicTo({x1, y1}, {x2, y2}, w);
100}
101
102SKWASM_EXPORT void path_relativeConicTo(SkPathBuilder* path,
103 SkScalar x1,
104 SkScalar y1,
105 SkScalar x2,
106 SkScalar y2,
107 SkScalar w) {
108 path->rConicTo({x1, y1}, {x2, y2}, w);
109}
110
111SKWASM_EXPORT void path_arcToOval(SkPathBuilder* path,
112 const SkRect* rect,
113 SkScalar start_angle,
114 SkScalar sweep_angle,
115 bool force_move_to) {
116 path->arcTo(*rect, start_angle, sweep_angle, force_move_to);
117}
118
119SKWASM_EXPORT void path_arcToRotated(SkPathBuilder* path,
120 SkScalar rx,
121 SkScalar ry,
122 SkScalar x_axis_rotate,
123 SkPathBuilder::ArcSize arc_size,
124 SkPathDirection path_direction,
125 SkScalar x,
126 SkScalar y) {
127 path->arcTo({rx, ry}, x_axis_rotate, arc_size, path_direction, {x, y});
128}
129
131 SkScalar rx,
132 SkScalar ry,
133 SkScalar x_axis_rotate,
134 SkPathBuilder::ArcSize arc_size,
135 SkPathDirection path_direction,
136 SkScalar x,
137 SkScalar y) {
138 path->rArcTo({rx, ry}, x_axis_rotate, arc_size, path_direction, {x, y});
139}
140
141SKWASM_EXPORT void path_addRect(SkPathBuilder* path, const SkRect* rect) {
142 path->addRect(*rect);
143}
144
145SKWASM_EXPORT void path_addOval(SkPathBuilder* path, const SkRect* oval) {
146 path->addOval(*oval, SkPathDirection::kCW, 1);
147}
148
149SKWASM_EXPORT void path_addArc(SkPathBuilder* path,
150 const SkRect* oval,
151 SkScalar start_angle,
152 SkScalar sweep_angle) {
153 path->addArc(*oval, start_angle, sweep_angle);
154}
155
156SKWASM_EXPORT void path_addPolygon(SkPathBuilder* path,
157 const SkPoint* points,
158 int count,
159 bool close) {
160 path->addPolygon({points, count}, close);
161}
162
163SKWASM_EXPORT void path_addRRect(SkPathBuilder* path,
164 const SkScalar* rrect_values) {
165 path->addRRect(Skwasm::CreateSkRRect(rrect_values), SkPathDirection::kCW);
166}
167
168SKWASM_EXPORT void path_addPath(SkPathBuilder* path,
169 const SkPathBuilder* other,
170 const SkScalar* matrix_33,
171 SkPath::AddPathMode extend_path) {
172 path->addPath(other->snapshot(), Skwasm::CreateSkMatrix(matrix_33),
173 extend_path);
174}
175
176SKWASM_EXPORT void path_close(SkPathBuilder* path) {
177 path->close();
178}
179
180SKWASM_EXPORT void path_reset(SkPathBuilder* path) {
181 path->reset();
182}
183
184SKWASM_EXPORT bool path_contains(SkPathBuilder* path, SkScalar x, SkScalar y) {
185 return path->contains({x, y});
186}
187
188SKWASM_EXPORT void path_transform(SkPathBuilder* path,
189 const SkScalar* matrix_33) {
190 path->transform(Skwasm::CreateSkMatrix(matrix_33));
191}
192
193SKWASM_EXPORT void path_getBounds(SkPathBuilder* path, SkRect* rect) {
194 *rect = path->computeFiniteBounds().value_or(SkRect());
195}
196
197SKWASM_EXPORT SkPathBuilder* path_combine(SkPathOp operation,
198 const SkPathBuilder* path1,
199 const SkPathBuilder* path2) {
200 if (auto result = Op(path1->snapshot(), path2->snapshot(), operation)) {
202 SkPathBuilder* output = new SkPathBuilder(result.value());
203 output->setFillType(path1->fillType());
204 return output;
205 } else {
206 return nullptr;
207 }
208}
209
210SKWASM_EXPORT SkString* path_getSvgString(SkPathBuilder* path) {
212 SkString* string = new SkString(SkParsePath::ToSVGString(path->snapshot()));
213 return string;
214}
int32_t x
double y
uint32_t live_string_count
SkRRect CreateSkRRect(const SkScalar *f)
Definition helpers.h:66
uint32_t live_path_count
SkMatrix CreateSkMatrix(const SkScalar *f)
Definition helpers.h:40
#define SKWASM_EXPORT
Definition export.h:10
SKWASM_EXPORT SkPathBuilder * path_create()
Definition path.cc:13
SKWASM_EXPORT void path_relativeArcToRotated(SkPathBuilder *path, SkScalar rx, SkScalar ry, SkScalar x_axis_rotate, SkPathBuilder::ArcSize arc_size, SkPathDirection path_direction, SkScalar x, SkScalar y)
Definition path.cc:130
SKWASM_EXPORT void path_addOval(SkPathBuilder *path, const SkRect *oval)
Definition path.cc:145
SKWASM_EXPORT void path_dispose(SkPathBuilder *path)
Definition path.cc:18
SKWASM_EXPORT void path_relativeConicTo(SkPathBuilder *path, SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, SkScalar w)
Definition path.cc:102
SKWASM_EXPORT void path_addPath(SkPathBuilder *path, const SkPathBuilder *other, const SkScalar *matrix_33, SkPath::AddPathMode extend_path)
Definition path.cc:168
SKWASM_EXPORT void path_addRRect(SkPathBuilder *path, const SkScalar *rrect_values)
Definition path.cc:163
SKWASM_EXPORT SkPathBuilder * path_copy(SkPathBuilder *path)
Definition path.cc:23
SKWASM_EXPORT void path_getBounds(SkPathBuilder *path, SkRect *rect)
Definition path.cc:193
SKWASM_EXPORT void path_conicTo(SkPathBuilder *path, SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, SkScalar w)
Definition path.cc:93
SKWASM_EXPORT void path_moveTo(SkPathBuilder *path, SkScalar x, SkScalar y)
Definition path.cc:37
SKWASM_EXPORT void path_quadraticBezierTo(SkPathBuilder *path, SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2)
Definition path.cc:57
SKWASM_EXPORT void path_close(SkPathBuilder *path)
Definition path.cc:176
SKWASM_EXPORT SkPathFillType path_getFillType(SkPathBuilder *path)
Definition path.cc:33
SKWASM_EXPORT void path_addPolygon(SkPathBuilder *path, const SkPoint *points, int count, bool close)
Definition path.cc:156
SKWASM_EXPORT SkPathBuilder * path_combine(SkPathOp operation, const SkPathBuilder *path1, const SkPathBuilder *path2)
Definition path.cc:197
SKWASM_EXPORT void path_addArc(SkPathBuilder *path, const SkRect *oval, SkScalar start_angle, SkScalar sweep_angle)
Definition path.cc:149
SKWASM_EXPORT void path_transform(SkPathBuilder *path, const SkScalar *matrix_33)
Definition path.cc:188
SKWASM_EXPORT void path_arcToRotated(SkPathBuilder *path, SkScalar rx, SkScalar ry, SkScalar x_axis_rotate, SkPathBuilder::ArcSize arc_size, SkPathDirection path_direction, SkScalar x, SkScalar y)
Definition path.cc:119
SKWASM_EXPORT void path_setFillType(SkPathBuilder *path, SkPathFillType fill_type)
Definition path.cc:28
SKWASM_EXPORT void path_reset(SkPathBuilder *path)
Definition path.cc:180
SKWASM_EXPORT SkString * path_getSvgString(SkPathBuilder *path)
Definition path.cc:210
SKWASM_EXPORT void path_arcToOval(SkPathBuilder *path, const SkRect *rect, SkScalar start_angle, SkScalar sweep_angle, bool force_move_to)
Definition path.cc:111
SKWASM_EXPORT void path_relativeQuadraticBezierTo(SkPathBuilder *path, SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2)
Definition path.cc:65
SKWASM_EXPORT void path_relativeMoveTo(SkPathBuilder *path, SkScalar x, SkScalar y)
Definition path.cc:41
SKWASM_EXPORT void path_cubicTo(SkPathBuilder *path, SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, SkScalar x3, SkScalar y3)
Definition path.cc:73
SKWASM_EXPORT void path_addRect(SkPathBuilder *path, const SkRect *rect)
Definition path.cc:141
SKWASM_EXPORT void path_relativeLineTo(SkPathBuilder *path, SkScalar x, SkScalar y)
Definition path.cc:51
SKWASM_EXPORT void path_relativeCubicTo(SkPathBuilder *path, SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, SkScalar x3, SkScalar y3)
Definition path.cc:83
SKWASM_EXPORT bool path_contains(SkPathBuilder *path, SkScalar x, SkScalar y)
Definition path.cc:184
SKWASM_EXPORT void path_lineTo(SkPathBuilder *path, SkScalar x, SkScalar y)
Definition path.cc:47
std::vector< Point > points