Skip to content

Lerp HSVColor and HSLColor hue along the shortest arc - #191186

Merged
auto-submit[bot] merged 2 commits into
flutter:masterfrom
glitchfl:lerp-hue-shortest-arc
Aug 26, 2026
Merged

auto-submit[bot] merged 2 commits into
flutter:masterfrom
glitchfl:lerp-hue-shortest-arc

Conversation

@glitchfl

Copy link
Copy Markdown
Contributor

Hue is an angle but we lerped it like a plain number so anything crossing 0 took the long way round. 300 to 60 should be a 120 hop through red (it was doing 240 through cyan)

Added a _lerpHue helper that folds the delta into (-180, 180] first (used by both lerps)

Heads up - 0 -> 360 doesn't sweep the wheel anymore since its the same angle. Two tests relied on that so I moved them to 0 -> 180

fixes #138301

(I used antigravity to help with that fix) and I went over the checklist

hue-lerp

@github-actions github-actions Bot added the framework flutter/packages/flutter repository. See also f: labels. label Aug 16, 2026

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a private helper function _lerpHue in colors.dart to interpolate hue values along the shortest arc of a 360-degree circle. Both HSVColor.lerp and HSLColor.lerp are updated to use this helper function. Corresponding tests in colors_test.dart are updated and expanded to verify that hue interpolation correctly follows the shortest arc. There are no review comments, and I have no feedback to provide.

@justinmc justinmc added the CICD Run CI/CD label Aug 18, 2026

@victorsanni victorsanni left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mostly LGTM with 1 concern.

}

