Merge pull request #1429 from HansMuller/add_clamped_simulation
Add clamped simulation
diff --git a/packages/flutter/lib/animation.dart b/packages/flutter/lib/animation.dart
index 4c449e2..f35b253 100644
--- a/packages/flutter/lib/animation.dart
+++ b/packages/flutter/lib/animation.dart
@@ -10,6 +10,7 @@
export 'src/animation/animated_simulation.dart';
export 'src/animation/animated_value.dart';
export 'src/animation/animation_performance.dart';
+export 'src/animation/clamped_simulation.dart';
export 'src/animation/curves.dart';
export 'src/animation/forces.dart';
export 'src/animation/scheduler.dart';
diff --git a/packages/flutter/lib/src/animation/clamped_simulation.dart b/packages/flutter/lib/src/animation/clamped_simulation.dart
new file mode 100644
index 0000000..d3d14c7
--- /dev/null
+++ b/packages/flutter/lib/src/animation/clamped_simulation.dart
@@ -0,0 +1,28 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:newton/newton.dart';
+
+class ClampedSimulation extends Simulation {
+ ClampedSimulation(this.simulation, {
+ this.xMin: double.NEGATIVE_INFINITY,
+ this.xMax: double.INFINITY,
+ this.dxMin: double.NEGATIVE_INFINITY,
+ this.dxMax: double.INFINITY
+ }) {
+ assert(simulation != null);
+ assert(xMax >= xMin);
+ assert(dxMax >= dxMin);
+ }
+
+ final Simulation simulation;
+ final double xMin;
+ final double xMax;
+ final double dxMin;
+ final double dxMax;
+
+ double x(double time) => simulation.x(time).clamp(xMin, xMax);
+ double dx(double time) => simulation.dx(time).clamp(dxMin, dxMax);
+ bool isDone(double time) => simulation.isDone(time);
+}