mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Fix _lerpInt precision bug (flutter/engine#22089)
Fixes a precision bug was introduced in 5f363dc, which improved the precision of lerpDouble when the extrema differed significantly in magnitude. _lerpInt doesn't have this issue since the extrema are passed as 64-bit twos-complement values, therefore the difference will always be accurate so long as it doesn't overflow. This reverts the _lerpInt implementation to the original a + (b - a) * t, but adds a test to avoid a regression if anyone is tempted to make it consistent with the others.
This commit is contained in:
parent
644c683191
commit
736d19ecbf
@ -34,7 +34,7 @@ double _lerpDouble(double a, double b, double t) {
|
||||
///
|
||||
/// Same as [lerpDouble] but specialized for non-null `int` type.
|
||||
double _lerpInt(int a, int b, double t) {
|
||||
return a * (1.0 - t) + b * t;
|
||||
return a + (b - a) * t;
|
||||
}
|
||||
|
||||
/// Same as [num.clamp] but specialized for non-null [int].
|
||||
|
||||
@ -77,6 +77,12 @@ void main() {
|
||||
Color.lerp(const Color(0x00000000), const Color(0xFFFFFFFF), 1.1),
|
||||
const Color(0xFFFFFFFF),
|
||||
);
|
||||
|
||||
// Prevent regression: https://github.com/flutter/flutter/issues/67423
|
||||
expect(
|
||||
Color.lerp(const Color(0xFFFFFFFF), const Color(0xFFFFFFFF), 0.04),
|
||||
const Color(0xFFFFFFFF),
|
||||
);
|
||||
});
|
||||
|
||||
test('Color.alphaBlend', () {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user