
This PR: * Adds a `RoundSuperellipse` class, which mirrors the current `RoundRect` class. * Implements `RoundSuperellipse::Contains`, which checks if a point is contained by the RSE. * Adds `Path::AddSuperellipse`, which draws an RSE with Bezier approximation. * Adds a `RoundSuperellipseParam` class, which is the common computation shared by geometry drawing, stroking, and containment check. https://github.com/user-attachments/assets/883c7762-7b35-432e-9b31-d204db3bd6e1 This PR also updates the RSE algorithm according to my recent research, which uses one fewer precomputed variable (no more `d`), shares the same gap factor with RRect, and allows much better precision. The result shape is almost unchanged (~0.2% slimmer). > For reviewers: The `RoundSuperellipseParam` and `RoundSuperellipse::Contains` parts are repurposed from the abandoned https://github.com/flutter/flutter/pull/162349. This PR is a preparation for https://github.com/flutter/flutter/pull/160883. ## Pre-launch Checklist - [ ] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [ ] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [ ] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [ ] I signed the [CLA]. - [ ] I listed at least one issue that this PR fixes in the description above. - [ ] I updated/added relevant documentation (doc comments with `///`). - [ ] I added new tests to check the change I am making, or this PR is [test-exempt]. - [ ] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [ ] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
Flutter Engine
Setting up the Engine development environment
See here
gclient
bootstrap
Flutter engine uses gclient
to manage dependencies.
If you've already cloned the flutter repository: