Gesture class hierarchy tune-up Make all the *GestureRecognizer classes inherit from a class called GestureRecognizer. Give the old GestureRecognizer a name that is more precise about its purpose. Remove the members of GestureArenaMember that aren't used by GestureArenas.
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; }