Merge pull request #1950 from Hixie/gesture-cleanup
Gesture class hierarchy tune-up
diff --git a/sky/packages/sky/lib/src/gestures/arena.dart b/sky/packages/sky/lib/src/gestures/arena.dart
index 6cfba91..184a314 100644
--- a/sky/packages/sky/lib/src/gestures/arena.dart
+++ b/sky/packages/sky/lib/src/gestures/arena.dart
@@ -21,11 +21,6 @@
/// Called when this member loses the arena for the given key.
void rejectGesture(Object key);
-
- /// Release any resources used by the object. Called when the object is no
- /// longer needed (e.g. a gesture recogniser is being unregistered from a
- /// [GestureDetector]).
- void dispose() { }
}
/// An interface to information to an arena
diff --git a/sky/packages/sky/lib/src/gestures/drag.dart b/sky/packages/sky/lib/src/gestures/drag.dart
index 59b707a..285d068 100644
--- a/sky/packages/sky/lib/src/gestures/drag.dart
+++ b/sky/packages/sky/lib/src/gestures/drag.dart
@@ -33,7 +33,7 @@
velocitySquared < kMaxFlingVelocity * kMaxFlingVelocity;
}
-abstract class _DragGestureRecognizer<T extends dynamic> extends GestureRecognizer {
+abstract class _DragGestureRecognizer<T extends dynamic> extends OneSequenceGestureRecognizer {
_DragGestureRecognizer({ PointerRouter router, this.onStart, this.onUpdate, this.onEnd })
: super(router: router);
diff --git a/sky/packages/sky/lib/src/gestures/multitap.dart b/sky/packages/sky/lib/src/gestures/multitap.dart
index 22e8b40..841b968 100644
--- a/sky/packages/sky/lib/src/gestures/multitap.dart
+++ b/sky/packages/sky/lib/src/gestures/multitap.dart
@@ -50,7 +50,7 @@
}
-class DoubleTapGestureRecognizer extends GestureArenaMember {
+class DoubleTapGestureRecognizer extends GestureRecognizer {
DoubleTapGestureRecognizer({ this.router, this.onDoubleTap });
@@ -111,7 +111,7 @@
}
}
- void acceptGesture(int pointer) {}
+ void acceptGesture(int pointer) { }
void rejectGesture(int pointer) {
_TapTracker tracker = _trackers[pointer];
@@ -267,7 +267,7 @@
/// independently. That is, each pointer sequence that could resolve to a tap
/// does so independently of others: down-1, down-2, up-1, up-2 produces two
/// taps, on up-1 and up-2.
-class MultiTapGestureRecognizer extends GestureArenaMember {
+class MultiTapGestureRecognizer extends GestureRecognizer {
MultiTapGestureRecognizer({
this.router,
this.onTapDown,
diff --git a/sky/packages/sky/lib/src/gestures/recognizer.dart b/sky/packages/sky/lib/src/gestures/recognizer.dart
index aaa7196..984e065 100644
--- a/sky/packages/sky/lib/src/gestures/recognizer.dart
+++ b/sky/packages/sky/lib/src/gestures/recognizer.dart
@@ -13,7 +13,22 @@
export 'pointer_router.dart' show PointerRouter;
abstract class GestureRecognizer extends GestureArenaMember {
- GestureRecognizer({ PointerRouter router }) : _router = router {
+
+ /// Call this with the pointerdown event of each pointer that should be
+ /// considered for this gesture. (It's the GestureRecognizer's responsibility
+ /// to then add itself to the global pointer router to receive subsequent
+ /// events for this pointer.)
+ void addPointer(PointerInputEvent event);
+
+ /// Release any resources used by the object. Called when the object is no
+ /// longer needed (e.g. a gesture recogniser is being unregistered from a
+ /// [GestureDetector]).
+ void dispose() { }
+
+}
+
+abstract class OneSequenceGestureRecognizer extends GestureRecognizer {
+ OneSequenceGestureRecognizer({ PointerRouter router }) : _router = router {
assert(_router != null);
}
@@ -22,9 +37,6 @@
final List<GestureArenaEntry> _entries = new List<GestureArenaEntry>();
final Set<int> _trackedPointers = new Set<int>();
- /// The primary entry point for users of this class.
- void addPointer(PointerInputEvent event);
-
void handleEvent(PointerInputEvent event);
void acceptGesture(int pointer) { }
void rejectGesture(int pointer) { }
@@ -76,7 +88,7 @@
return new ui.Point(event.x, event.y);
}
-abstract class PrimaryPointerGestureRecognizer extends GestureRecognizer {
+abstract class PrimaryPointerGestureRecognizer extends OneSequenceGestureRecognizer {
PrimaryPointerGestureRecognizer({ PointerRouter router, this.deadline })
: super(router: router);
diff --git a/sky/packages/sky/lib/src/gestures/scale.dart b/sky/packages/sky/lib/src/gestures/scale.dart
index 5eeeb30..f79629d 100644
--- a/sky/packages/sky/lib/src/gestures/scale.dart
+++ b/sky/packages/sky/lib/src/gestures/scale.dart
@@ -20,7 +20,7 @@
typedef void GestureScaleUpdateCallback(double scale, ui.Point focalPoint);
typedef void GestureScaleEndCallback();
-class ScaleGestureRecognizer extends GestureRecognizer {
+class ScaleGestureRecognizer extends OneSequenceGestureRecognizer {
ScaleGestureRecognizer({ PointerRouter router, this.onStart, this.onUpdate, this.onEnd })
: super(router: router);
diff --git a/sky/packages/sky/lib/src/widgets/gesture_detector.dart b/sky/packages/sky/lib/src/widgets/gesture_detector.dart
index 597cbf9..97d2f3d 100644
--- a/sky/packages/sky/lib/src/widgets/gesture_detector.dart
+++ b/sky/packages/sky/lib/src/widgets/gesture_detector.dart
@@ -202,7 +202,7 @@
}
}
- GestureArenaMember _ensureDisposed(GestureArenaMember recognizer) {
+ GestureRecognizer _ensureDisposed(GestureRecognizer recognizer) {
recognizer?.dispose();
return null;
}