Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 4304411

Browse files
authored
Fix lerp to eccentric circle. (#108743)
1 parent 7f7854f commit 4304411

File tree

3 files changed

+9
-2
lines changed

3 files changed

+9
-2
lines changed

dev/manual_tests/lib/star_border.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -501,9 +501,9 @@ ShapeBorder? lerpBorder(StarBorder border, LerpTarget target, double t, {bool to
501501
switch (target) {
502502
case LerpTarget.circle:
503503
if (to) {
504-
return border.lerpTo(const CircleBorder(side: lerpToBorder), t);
504+
return border.lerpTo(const CircleBorder(side: lerpToBorder, eccentricity: 0.5), t);
505505
} else {
506-
return border.lerpFrom(const CircleBorder(side: lerpToBorder), t);
506+
return border.lerpFrom(const CircleBorder(side: lerpToBorder, eccentricity: 0.5), t);
507507
}
508508
case LerpTarget.roundedRect:
509509
if (to) {

packages/flutter/lib/src/painting/star_border.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ class StarBorder extends OutlinedBorder {
232232
return StarBorder(
233233
side: BorderSide.lerp(a.side, side, t),
234234
points: lerpedPoints,
235+
squash: ui.lerpDouble(a.eccentricity, squash, t)!,
235236
rotation: rotation,
236237
innerRadiusRatio: ui.lerpDouble(math.cos(math.pi / lerpedPoints), innerRadiusRatio, t)!,
237238
pointRounding: ui.lerpDouble(1.0, pointRounding, t)!,
@@ -244,6 +245,7 @@ class StarBorder extends OutlinedBorder {
244245
return StarBorder(
245246
side: BorderSide.lerp(a.side, side, t),
246247
points: lerpedPoints,
248+
squash: ui.lerpDouble(a.eccentricity, squash, t)!,
247249
rotation: rotation,
248250
innerRadiusRatio: ui.lerpDouble(1, innerRadiusRatio, t)!,
249251
pointRounding: ui.lerpDouble(0.5, pointRounding, t)!,
@@ -312,6 +314,7 @@ class StarBorder extends OutlinedBorder {
312314
return StarBorder(
313315
side: BorderSide.lerp(side, b.side, t),
314316
points: lerpedPoints,
317+
squash: ui.lerpDouble(squash, b.eccentricity, t)!,
315318
rotation: rotation,
316319
innerRadiusRatio: ui.lerpDouble(innerRadiusRatio, math.cos(math.pi / lerpedPoints), t)!,
317320
pointRounding: ui.lerpDouble(pointRounding, 1.0, t)!,
@@ -322,6 +325,7 @@ class StarBorder extends OutlinedBorder {
322325
return StarBorder(
323326
side: BorderSide.lerp(side, b.side, t),
324327
points: lerpedPoints,
328+
squash: ui.lerpDouble(squash, b.eccentricity, t)!,
325329
rotation: rotation,
326330
innerRadiusRatio: ui.lerpDouble(innerRadiusRatio, 1, t)!,
327331
pointRounding: ui.lerpDouble(pointRounding, 0.5, t)!,

packages/flutter/test/painting/star_border_test.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,12 +152,15 @@ void main() {
152152
testWidgets('StarBorder lerped with CircleBorder', (WidgetTester tester) async {
153153
const StarBorder from = StarBorder();
154154
const ShapeBorder otherBorder = CircleBorder();
155+
const ShapeBorder eccentricCircle = CircleBorder(eccentricity: 0.6);
155156
await testBorder(tester, 'to_circle_border_2', from, lerpTo: otherBorder, lerpAmount: 0.2);
156157
await testBorder(tester, 'to_circle_border_7', from, lerpTo: otherBorder, lerpAmount: 0.7);
157158
await testBorder(tester, 'to_circle_border_10', from, lerpTo: otherBorder, lerpAmount: 1.0);
158159
await testBorder(tester, 'from_circle_border_2', from, lerpFrom: otherBorder, lerpAmount: 0.2);
159160
await testBorder(tester, 'from_circle_border_7', from, lerpFrom: otherBorder, lerpAmount: 0.7);
160161
await testBorder(tester, 'from_circle_border_10', from, lerpFrom: otherBorder, lerpAmount: 1.0);
162+
await testBorder(tester, 'to_eccentric_circle_border', from, lerpTo: eccentricCircle, lerpAmount: 0.4);
163+
await testBorder(tester, 'from_eccentric_circle_border', from, lerpFrom: eccentricCircle, lerpAmount: 0.4);
161164
});
162165

163166
testWidgets('StarBorder lerped with RoundedRectangleBorder', (WidgetTester tester) async {

0 commit comments

Comments
 (0)