double _lerpHue(double a, double b, double t) {
double delta = (b - a) % 360.0;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

delta will always be > 0, for example -180 % 360 and 180 % 360 both equal 180. Could this be a problem? Reversing the lerp should retrace the same path.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yea ur right (forgot that modulo is non-negative). dropped the modulo since hue is alris [0, 360] and fold with signed comparisons instead (so reversing retraces now) added tests for it but PTAL

@flutter-dashboard flutter-dashboard Bot removed the CICD Run CI/CD label Aug 21, 2026
@glitchfl
glitchfl force-pushed the lerp-hue-shortest-arc branch from c7fa1fd to 1571b5a Compare August 21, 2026 18:47

@victorsanni victorsanni left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the fix!

@justinmc justinmc left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 👍

@justinmc justinmc added CICD Run CI/CD autosubmit Merge PR when tree becomes green via auto submit App labels Aug 25, 2026
@auto-submit

auto-submit Bot commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

autosubmit label was removed for flutter/flutter/191186, because - The status or check suite ci.yaml validation has failed. Please fix the issues identified (or deflake) before re-applying this label.

@auto-submit auto-submit Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Aug 25, 2026
@flutter-dashboard flutter-dashboard Bot removed the CICD Run CI/CD label Aug 25, 2026
@justinmc justinmc added CICD Run CI/CD autosubmit Merge PR when tree becomes green via auto submit App labels Aug 25, 2026
@flutter-dashboard flutter-dashboard Bot removed the CICD Run CI/CD label Aug 25, 2026
@Renzo-Olivares Renzo-Olivares added the CICD Run CI/CD label Aug 25, 2026
@glitchfl

Copy link
Copy Markdown
Contributor Author

why merge and not rebase?

@auto-submit
auto-submit Bot added this pull request to the merge queue Aug 26, 2026
Merged via the queue into flutter:master with commit 9c6540e Aug 26, 2026
21 checks passed
@flutter-dashboard flutter-dashboard Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Aug 26, 2026
auto-submit Bot pushed a commit to flutter/packages that referenced this pull request Aug 28, 2026
Roll Flutter from 15d8908addf6 to e8dca90ec9e0 (58 revisions)

flutter/flutter@15d8908...e8dca90

2026-08-27 [email protected] Terminate existing process before launching with devicectl (flutter/flutter#191885)
2026-08-27 [email protected] Roll Fuchsia Linux SDK from qjOQi-zAgu_tADorh... to dDxH8G5cDBP602eyG... (flutter/flutter#191889)
2026-08-27 [email protected] [flutter_tools] Verify native assets tree-shaking during linking (flutter/flutter#191637)
2026-08-27 [email protected] Denylists b-series powervr from vulkan (flutter/flutter#191808)
2026-08-27 [email protected] Handle linear and radial gradients in UberSDF (flutter/flutter#190874)
2026-08-27 [email protected] Roll Packages from 740f093 to bd3cbc1 (7 revisions) (flutter/flutter#191886)
2026-08-27 [email protected] Disable more Windows tests that have been causing CI flakes (flutter/flutter#191822)
2026-08-27 [email protected] Roll Skia from d32721369bd8 to 82e972ea84b1 (2 revisions) (flutter/flutter#191880)
2026-08-27 [email protected] Roll Skia from 3640b8edd16c to d32721369bd8 (10 revisions) (flutter/flutter#191858)
2026-08-27 [email protected] Revert: [AGP 9] Update remaining tests to AGP 9 (flutter/flutter#191863)
2026-08-27 [email protected] Roll Fuchsia Test Scripts from 0iCv10IlKfiilEBOU... to 6SXRz6wsA2Zm_rAqP... (flutter/flutter#191852)
2026-08-27 [email protected] Roll pub packages (flutter/flutter#191851)
2026-08-27 [email protected] Refactor FormField build wrappers (flutter/flutter#185795)
2026-08-27 [email protected] Make ScrollPhysics reactive by introducing shouldUpdate (flutter/flutter#189664)
2026-08-27 [email protected] macOS: Fix crash on out-of-bounds text input ranges (flutter/flutter#191780)
2026-08-27 [email protected] Add HCPP feature flag, and turn it on by default in beta/master (flutter/flutter#190623)
2026-08-27 [email protected] [tool] Migrate CleanCommand to modular dependency injection (flutter/flutter#190742)
2026-08-26 [email protected] Update triage docs for ecosystem and codelab changes (flutter/flutter#191809)
2026-08-26 [email protected] [AGP 9] Update remaining tests to AGP 9 (flutter/flutter#191824)
2026-08-26 [email protected] [UIScene] Migrate dev/benchmarks/complex_layout to UIScene lifecycle (flutter/flutter#191619)
2026-08-26 [email protected] Add SliverAppBar showOnScreen semantics test coverage (flutter/flutter#190410)
2026-08-26 [email protected] Add prompt_suggestion icon to list of RTL mirroring icons. (flutter/flutter#191741)
2026-08-26 [email protected] Remove bringup for batch 3 (flutter/flutter#191750)
2026-08-26 [email protected] Roll Skia from b5465d7b0b77 to 3640b8edd16c (6 revisions) (flutter/flutter#191835)
2026-08-26 [email protected] Uiscene migrate custom channels views (flutter/flutter#191817)
2026-08-26 [email protected] Support --[no-]adb-log-filtering CLI option (flutter/flutter#187252)
2026-08-26 [email protected] Roll Dart SDK from cb8a4e1a0fbb to cb4c39d067f3 (2 revisions) (flutter/flutter#191825)
2026-08-26 [email protected] Fix `Navigator.pushNamed<T>()` type checking (flutter/flutter#188148)
2026-08-26 [email protected] Handle the case where a window doesn't have a title set (flutter/flutter#191767)
2026-08-26 [email protected] [Android] Remove old `InputType` constructor from embedding (flutter/flutter#191244)
2026-08-26 [email protected] Roll Skia from 244a6a0f8f92 to b5465d7b0b77 (19 revisions) (flutter/flutter#191810)
2026-08-26 [email protected] Tolerate floating-point rounding in paintImage centerSlice assertion (flutter/flutter#185789)
2026-08-26 [email protected] Fixes translated bounded blurs (flutter/flutter#191615)
2026-08-26 [email protected] Roll Fuchsia Linux SDK from MstTWE1RDOT-RnrtH... to qjOQi-zAgu_tADorh... (flutter/flutter#191769)
2026-08-26 [email protected] Lerp HSVColor and HSLColor hue along the shortest arc (flutter/flutter#191186)
2026-08-26 [email protected] Fix enum instances comparison to use `equality ==` since dart has the correct behavior now (flutter/flutter#191537)
2026-08-26 [email protected] Switches windows to opengles 3 (flutter/flutter#191516)
2026-08-26 [email protected] Roll Dart SDK from 7739e8602bc1 to cb8a4e1a0fbb (1 revision) (flutter/flutter#191784)
2026-08-26 [email protected] iOS,macOS: Check viewType before creating a platform view (flutter/flutter#191777)
2026-08-26 [email protected] Revert: [tool_tests] Remove bringup from Windows tool_tests_commands_2_2 (flutter/flutter#191793)
2026-08-26 [email protected] refactor(flutter_tools): clean up dead unreferenced declarations (flutter/flutter#191163)
2026-08-26 [email protected] Roll Fuchsia GN SDK from a87CbQSWEjkPUK1ZY... to ZsxUUK2SfA-TrNvb8... (flutter/flutter#191763)
2026-08-26 [email protected] [tool_tests] Remove bringup from Windows tool_tests_commands_2_2 (flutter/flutter#191732)
2026-08-25 [email protected] Remove legacy gen_defaults analyze checks (flutter/flutter#191629)
2026-08-25 [email protected] Refactors `try` to avoid `unawaited_return_in_try_block` case (flutter/flutter#191129)
2026-08-25 [email protected] Roll Dart SDK from 8996935d3d0a to 7739e8602bc1 (1 revision) (flutter/flutter#191754)
...
victorsanni pushed a commit to victorsanni/packages that referenced this pull request Sep 9, 2026
…r#12660)

Roll Flutter from 15d8908addf6 to e8dca90ec9e0 (58 revisions)

flutter/flutter@15d8908...e8dca90

2026-08-27 [email protected] Terminate existing process before launching with devicectl (flutter/flutter#191885)
2026-08-27 [email protected] Roll Fuchsia Linux SDK from qjOQi-zAgu_tADorh... to dDxH8G5cDBP602eyG... (flutter/flutter#191889)
2026-08-27 [email protected] [flutter_tools] Verify native assets tree-shaking during linking (flutter/flutter#191637)
2026-08-27 [email protected] Denylists b-series powervr from vulkan (flutter/flutter#191808)
2026-08-27 [email protected] Handle linear and radial gradients in UberSDF (flutter/flutter#190874)
2026-08-27 [email protected] Roll Packages from 740f093 to bd3cbc1 (7 revisions) (flutter/flutter#191886)
2026-08-27 [email protected] Disable more Windows tests that have been causing CI flakes (flutter/flutter#191822)
2026-08-27 [email protected] Roll Skia from d32721369bd8 to 82e972ea84b1 (2 revisions) (flutter/flutter#191880)
2026-08-27 [email protected] Roll Skia from 3640b8edd16c to d32721369bd8 (10 revisions) (flutter/flutter#191858)
2026-08-27 [email protected] Revert: [AGP 9] Update remaining tests to AGP 9 (flutter/flutter#191863)
2026-08-27 [email protected] Roll Fuchsia Test Scripts from 0iCv10IlKfiilEBOU... to 6SXRz6wsA2Zm_rAqP... (flutter/flutter#191852)
2026-08-27 [email protected] Roll pub packages (flutter/flutter#191851)
2026-08-27 [email protected] Refactor FormField build wrappers (flutter/flutter#185795)
2026-08-27 [email protected] Make ScrollPhysics reactive by introducing shouldUpdate (flutter/flutter#189664)
2026-08-27 [email protected] macOS: Fix crash on out-of-bounds text input ranges (flutter/flutter#191780)
2026-08-27 [email protected] Add HCPP feature flag, and turn it on by default in beta/master (flutter/flutter#190623)
2026-08-27 [email protected] [tool] Migrate CleanCommand to modular dependency injection (flutter/flutter#190742)
2026-08-26 [email protected] Update triage docs for ecosystem and codelab changes (flutter/flutter#191809)
2026-08-26 [email protected] [AGP 9] Update remaining tests to AGP 9 (flutter/flutter#191824)
2026-08-26 [email protected] [UIScene] Migrate dev/benchmarks/complex_layout to UIScene lifecycle (flutter/flutter#191619)
2026-08-26 [email protected] Add SliverAppBar showOnScreen semantics test coverage (flutter/flutter#190410)
2026-08-26 [email protected] Add prompt_suggestion icon to list of RTL mirroring icons. (flutter/flutter#191741)
2026-08-26 [email protected] Remove bringup for batch 3 (flutter/flutter#191750)
2026-08-26 [email protected] Roll Skia from b5465d7b0b77 to 3640b8edd16c (6 revisions) (flutter/flutter#191835)
2026-08-26 [email protected] Uiscene migrate custom channels views (flutter/flutter#191817)
2026-08-26 [email protected] Support --[no-]adb-log-filtering CLI option (flutter/flutter#187252)
2026-08-26 [email protected] Roll Dart SDK from cb8a4e1a0fbb to cb4c39d067f3 (2 revisions) (flutter/flutter#191825)
2026-08-26 [email protected] Fix `Navigator.pushNamed<T>()` type checking (flutter/flutter#188148)
2026-08-26 [email protected] Handle the case where a window doesn't have a title set (flutter/flutter#191767)
2026-08-26 [email protected] [Android] Remove old `InputType` constructor from embedding (flutter/flutter#191244)
2026-08-26 [email protected] Roll Skia from 244a6a0f8f92 to b5465d7b0b77 (19 revisions) (flutter/flutter#191810)
2026-08-26 [email protected] Tolerate floating-point rounding in paintImage centerSlice assertion (flutter/flutter#185789)
2026-08-26 [email protected] Fixes translated bounded blurs (flutter/flutter#191615)
2026-08-26 [email protected] Roll Fuchsia Linux SDK from MstTWE1RDOT-RnrtH... to qjOQi-zAgu_tADorh... (flutter/flutter#191769)
2026-08-26 [email protected] Lerp HSVColor and HSLColor hue along the shortest arc (flutter/flutter#191186)
2026-08-26 [email protected] Fix enum instances comparison to use `equality ==` since dart has the correct behavior now (flutter/flutter#191537)
2026-08-26 [email protected] Switches windows to opengles 3 (flutter/flutter#191516)
2026-08-26 [email protected] Roll Dart SDK from 7739e8602bc1 to cb8a4e1a0fbb (1 revision) (flutter/flutter#191784)
2026-08-26 [email protected] iOS,macOS: Check viewType before creating a platform view (flutter/flutter#191777)
2026-08-26 [email protected] Revert: [tool_tests] Remove bringup from Windows tool_tests_commands_2_2 (flutter/flutter#191793)
2026-08-26 [email protected] refactor(flutter_tools): clean up dead unreferenced declarations (flutter/flutter#191163)
2026-08-26 [email protected] Roll Fuchsia GN SDK from a87CbQSWEjkPUK1ZY... to ZsxUUK2SfA-TrNvb8... (flutter/flutter#191763)
2026-08-26 [email protected] [tool_tests] Remove bringup from Windows tool_tests_commands_2_2 (flutter/flutter#191732)
2026-08-25 [email protected] Remove legacy gen_defaults analyze checks (flutter/flutter#191629)
2026-08-25 [email protected] Refactors `try` to avoid `unawaited_return_in_try_block` case (flutter/flutter#191129)
2026-08-25 [email protected] Roll Dart SDK from 8996935d3d0a to 7739e8602bc1 (1 revision) (flutter/flutter#191754)
...
victorsanni pushed a commit to victorsanni/packages that referenced this pull request Sep 9, 2026
…r#12660)

Roll Flutter from 15d8908addf6 to e8dca90ec9e0 (58 revisions)

flutter/flutter@15d8908...e8dca90

2026-08-27 [email protected] Terminate existing process before launching with devicectl (flutter/flutter#191885)
2026-08-27 [email protected] Roll Fuchsia Linux SDK from qjOQi-zAgu_tADorh... to dDxH8G5cDBP602eyG... (flutter/flutter#191889)
2026-08-27 [email protected] [flutter_tools] Verify native assets tree-shaking during linking (flutter/flutter#191637)
2026-08-27 [email protected] Denylists b-series powervr from vulkan (flutter/flutter#191808)
2026-08-27 [email protected] Handle linear and radial gradients in UberSDF (flutter/flutter#190874)
2026-08-27 [email protected] Roll Packages from 740f093 to bd3cbc1 (7 revisions) (flutter/flutter#191886)
2026-08-27 [email protected] Disable more Windows tests that have been causing CI flakes (flutter/flutter#191822)
2026-08-27 [email protected] Roll Skia from d32721369bd8 to 82e972ea84b1 (2 revisions) (flutter/flutter#191880)
2026-08-27 [email protected] Roll Skia from 3640b8edd16c to d32721369bd8 (10 revisions) (flutter/flutter#191858)
2026-08-27 [email protected] Revert: [AGP 9] Update remaining tests to AGP 9 (flutter/flutter#191863)
2026-08-27 [email protected] Roll Fuchsia Test Scripts from 0iCv10IlKfiilEBOU... to 6SXRz6wsA2Zm_rAqP... (flutter/flutter#191852)
2026-08-27 [email protected] Roll pub packages (flutter/flutter#191851)
2026-08-27 [email protected] Refactor FormField build wrappers (flutter/flutter#185795)
2026-08-27 [email protected] Make ScrollPhysics reactive by introducing shouldUpdate (flutter/flutter#189664)
2026-08-27 [email protected] macOS: Fix crash on out-of-bounds text input ranges (flutter/flutter#191780)
2026-08-27 [email protected] Add HCPP feature flag, and turn it on by default in beta/master (flutter/flutter#190623)
2026-08-27 [email protected] [tool] Migrate CleanCommand to modular dependency injection (flutter/flutter#190742)
2026-08-26 [email protected] Update triage docs for ecosystem and codelab changes (flutter/flutter#191809)
2026-08-26 [email protected] [AGP 9] Update remaining tests to AGP 9 (flutter/flutter#191824)
2026-08-26 [email protected] [UIScene] Migrate dev/benchmarks/complex_layout to UIScene lifecycle (flutter/flutter#191619)
2026-08-26 [email protected] Add SliverAppBar showOnScreen semantics test coverage (flutter/flutter#190410)
2026-08-26 [email protected] Add prompt_suggestion icon to list of RTL mirroring icons. (flutter/flutter#191741)
2026-08-26 [email protected] Remove bringup for batch 3 (flutter/flutter#191750)
2026-08-26 [email protected] Roll Skia from b5465d7b0b77 to 3640b8edd16c (6 revisions) (flutter/flutter#191835)
2026-08-26 [email protected] Uiscene migrate custom channels views (flutter/flutter#191817)
2026-08-26 [email protected] Support --[no-]adb-log-filtering CLI option (flutter/flutter#187252)
2026-08-26 [email protected] Roll Dart SDK from cb8a4e1a0fbb to cb4c39d067f3 (2 revisions) (flutter/flutter#191825)
2026-08-26 [email protected] Fix `Navigator.pushNamed<T>()` type checking (flutter/flutter#188148)
2026-08-26 [email protected] Handle the case where a window doesn't have a title set (flutter/flutter#191767)
2026-08-26 [email protected] [Android] Remove old `InputType` constructor from embedding (flutter/flutter#191244)
2026-08-26 [email protected] Roll Skia from 244a6a0f8f92 to b5465d7b0b77 (19 revisions) (flutter/flutter#191810)
2026-08-26 [email protected] Tolerate floating-point rounding in paintImage centerSlice assertion (flutter/flutter#185789)
2026-08-26 [email protected] Fixes translated bounded blurs (flutter/flutter#191615)
2026-08-26 [email protected] Roll Fuchsia Linux SDK from MstTWE1RDOT-RnrtH... to qjOQi-zAgu_tADorh... (flutter/flutter#191769)
2026-08-26 [email protected] Lerp HSVColor and HSLColor hue along the shortest arc (flutter/flutter#191186)
2026-08-26 [email protected] Fix enum instances comparison to use `equality ==` since dart has the correct behavior now (flutter/flutter#191537)
2026-08-26 [email protected] Switches windows to opengles 3 (flutter/flutter#191516)
2026-08-26 [email protected] Roll Dart SDK from 7739e8602bc1 to cb8a4e1a0fbb (1 revision) (flutter/flutter#191784)
2026-08-26 [email protected] iOS,macOS: Check viewType before creating a platform view (flutter/flutter#191777)
2026-08-26 [email protected] Revert: [tool_tests] Remove bringup from Windows tool_tests_commands_2_2 (flutter/flutter#191793)
2026-08-26 [email protected] refactor(flutter_tools): clean up dead unreferenced declarations (flutter/flutter#191163)
2026-08-26 [email protected] Roll Fuchsia GN SDK from a87CbQSWEjkPUK1ZY... to ZsxUUK2SfA-TrNvb8... (flutter/flutter#191763)
2026-08-26 [email protected] [tool_tests] Remove bringup from Windows tool_tests_commands_2_2 (flutter/flutter#191732)
2026-08-25 [email protected] Remove legacy gen_defaults analyze checks (flutter/flutter#191629)
2026-08-25 [email protected] Refactors `try` to avoid `unawaited_return_in_try_block` case (flutter/flutter#191129)
2026-08-25 [email protected] Roll Dart SDK from 8996935d3d0a to 7739e8602bc1 (1 revision) (flutter/flutter#191754)
...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CICD Run CI/CD framework flutter/packages/flutter repository. See also f: labels.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

HSVColor.lerp and HSLColor.lerp don't interpolate hue via 0

4 participants