Rename SuperellipseShare ContinuousRectangleBorder (#28183)
diff --git a/bin/internal/goldens.version b/bin/internal/goldens.version index fdbe145..abf3fee 100644 --- a/bin/internal/goldens.version +++ b/bin/internal/goldens.version
@@ -1 +1 @@ -316817d949c1f7051e8a4898486ae7643ce31167 +8587c2409ec1b674a7d451c8bcd8d37ed5175fdc
diff --git a/packages/flutter/lib/painting.dart b/packages/flutter/lib/painting.dart index ef79da4..6cce1f8 100644 --- a/packages/flutter/lib/painting.dart +++ b/packages/flutter/lib/painting.dart
@@ -32,6 +32,7 @@ export 'src/painting/circle_border.dart'; export 'src/painting/clip.dart'; export 'src/painting/colors.dart'; +export 'src/painting/continuous_rectangle_border.dart'; export 'src/painting/debug.dart'; export 'src/painting/decoration.dart'; export 'src/painting/decoration_image.dart'; @@ -52,7 +53,6 @@ export 'src/painting/shape_decoration.dart'; export 'src/painting/stadium_border.dart'; export 'src/painting/strut_style.dart'; -export 'src/painting/superellipse_shape.dart'; export 'src/painting/text_painter.dart'; export 'src/painting/text_span.dart'; export 'src/painting/text_style.dart';
diff --git a/packages/flutter/lib/src/painting/borders.dart b/packages/flutter/lib/src/painting/borders.dart index 51ac9cf..40d4f54 100644 --- a/packages/flutter/lib/src/painting/borders.dart +++ b/packages/flutter/lib/src/painting/borders.dart
@@ -265,8 +265,9 @@ /// /// This class handles how to add multiple borders together. Subclasses define /// various shapes, like circles ([CircleBorder]), rounded rectangles -/// ([RoundedRectangleBorder]), superellipses ([SuperellipseShape]), or beveled -/// rectangles ([BeveledRectangleBorder]). +/// ([RoundedRectangleBorder]), continuous rectangles +/// ([ContinuousRectangleBorder]), or beveled rectangles +/// ([BeveledRectangleBorder]). /// /// See also: ///
diff --git a/packages/flutter/lib/src/painting/superellipse_shape.dart b/packages/flutter/lib/src/painting/continuous_rectangle_border.dart similarity index 84% rename from packages/flutter/lib/src/painting/superellipse_shape.dart rename to packages/flutter/lib/src/painting/continuous_rectangle_border.dart index 58ed507..53f6a83 100644 --- a/packages/flutter/lib/src/painting/superellipse_shape.dart +++ b/packages/flutter/lib/src/painting/continuous_rectangle_border.dart
@@ -9,15 +9,14 @@ import 'borders.dart'; import 'edge_insets.dart'; -/// Creates a superellipse - a shape similar to a rounded rectangle, but with -/// a smoother transition from the sides to the rounded corners and greater -/// curve continuity. +/// A rectangular border with smooth continuous transitions between the straight +/// sides and the rounded corners. /// /// {@tool sample} /// ```dart /// Widget build(BuildContext context) { /// return Material( -/// shape: SuperellipseShape( +/// shape: ContinuousRectangleBorder( /// borderRadius: BorderRadius.circular(28.0), /// ), /// ); @@ -27,12 +26,13 @@ /// /// See also: /// -/// * [RoundedRectangleBorder] Which creates a square with rounded corners, -/// however it doesn't allow the corners to bend the sides of the square -/// like a superellipse, resulting in a more square shape. -class SuperellipseShape extends ShapeBorder { +/// * [RoundedRectangleBorder] Which creates rectangles with rounded corners, +/// however its straight sides change into a rounded corner with a circular +/// radius in a step function instead of gradually like the +/// [ContinuousRectangleBorder]. +class ContinuousRectangleBorder extends ShapeBorder { /// The arguments must not be null. - const SuperellipseShape({ + const ContinuousRectangleBorder({ this.side = BorderSide.none, this.borderRadius = BorderRadius.zero, }) : assert(side != null), @@ -52,7 +52,7 @@ @override ShapeBorder scale(double t) { - return SuperellipseShape( + return ContinuousRectangleBorder( side: side.scale(t), borderRadius: borderRadius * t, ); @@ -61,8 +61,8 @@ @override ShapeBorder lerpFrom(ShapeBorder a, double t) { assert(t != null); - if (a is SuperellipseShape) { - return SuperellipseShape( + if (a is ContinuousRectangleBorder) { + return ContinuousRectangleBorder( side: BorderSide.lerp(a.side, side, t), borderRadius: BorderRadiusGeometry.lerp(a.borderRadius, borderRadius, t), ); @@ -73,8 +73,8 @@ @override ShapeBorder lerpTo(ShapeBorder b, double t) { assert(t != null); - if (b is SuperellipseShape) { - return SuperellipseShape( + if (b is ContinuousRectangleBorder) { + return ContinuousRectangleBorder( side: BorderSide.lerp(side, b.side, t), borderRadius: BorderRadiusGeometry.lerp(borderRadius, b.borderRadius, t), ); @@ -151,7 +151,7 @@ bool operator ==(dynamic other) { if (runtimeType != other.runtimeType) return false; - final SuperellipseShape typedOther = other; + final ContinuousRectangleBorder typedOther = other; return side == typedOther.side && borderRadius == typedOther.borderRadius; }
diff --git a/packages/flutter/test/material/bottom_app_bar_test.dart b/packages/flutter/test/material/bottom_app_bar_test.dart index e8f6f32..53e4de7 100644 --- a/packages/flutter/test/material/bottom_app_bar_test.dart +++ b/packages/flutter/test/material/bottom_app_bar_test.dart
@@ -56,7 +56,7 @@ bottomNavigationBar: BottomAppBar( shape: AutomaticNotchedShape( BeveledRectangleBorder(borderRadius: BorderRadius.circular(50.0)), - SuperellipseShape(borderRadius: BorderRadius.circular(30.0)), + ContinuousRectangleBorder(borderRadius: BorderRadius.circular(30.0)), ), notchMargin: 10.0, color: Colors.green,
diff --git a/packages/flutter/test/painting/superellipse_shape_test.dart b/packages/flutter/test/painting/continous_rectangle_border_test.dart similarity index 68% rename from packages/flutter/test/painting/superellipse_shape_test.dart rename to packages/flutter/test/painting/continous_rectangle_border_test.dart index 867f8fd..9ac2c0e 100644 --- a/packages/flutter/test/painting/superellipse_shape_test.dart +++ b/packages/flutter/test/painting/continous_rectangle_border_test.dart
@@ -10,10 +10,10 @@ import '../rendering/mock_canvas.dart'; void main() { - test('SuperellipseShape scale and lerp', () { - final SuperellipseShape c10 = SuperellipseShape(side: const BorderSide(width: 10.0), borderRadius: BorderRadius.circular(100.0)); - final SuperellipseShape c15 = SuperellipseShape(side: const BorderSide(width: 15.0), borderRadius: BorderRadius.circular(150.0)); - final SuperellipseShape c20 = SuperellipseShape(side: const BorderSide(width: 20.0), borderRadius: BorderRadius.circular(200.0)); + test('ContinuousRectangleBorder scale and lerp', () { + final ContinuousRectangleBorder c10 = ContinuousRectangleBorder(side: const BorderSide(width: 10.0), borderRadius: BorderRadius.circular(100.0)); + final ContinuousRectangleBorder c15 = ContinuousRectangleBorder(side: const BorderSide(width: 15.0), borderRadius: BorderRadius.circular(150.0)); + final ContinuousRectangleBorder c20 = ContinuousRectangleBorder(side: const BorderSide(width: 20.0), borderRadius: BorderRadius.circular(200.0)); expect(c10.dimensions, const EdgeInsets.all(10.0)); expect(c10.scale(2.0), c20); expect(c20.scale(0.5), c10); @@ -22,7 +22,7 @@ expect(ShapeBorder.lerp(c10, c20, 1.0), c20); }); - test('SuperellipseShape BorderRadius.zero', () { + test('ContinuousRectangleBorder BorderRadius.zero', () { final Rect rect1 = Rect.fromLTRB(10.0, 20.0, 30.0, 40.0); final Matcher looksLikeRect1 = isPathThat( includes: const <Offset>[ Offset(10.0, 20.0), Offset(20.0, 30.0) ], @@ -30,8 +30,8 @@ ); // Default border radius and border side are zero, i.e. just a rectangle. - expect(const SuperellipseShape().getOuterPath(rect1), looksLikeRect1); - expect(const SuperellipseShape().getInnerPath(rect1), looksLikeRect1); + expect(const ContinuousRectangleBorder().getOuterPath(rect1), looksLikeRect1); + expect(const ContinuousRectangleBorder().getInnerPath(rect1), looksLikeRect1); // Represents the inner path when borderSide.width = 4, which is just rect1 // inset by 4 on all sides. @@ -41,17 +41,17 @@ ); const BorderSide side = BorderSide(width: 4.0); - expect(const SuperellipseShape(side: side).getOuterPath(rect1), looksLikeRect1); - expect(const SuperellipseShape(side: side).getInnerPath(rect1), looksLikeInnerPath); + expect(const ContinuousRectangleBorder(side: side).getOuterPath(rect1), looksLikeRect1); + expect(const ContinuousRectangleBorder(side: side).getInnerPath(rect1), looksLikeInnerPath); }); - test('SuperellipseShape non-zero BorderRadius', () { + test('ContinuousRectangleBorder non-zero BorderRadius', () { final Rect rect = Rect.fromLTRB(10.0, 20.0, 30.0, 40.0); final Matcher looksLikeRect = isPathThat( includes: const <Offset>[ Offset(15.0, 25.0), Offset(20.0, 30.0) ], excludes: const <Offset>[ Offset(10.0, 20.0), Offset(30.0, 40.0) ], ); - const SuperellipseShape border = SuperellipseShape( + const ContinuousRectangleBorder border = ContinuousRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(5.0)) ); expect(border.getOuterPath(rect), looksLikeRect); @@ -62,7 +62,7 @@ await tester.pumpWidget(RepaintBoundary( child: Material( color: Colors.blueAccent[400], - shape: SuperellipseShape( + shape: ContinuousRectangleBorder( borderRadius: BorderRadius.circular(28.0), ), ), @@ -72,7 +72,7 @@ await expectLater( find.byType(RepaintBoundary), - matchesGoldenFile('superellipse_shape.golden_test_even_radii.png'), + matchesGoldenFile('continuous_rectangle_border.golden_test_even_radii.png'), skip: !Platform.isLinux, ); }); @@ -81,7 +81,7 @@ await tester.pumpWidget(RepaintBoundary( child: Material( color: Colors.greenAccent[400], - shape: const SuperellipseShape( + shape: const ContinuousRectangleBorder( borderRadius: BorderRadius.only( topLeft: Radius.circular(28.0), bottomRight: Radius.circular(14.0), @@ -94,7 +94,7 @@ await expectLater( find.byType(RepaintBoundary), - matchesGoldenFile('superellipse_shape.golden_test_varying_radii.png'), + matchesGoldenFile('continuous_rectangle_border.golden_test_varying_radii.png'), skip: !Platform.isLinux, ); }); @@ -103,7 +103,7 @@ await tester.pumpWidget(RepaintBoundary( child: Material( color: Colors.redAccent[400], - shape: SuperellipseShape( + shape: ContinuousRectangleBorder( borderRadius: BorderRadius.circular(50.0), ), ), @@ -113,7 +113,7 @@ await expectLater( find.byType(RepaintBoundary), - matchesGoldenFile('superellipse_shape.golden_test_large_radii.png'), + matchesGoldenFile('continuous_rectangle_border.golden_test_large_radii.png'), skip: !Platform.isLinux, ); });