From 6e97dc02bafbead6dbbf577ae77dee2f9825d696 Mon Sep 17 00:00:00 2001 From: Matt Perry Date: Thu, 6 Aug 2015 15:40:15 -0400 Subject: [PATCH] Adjust the SpringForce tolerance, used by Drawer and Dismissable. They settle much faster after you fling them now. --- sky/packages/sky/lib/animation/forces.dart | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/sky/packages/sky/lib/animation/forces.dart b/sky/packages/sky/lib/animation/forces.dart index 6448892cb706d..7bfeeb1636852 100644 --- a/sky/packages/sky/lib/animation/forces.dart +++ b/sky/packages/sky/lib/animation/forces.dart @@ -13,22 +13,25 @@ abstract class Force { class SpringForce extends Force { SpringForce(this.spring, {this.left: 0.0, this.right: 1.0}); + // We overshoot the target by this distance, but stop the simulation when + // the spring gets within this distance (regardless of how fast it's moving). + // This causes the spring to settle a bit faster than it otherwise would. + static final Tolerance tolerance = + new Tolerance(velocity: double.INFINITY, distance: 0.01); + final SpringDescription spring; // Where to put the spring's resting point when releasing left or right, // respectively. final double left, right; Simulation release(double position, double velocity, Direction direction) { - // Target just past the endpoint, because the animation will stop once the - // Spring gets within the epsilon, and we want to stop at the endpoint. double target = direction == Direction.reverse ? - this.left - _kEpsilon : this.right + _kEpsilon; - return new SpringSimulation(spring, position, target, velocity); + this.left - tolerance.distance : this.right + tolerance.distance; + return new SpringSimulation(spring, position, target, velocity) + ..tolerance = tolerance; } } final SpringDescription _kDefaultSpringDesc = new SpringDescription.withDampingRatio(mass: 1.0, springConstant: 500.0, ratio: 1.0); final SpringForce kDefaultSpringForce = new SpringForce(_kDefaultSpringDesc); - -const double _kEpsilon = 0.001;