Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 98e7e1c

Browse files
authored
Unify scale param for path and path component computation. (#40047)
[Impeller] Unify scale param for path and path component computation.
1 parent aad96f8 commit 98e7e1c

File tree

4 files changed

+12
-15
lines changed

4 files changed

+12
-15
lines changed

impeller/geometry/geometry_unittests.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1580,7 +1580,7 @@ TEST(GeometryTest, RectGetPositive) {
15801580

15811581
TEST(GeometryTest, CubicPathComponentPolylineDoesNotIncludePointOne) {
15821582
CubicPathComponent component({10, 10}, {20, 35}, {35, 20}, {40, 40});
1583-
auto polyline = component.CreatePolyline();
1583+
auto polyline = component.CreatePolyline(1.0f);
15841584
ASSERT_NE(polyline.front().x, 10);
15851585
ASSERT_NE(polyline.front().y, 10);
15861586
ASSERT_EQ(polyline.back().x, 40);

impeller/geometry/path.cc

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,6 @@ bool Path::UpdateContourComponentAtIndex(size_t index,
224224

225225
Path::Polyline Path::CreatePolyline(Scalar scale) const {
226226
Polyline polyline;
227-
auto tolerance = kDefaultCurveTolerance / scale;
228227

229228
std::optional<Point> previous_contour_point;
230229
auto collect_points = [&polyline, &previous_contour_point](
@@ -287,11 +286,11 @@ Path::Polyline Path::CreatePolyline(Scalar scale) const {
287286
previous_path_component = &linears_[component.index];
288287
break;
289288
case ComponentType::kQuadratic:
290-
collect_points(quads_[component.index].CreatePolyline(tolerance));
289+
collect_points(quads_[component.index].CreatePolyline(scale));
291290
previous_path_component = &quads_[component.index];
292291
break;
293292
case ComponentType::kCubic:
294-
collect_points(cubics_[component.index].CreatePolyline(tolerance));
293+
collect_points(cubics_[component.index].CreatePolyline(scale));
295294
previous_path_component = &cubics_[component.index];
296295
break;
297296
case ComponentType::kContour:

impeller/geometry/path_component.cc

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -96,15 +96,15 @@ static Scalar ApproximateParabolaIntegral(Scalar x) {
9696
return x / (1.0 - d + sqrt(sqrt(pow(d, 4) + 0.25 * x * x)));
9797
}
9898

99-
std::vector<Point> QuadraticPathComponent::CreatePolyline(
100-
Scalar tolerance) const {
99+
std::vector<Point> QuadraticPathComponent::CreatePolyline(Scalar scale) const {
101100
std::vector<Point> points;
102-
FillPointsForPolyline(points, tolerance);
101+
FillPointsForPolyline(points, scale);
103102
return points;
104103
}
105104

106105
void QuadraticPathComponent::FillPointsForPolyline(std::vector<Point>& points,
107-
Scalar tolerance) const {
106+
Scalar scale_factor) const {
107+
auto tolerance = kDefaultCurveTolerance / scale_factor;
108108
auto sqrt_tolerance = sqrt(tolerance);
109109

110110
auto d01 = cp - p1;
@@ -171,11 +171,11 @@ Point CubicPathComponent::SolveDerivative(Scalar time) const {
171171
};
172172
}
173173

174-
std::vector<Point> CubicPathComponent::CreatePolyline(Scalar tolerance) const {
174+
std::vector<Point> CubicPathComponent::CreatePolyline(Scalar scale) const {
175175
auto quads = ToQuadraticPathComponents(.1);
176176
std::vector<Point> points;
177177
for (const auto& quad : quads) {
178-
quad.FillPointsForPolyline(points, tolerance);
178+
quad.FillPointsForPolyline(points, scale);
179179
}
180180
return points;
181181
}

impeller/geometry/path_component.h

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,10 @@ struct QuadraticPathComponent : public PathComponent {
7676
// making it trivially parallelizable.
7777
//
7878
// See also the implementation in kurbo: https://github.com/linebender/kurbo.
79-
std::vector<Point> CreatePolyline(
80-
Scalar tolerance = kDefaultCurveTolerance) const;
79+
std::vector<Point> CreatePolyline(Scalar scale) const;
8180

8281
void FillPointsForPolyline(std::vector<Point>& points,
83-
Scalar tolerance = kDefaultCurveTolerance) const;
82+
Scalar scale_factor) const;
8483

8584
std::vector<Point> Extrema() const;
8685

@@ -118,8 +117,7 @@ struct CubicPathComponent : public PathComponent {
118117
// generates a polyline from those quadratics.
119118
//
120119
// See the note on QuadraticPathComponent::CreatePolyline for references.
121-
std::vector<Point> CreatePolyline(
122-
Scalar tolerance = kDefaultCurveTolerance) const;
120+
std::vector<Point> CreatePolyline(Scalar scale) const;
123121

124122
std::vector<Point> Extrema() const;
125123

0 commit comments

Comments
 (0)