Commit 21142660 authored by Matt Perry's avatar Matt Perry

Adjust the SpringForce tolerance, used by Drawer and Dismissable.

They settle much faster after you fling them now.
parent a7b96564
...@@ -13,22 +13,25 @@ abstract class Force { ...@@ -13,22 +13,25 @@ abstract class Force {
class SpringForce extends Force { class SpringForce extends Force {
SpringForce(this.spring, {this.left: 0.0, this.right: 1.0}); 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; final SpringDescription spring;
// Where to put the spring's resting point when releasing left or right, // Where to put the spring's resting point when releasing left or right,
// respectively. // respectively.
final double left, right; final double left, right;
Simulation release(double position, double velocity, Direction direction) { 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 ? double target = direction == Direction.reverse ?
this.left - _kEpsilon : this.right + _kEpsilon; this.left - tolerance.distance : this.right + tolerance.distance;
return new SpringSimulation(spring, position, target, velocity); return new SpringSimulation(spring, position, target, velocity)
..tolerance = tolerance;
} }
} }
final SpringDescription _kDefaultSpringDesc = final SpringDescription _kDefaultSpringDesc =
new SpringDescription.withDampingRatio(mass: 1.0, springConstant: 500.0, ratio: 1.0); new SpringDescription.withDampingRatio(mass: 1.0, springConstant: 500.0, ratio: 1.0);
final SpringForce kDefaultSpringForce = new SpringForce(_kDefaultSpringDesc); final SpringForce kDefaultSpringForce = new SpringForce(_kDefaultSpringDesc);
const double _kEpsilon = 0.001;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment