Commit 6af44927 authored by Adam Barth's avatar Adam Barth

Merge pull request #2147 from abarth/static_arena

Remove PointerRouter and GestureArena arguments
parents dc0e97e5 4b1a9ff1
...@@ -32,17 +32,6 @@ bool _isFlingGesture(Velocity velocity) { ...@@ -32,17 +32,6 @@ bool _isFlingGesture(Velocity velocity) {
} }
abstract class _DragGestureRecognizer<T extends dynamic> extends OneSequenceGestureRecognizer { abstract class _DragGestureRecognizer<T extends dynamic> extends OneSequenceGestureRecognizer {
_DragGestureRecognizer({
PointerRouter router,
GestureArena gestureArena,
this.onStart,
this.onUpdate,
this.onEnd
}) : super(
router: router,
gestureArena: gestureArena
);
GestureDragStartCallback onStart; GestureDragStartCallback onStart;
_GesturePolymorphicUpdateCallback<T> onUpdate; _GesturePolymorphicUpdateCallback<T> onUpdate;
GestureDragEndCallback onEnd; GestureDragEndCallback onEnd;
...@@ -126,20 +115,6 @@ abstract class _DragGestureRecognizer<T extends dynamic> extends OneSequenceGest ...@@ -126,20 +115,6 @@ abstract class _DragGestureRecognizer<T extends dynamic> extends OneSequenceGest
} }
class VerticalDragGestureRecognizer extends _DragGestureRecognizer<double> { class VerticalDragGestureRecognizer extends _DragGestureRecognizer<double> {
VerticalDragGestureRecognizer({
PointerRouter router,
GestureArena gestureArena,
GestureDragStartCallback onStart,
GestureDragUpdateCallback onUpdate,
GestureDragEndCallback onEnd
}) : super(
router: router,
gestureArena: gestureArena,
onStart: onStart,
onUpdate: onUpdate,
onEnd: onEnd
);
double get _initialPendingDragDelta => 0.0; double get _initialPendingDragDelta => 0.0;
double _getDragDelta(PointerEvent event) => event.delta.dy; double _getDragDelta(PointerEvent event) => event.delta.dy;
bool get _hasSufficientPendingDragDeltaToAccept => _pendingDragDelta.abs() > kTouchSlop; bool get _hasSufficientPendingDragDeltaToAccept => _pendingDragDelta.abs() > kTouchSlop;
...@@ -148,20 +123,6 @@ class VerticalDragGestureRecognizer extends _DragGestureRecognizer<double> { ...@@ -148,20 +123,6 @@ class VerticalDragGestureRecognizer extends _DragGestureRecognizer<double> {
} }
class HorizontalDragGestureRecognizer extends _DragGestureRecognizer<double> { class HorizontalDragGestureRecognizer extends _DragGestureRecognizer<double> {
HorizontalDragGestureRecognizer({
PointerRouter router,
GestureArena gestureArena,
GestureDragStartCallback onStart,
GestureDragUpdateCallback onUpdate,
GestureDragEndCallback onEnd
}) : super(
router: router,
gestureArena: gestureArena,
onStart: onStart,
onUpdate: onUpdate,
onEnd: onEnd
);
double get _initialPendingDragDelta => 0.0; double get _initialPendingDragDelta => 0.0;
double _getDragDelta(PointerEvent event) => event.delta.dx; double _getDragDelta(PointerEvent event) => event.delta.dx;
bool get _hasSufficientPendingDragDeltaToAccept => _pendingDragDelta.abs() > kTouchSlop; bool get _hasSufficientPendingDragDeltaToAccept => _pendingDragDelta.abs() > kTouchSlop;
...@@ -170,20 +131,6 @@ class HorizontalDragGestureRecognizer extends _DragGestureRecognizer<double> { ...@@ -170,20 +131,6 @@ class HorizontalDragGestureRecognizer extends _DragGestureRecognizer<double> {
} }
class PanGestureRecognizer extends _DragGestureRecognizer<Offset> { class PanGestureRecognizer extends _DragGestureRecognizer<Offset> {
PanGestureRecognizer({
PointerRouter router,
GestureArena gestureArena,
GesturePanStartCallback onStart,
GesturePanUpdateCallback onUpdate,
GesturePanEndCallback onEnd
}) : super(
router: router,
gestureArena: gestureArena,
onStart: onStart,
onUpdate: onUpdate,
onEnd: onEnd
);
Offset get _initialPendingDragDelta => Offset.zero; Offset get _initialPendingDragDelta => Offset.zero;
Offset _getDragDelta(PointerEvent event) => event.delta; Offset _getDragDelta(PointerEvent event) => event.delta;
bool get _hasSufficientPendingDragDeltaToAccept { bool get _hasSufficientPendingDragDeltaToAccept {
......
...@@ -5,22 +5,13 @@ ...@@ -5,22 +5,13 @@
import 'arena.dart'; import 'arena.dart';
import 'constants.dart'; import 'constants.dart';
import 'events.dart'; import 'events.dart';
import 'pointer_router.dart';
import 'recognizer.dart'; import 'recognizer.dart';
typedef void GestureLongPressCallback(); typedef void GestureLongPressCallback();
/// The user has pressed down at this location for a long period of time. /// The user has pressed down at this location for a long period of time.
class LongPressGestureRecognizer extends PrimaryPointerGestureRecognizer { class LongPressGestureRecognizer extends PrimaryPointerGestureRecognizer {
LongPressGestureRecognizer({ LongPressGestureRecognizer() : super(deadline: kLongPressTimeout);
PointerRouter router,
GestureArena gestureArena,
this.onLongPress
}) : super(
router: router,
gestureArena: gestureArena,
deadline: kLongPressTimeout
);
GestureLongPressCallback onLongPress; GestureLongPressCallback onLongPress;
......
...@@ -6,9 +6,9 @@ import 'dart:async'; ...@@ -6,9 +6,9 @@ import 'dart:async';
import 'dart:ui' show Point, Offset; import 'dart:ui' show Point, Offset;
import 'arena.dart'; import 'arena.dart';
import 'binding.dart';
import 'constants.dart'; import 'constants.dart';
import 'events.dart'; import 'events.dart';
import 'pointer_router.dart';
import 'recognizer.dart'; import 'recognizer.dart';
import 'velocity_tracker.dart'; import 'velocity_tracker.dart';
...@@ -121,18 +121,6 @@ abstract class MultiDragPointerState { ...@@ -121,18 +121,6 @@ abstract class MultiDragPointerState {
} }
abstract class MultiDragGestureRecognizer<T extends MultiDragPointerState> extends GestureRecognizer { abstract class MultiDragGestureRecognizer<T extends MultiDragPointerState> extends GestureRecognizer {
MultiDragGestureRecognizer({
PointerRouter pointerRouter,
GestureArena gestureArena,
this.onStart
}) : _pointerRouter = pointerRouter, _gestureArena = gestureArena {
assert(pointerRouter != null);
assert(gestureArena != null);
}
final PointerRouter _pointerRouter;
final GestureArena _gestureArena;
GestureMultiDragStartCallback onStart; GestureMultiDragStartCallback onStart;
Map<int, T> _pointers = <int, T>{}; Map<int, T> _pointers = <int, T>{};
...@@ -144,8 +132,8 @@ abstract class MultiDragGestureRecognizer<T extends MultiDragPointerState> exten ...@@ -144,8 +132,8 @@ abstract class MultiDragGestureRecognizer<T extends MultiDragPointerState> exten
assert(!_pointers.containsKey(event.pointer)); assert(!_pointers.containsKey(event.pointer));
T state = createNewPointerState(event); T state = createNewPointerState(event);
_pointers[event.pointer] = state; _pointers[event.pointer] = state;
_pointerRouter.addRoute(event.pointer, handleEvent); Gesturer.instance.pointerRouter.addRoute(event.pointer, handleEvent);
state._setArenaEntry(_gestureArena.add(event.pointer, this)); state._setArenaEntry(Gesturer.instance.gestureArena.add(event.pointer, this));
} }
T createNewPointerState(PointerDownEvent event); T createNewPointerState(PointerDownEvent event);
...@@ -211,7 +199,7 @@ abstract class MultiDragGestureRecognizer<T extends MultiDragPointerState> exten ...@@ -211,7 +199,7 @@ abstract class MultiDragGestureRecognizer<T extends MultiDragPointerState> exten
void _removeState(int pointer) { void _removeState(int pointer) {
assert(_pointers != null); assert(_pointers != null);
assert(_pointers.containsKey(pointer)); assert(_pointers.containsKey(pointer));
_pointerRouter.removeRoute(pointer, handleEvent); Gesturer.instance.pointerRouter.removeRoute(pointer, handleEvent);
_pointers[pointer].dispose(); _pointers[pointer].dispose();
_pointers.remove(pointer); _pointers.remove(pointer);
} }
...@@ -241,12 +229,6 @@ class _ImmediatePointerState extends MultiDragPointerState { ...@@ -241,12 +229,6 @@ class _ImmediatePointerState extends MultiDragPointerState {
} }
class ImmediateMultiDragGestureRecognizer extends MultiDragGestureRecognizer<_ImmediatePointerState> { class ImmediateMultiDragGestureRecognizer extends MultiDragGestureRecognizer<_ImmediatePointerState> {
ImmediateMultiDragGestureRecognizer({
PointerRouter pointerRouter,
GestureArena gestureArena,
GestureMultiDragStartCallback onStart
}) : super(pointerRouter: pointerRouter, gestureArena: gestureArena, onStart: onStart);
_ImmediatePointerState createNewPointerState(PointerDownEvent event) { _ImmediatePointerState createNewPointerState(PointerDownEvent event) {
return new _ImmediatePointerState(event.position); return new _ImmediatePointerState(event.position);
} }
...@@ -270,12 +252,6 @@ class _HorizontalPointerState extends MultiDragPointerState { ...@@ -270,12 +252,6 @@ class _HorizontalPointerState extends MultiDragPointerState {
} }
class HorizontalMultiDragGestureRecognizer extends MultiDragGestureRecognizer<_HorizontalPointerState> { class HorizontalMultiDragGestureRecognizer extends MultiDragGestureRecognizer<_HorizontalPointerState> {
HorizontalMultiDragGestureRecognizer({
PointerRouter pointerRouter,
GestureArena gestureArena,
GestureMultiDragStartCallback onStart
}) : super(pointerRouter: pointerRouter, gestureArena: gestureArena, onStart: onStart);
_HorizontalPointerState createNewPointerState(PointerDownEvent event) { _HorizontalPointerState createNewPointerState(PointerDownEvent event) {
return new _HorizontalPointerState(event.position); return new _HorizontalPointerState(event.position);
} }
...@@ -299,12 +275,6 @@ class _VerticalPointerState extends MultiDragPointerState { ...@@ -299,12 +275,6 @@ class _VerticalPointerState extends MultiDragPointerState {
} }
class VerticalMultiDragGestureRecognizer extends MultiDragGestureRecognizer<_VerticalPointerState> { class VerticalMultiDragGestureRecognizer extends MultiDragGestureRecognizer<_VerticalPointerState> {
VerticalMultiDragGestureRecognizer({
PointerRouter pointerRouter,
GestureArena gestureArena,
GestureMultiDragStartCallback onStart
}) : super(pointerRouter: pointerRouter, gestureArena: gestureArena, onStart: onStart);
_VerticalPointerState createNewPointerState(PointerDownEvent event) { _VerticalPointerState createNewPointerState(PointerDownEvent event) {
return new _VerticalPointerState(event.position); return new _VerticalPointerState(event.position);
} }
...@@ -360,12 +330,8 @@ class _DelayedPointerState extends MultiDragPointerState { ...@@ -360,12 +330,8 @@ class _DelayedPointerState extends MultiDragPointerState {
class DelayedMultiDragGestureRecognizer extends MultiDragGestureRecognizer<_DelayedPointerState> { class DelayedMultiDragGestureRecognizer extends MultiDragGestureRecognizer<_DelayedPointerState> {
DelayedMultiDragGestureRecognizer({ DelayedMultiDragGestureRecognizer({
PointerRouter pointerRouter,
GestureArena gestureArena,
GestureMultiDragStartCallback onStart,
Duration delay: kLongPressTimeout Duration delay: kLongPressTimeout
}) : _delay = delay, }) : _delay = delay {
super(pointerRouter: pointerRouter, gestureArena: gestureArena, onStart: onStart) {
assert(delay != null); assert(delay != null);
} }
......
...@@ -6,6 +6,7 @@ import 'dart:async'; ...@@ -6,6 +6,7 @@ import 'dart:async';
import 'dart:ui' show Point, Offset; import 'dart:ui' show Point, Offset;
import 'arena.dart'; import 'arena.dart';
import 'binding.dart';
import 'constants.dart'; import 'constants.dart';
import 'events.dart'; import 'events.dart';
import 'pointer_router.dart'; import 'pointer_router.dart';
...@@ -32,17 +33,17 @@ class _TapTracker { ...@@ -32,17 +33,17 @@ class _TapTracker {
bool _isTrackingPointer = false; bool _isTrackingPointer = false;
void startTrackingPointer(PointerRouter router, PointerRoute route) { void startTrackingPointer(PointerRoute route) {
if (!_isTrackingPointer) { if (!_isTrackingPointer) {
_isTrackingPointer = true; _isTrackingPointer = true;
router.addRoute(pointer, route); Gesturer.instance.pointerRouter.addRoute(pointer, route);
} }
} }
void stopTrackingPointer(PointerRouter router, PointerRoute route) { void stopTrackingPointer(PointerRoute route) {
if (_isTrackingPointer) { if (_isTrackingPointer) {
_isTrackingPointer = false; _isTrackingPointer = false;
router.removeRoute(pointer, route); Gesturer.instance.pointerRouter.removeRoute(pointer, route);
} }
} }
...@@ -55,17 +56,6 @@ class _TapTracker { ...@@ -55,17 +56,6 @@ class _TapTracker {
class DoubleTapGestureRecognizer extends GestureRecognizer { class DoubleTapGestureRecognizer extends GestureRecognizer {
DoubleTapGestureRecognizer({
PointerRouter router,
GestureArena gestureArena,
this.onDoubleTap
}) : _router = router,
_gestureArena = gestureArena {
assert(router != null);
assert(gestureArena != null);
}
// Implementation notes: // Implementation notes:
// The double tap recognizer can be in one of four states. There's no // The double tap recognizer can be in one of four states. There's no
// explicit enum for the states, because they are already captured by // explicit enum for the states, because they are already captured by
...@@ -86,8 +76,6 @@ class DoubleTapGestureRecognizer extends GestureRecognizer { ...@@ -86,8 +76,6 @@ class DoubleTapGestureRecognizer extends GestureRecognizer {
// - The long timer between taps expires // - The long timer between taps expires
// - The gesture arena decides we have been rejected wholesale // - The gesture arena decides we have been rejected wholesale
PointerRouter _router;
GestureArena _gestureArena;
GestureDoubleTapCallback onDoubleTap; GestureDoubleTapCallback onDoubleTap;
Timer _doubleTapTimer; Timer _doubleTapTimer;
...@@ -102,10 +90,10 @@ class DoubleTapGestureRecognizer extends GestureRecognizer { ...@@ -102,10 +90,10 @@ class DoubleTapGestureRecognizer extends GestureRecognizer {
_stopDoubleTapTimer(); _stopDoubleTapTimer();
_TapTracker tracker = new _TapTracker( _TapTracker tracker = new _TapTracker(
event: event, event: event,
entry: _gestureArena.add(event.pointer, this) entry: Gesturer.instance.gestureArena.add(event.pointer, this)
); );
_trackers[event.pointer] = tracker; _trackers[event.pointer] = tracker;
tracker.startTrackingPointer(_router, handleEvent); tracker.startTrackingPointer(handleEvent);
} }
void handleEvent(PointerEvent event) { void handleEvent(PointerEvent event) {
...@@ -152,8 +140,6 @@ class DoubleTapGestureRecognizer extends GestureRecognizer { ...@@ -152,8 +140,6 @@ class DoubleTapGestureRecognizer extends GestureRecognizer {
void dispose() { void dispose() {
_reset(); _reset();
_router = null;
_gestureArena = null;
} }
void _reset() { void _reset() {
...@@ -164,14 +150,14 @@ class DoubleTapGestureRecognizer extends GestureRecognizer { ...@@ -164,14 +150,14 @@ class DoubleTapGestureRecognizer extends GestureRecognizer {
_TapTracker tracker = _firstTap; _TapTracker tracker = _firstTap;
_firstTap = null; _firstTap = null;
_reject(tracker); _reject(tracker);
_gestureArena.release(tracker.pointer); Gesturer.instance.gestureArena.release(tracker.pointer);
} }
_clearTrackers(); _clearTrackers();
} }
void _registerFirstTap(_TapTracker tracker) { void _registerFirstTap(_TapTracker tracker) {
_startDoubleTapTimer(); _startDoubleTapTimer();
_gestureArena.hold(tracker.pointer); Gesturer.instance.gestureArena.hold(tracker.pointer);
// Note, order is important below in order for the clear -> reject logic to // Note, order is important below in order for the clear -> reject logic to
// work properly. // work properly.
_freezeTracker(tracker); _freezeTracker(tracker);
...@@ -198,7 +184,7 @@ class DoubleTapGestureRecognizer extends GestureRecognizer { ...@@ -198,7 +184,7 @@ class DoubleTapGestureRecognizer extends GestureRecognizer {
} }
void _freezeTracker(_TapTracker tracker) { void _freezeTracker(_TapTracker tracker) {
tracker.stopTrackingPointer(_router, handleEvent); tracker.stopTrackingPointer(handleEvent);
} }
void _startDoubleTapTimer() { void _startDoubleTapTimer() {
...@@ -234,9 +220,9 @@ class _TapGesture extends _TapTracker { ...@@ -234,9 +220,9 @@ class _TapGesture extends _TapTracker {
_lastPosition = event.position, _lastPosition = event.position,
super( super(
event: event, event: event,
entry: gestureRecognizer._gestureArena.add(event.pointer, gestureRecognizer) entry: Gesturer.instance.gestureArena.add(event.pointer, gestureRecognizer)
) { ) {
startTrackingPointer(gestureRecognizer.router, handleEvent); startTrackingPointer(handleEvent);
if (longTapDelay > Duration.ZERO) { if (longTapDelay > Duration.ZERO) {
_timer = new Timer(longTapDelay, () { _timer = new Timer(longTapDelay, () {
_timer = null; _timer = null;
...@@ -263,16 +249,16 @@ class _TapGesture extends _TapTracker { ...@@ -263,16 +249,16 @@ class _TapGesture extends _TapTracker {
} else if (event is PointerCancelEvent) { } else if (event is PointerCancelEvent) {
cancel(); cancel();
} else if (event is PointerUpEvent) { } else if (event is PointerUpEvent) {
stopTrackingPointer(gestureRecognizer.router, handleEvent); stopTrackingPointer(handleEvent);
_finalPosition = event.position; _finalPosition = event.position;
_check(); _check();
} }
} }
void stopTrackingPointer(PointerRouter router, PointerRoute route) { void stopTrackingPointer(PointerRoute route) {
_timer?.cancel(); _timer?.cancel();
_timer = null; _timer = null;
super.stopTrackingPointer(router, route); super.stopTrackingPointer(route);
} }
void accept() { void accept() {
...@@ -281,7 +267,7 @@ class _TapGesture extends _TapTracker { ...@@ -281,7 +267,7 @@ class _TapGesture extends _TapTracker {
} }
void reject() { void reject() {
stopTrackingPointer(gestureRecognizer.router, handleEvent); stopTrackingPointer(handleEvent);
gestureRecognizer._resolveTap(pointer, _TapResolution.cancel, null); gestureRecognizer._resolveTap(pointer, _TapResolution.cancel, null);
} }
...@@ -307,24 +293,9 @@ class _TapGesture extends _TapTracker { ...@@ -307,24 +293,9 @@ class _TapGesture extends _TapTracker {
/// taps, on up-1 and up-2. /// taps, on up-1 and up-2.
class MultiTapGestureRecognizer extends GestureRecognizer { class MultiTapGestureRecognizer extends GestureRecognizer {
MultiTapGestureRecognizer({ MultiTapGestureRecognizer({
PointerRouter router, this.longTapDelay: Duration.ZERO
GestureArena gestureArena, });
this.onTapDown,
this.onTapUp,
this.onTap,
this.onTapCancel,
this.longTapDelay: Duration.ZERO,
this.onLongTapDown
}) : _router = router,
_gestureArena = gestureArena {
assert(router != null);
assert(gestureArena != null);
}
PointerRouter get router => _router;
PointerRouter _router;
GestureArena get gestureArena => _gestureArena;
GestureArena _gestureArena;
GestureMultiTapDownCallback onTapDown; GestureMultiTapDownCallback onTapDown;
GestureMultiTapUpCallback onTapUp; GestureMultiTapUpCallback onTapUp;
GestureMultiTapCallback onTap; GestureMultiTapCallback onTap;
...@@ -382,8 +353,6 @@ class MultiTapGestureRecognizer extends GestureRecognizer { ...@@ -382,8 +353,6 @@ class MultiTapGestureRecognizer extends GestureRecognizer {
gesture.cancel(); gesture.cancel();
// Rejection of each gesture should cause it to be removed from our map // Rejection of each gesture should cause it to be removed from our map
assert(_gestureMap.isEmpty); assert(_gestureMap.isEmpty);
_router = null;
_gestureArena = null;
} }
String toStringShort() => 'multitap'; String toStringShort() => 'multitap';
......
...@@ -7,6 +7,7 @@ import 'dart:collection'; ...@@ -7,6 +7,7 @@ import 'dart:collection';
import 'dart:ui' show Point, Offset; import 'dart:ui' show Point, Offset;
import 'arena.dart'; import 'arena.dart';
import 'binding.dart';
import 'constants.dart'; import 'constants.dart';
import 'events.dart'; import 'events.dart';
import 'pointer_router.dart'; import 'pointer_router.dart';
...@@ -56,18 +57,6 @@ abstract class GestureRecognizer extends GestureArenaMember { ...@@ -56,18 +57,6 @@ abstract class GestureRecognizer extends GestureArenaMember {
/// which manages each pointer independently and can consider multiple /// which manages each pointer independently and can consider multiple
/// simultaneous touches to each result in a separate tap. /// simultaneous touches to each result in a separate tap.
abstract class OneSequenceGestureRecognizer extends GestureRecognizer { abstract class OneSequenceGestureRecognizer extends GestureRecognizer {
OneSequenceGestureRecognizer({
PointerRouter router,
GestureArena gestureArena
}) : _router = router,
_gestureArena = gestureArena {
assert(_router != null);
assert(_gestureArena != null);
}
PointerRouter _router;
GestureArena _gestureArena;
final List<GestureArenaEntry> _entries = <GestureArenaEntry>[]; final List<GestureArenaEntry> _entries = <GestureArenaEntry>[];
final Set<int> _trackedPointers = new HashSet<int>(); final Set<int> _trackedPointers = new HashSet<int>();
...@@ -86,21 +75,19 @@ abstract class OneSequenceGestureRecognizer extends GestureRecognizer { ...@@ -86,21 +75,19 @@ abstract class OneSequenceGestureRecognizer extends GestureRecognizer {
void dispose() { void dispose() {
resolve(GestureDisposition.rejected); resolve(GestureDisposition.rejected);
for (int pointer in _trackedPointers) for (int pointer in _trackedPointers)
_router.removeRoute(pointer, handleEvent); Gesturer.instance.pointerRouter.removeRoute(pointer, handleEvent);
_trackedPointers.clear(); _trackedPointers.clear();
assert(_entries.isEmpty); assert(_entries.isEmpty);
_router = null;
_gestureArena = null;
} }
void startTrackingPointer(int pointer) { void startTrackingPointer(int pointer) {
_router.addRoute(pointer, handleEvent); Gesturer.instance.pointerRouter.addRoute(pointer, handleEvent);
_trackedPointers.add(pointer); _trackedPointers.add(pointer);
_entries.add(_gestureArena.add(pointer, this)); _entries.add(Gesturer.instance.gestureArena.add(pointer, this));
} }
void stopTrackingPointer(int pointer) { void stopTrackingPointer(int pointer) {
_router.removeRoute(pointer, handleEvent); Gesturer.instance.pointerRouter.removeRoute(pointer, handleEvent);
_trackedPointers.remove(pointer); _trackedPointers.remove(pointer);
if (_trackedPointers.isEmpty) if (_trackedPointers.isEmpty)
didStopTrackingLastPointer(pointer); didStopTrackingLastPointer(pointer);
...@@ -120,14 +107,7 @@ enum GestureRecognizerState { ...@@ -120,14 +107,7 @@ enum GestureRecognizerState {
} }
abstract class PrimaryPointerGestureRecognizer extends OneSequenceGestureRecognizer { abstract class PrimaryPointerGestureRecognizer extends OneSequenceGestureRecognizer {
PrimaryPointerGestureRecognizer({ PrimaryPointerGestureRecognizer({ this.deadline });
PointerRouter router,
GestureArena gestureArena,
this.deadline
}) : super(
router: router,
gestureArena: gestureArena
);
final Duration deadline; final Duration deadline;
......
...@@ -19,17 +19,6 @@ typedef void GestureScaleUpdateCallback(double scale, Point focalPoint); ...@@ -19,17 +19,6 @@ typedef void GestureScaleUpdateCallback(double scale, Point focalPoint);
typedef void GestureScaleEndCallback(); typedef void GestureScaleEndCallback();
class ScaleGestureRecognizer extends OneSequenceGestureRecognizer { class ScaleGestureRecognizer extends OneSequenceGestureRecognizer {
ScaleGestureRecognizer({
PointerRouter router,
GestureArena gestureArena,
this.onStart,
this.onUpdate,
this.onEnd
}) : super(
router: router,
gestureArena: gestureArena
);
GestureScaleStartCallback onStart; GestureScaleStartCallback onStart;
GestureScaleUpdateCallback onUpdate; GestureScaleUpdateCallback onUpdate;
GestureScaleEndCallback onEnd; GestureScaleEndCallback onEnd;
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
import 'arena.dart'; import 'arena.dart';
import 'constants.dart'; import 'constants.dart';
import 'events.dart'; import 'events.dart';
import 'pointer_router.dart';
import 'recognizer.dart'; import 'recognizer.dart';
typedef void GestureTapDownCallback(Point globalPosition); typedef void GestureTapDownCallback(Point globalPosition);
...@@ -17,18 +16,7 @@ typedef void GestureTapCancelCallback(); ...@@ -17,18 +16,7 @@ typedef void GestureTapCancelCallback();
/// pointer per gesture. That is, during tap recognition, extra pointer events /// pointer per gesture. That is, during tap recognition, extra pointer events
/// are ignored: down-1, down-2, up-1, up-2 produces only one tap on up-1. /// are ignored: down-1, down-2, up-1, up-2 produces only one tap on up-1.
class TapGestureRecognizer extends PrimaryPointerGestureRecognizer { class TapGestureRecognizer extends PrimaryPointerGestureRecognizer {
TapGestureRecognizer({ TapGestureRecognizer() : super(deadline: kPressTimeout);
PointerRouter router,
GestureArena gestureArena,
this.onTapDown,
this.onTapUp,
this.onTap,
this.onTapCancel
}) : super(
router: router,
gestureArena: gestureArena,
deadline: kPressTimeout
);
GestureTapDownCallback onTapDown; GestureTapDownCallback onTapDown;
GestureTapUpCallback onTapUp; GestureTapUpCallback onTapUp;
......
...@@ -84,7 +84,7 @@ class _RenderSlider extends RenderConstrainedBox { ...@@ -84,7 +84,7 @@ class _RenderSlider extends RenderConstrainedBox {
_activeColor = activeColor, _activeColor = activeColor,
super(additionalConstraints: const BoxConstraints.tightFor(width: _kTrackWidth + 2 * _kReactionRadius, height: 2 * _kReactionRadius)) { super(additionalConstraints: const BoxConstraints.tightFor(width: _kTrackWidth + 2 * _kReactionRadius, height: 2 * _kReactionRadius)) {
assert(value != null && value >= 0.0 && value <= 1.0); assert(value != null && value >= 0.0 && value <= 1.0);
_drag = new HorizontalDragGestureRecognizer(router: Gesturer.instance.pointerRouter, gestureArena: Gesturer.instance.gestureArena) _drag = new HorizontalDragGestureRecognizer()
..onStart = _handleDragStart ..onStart = _handleDragStart
..onUpdate = _handleDragUpdate ..onUpdate = _handleDragUpdate
..onEnd = _handleDragEnd; ..onEnd = _handleDragEnd;
......
...@@ -112,7 +112,7 @@ class _RenderSwitch extends RenderToggleable { ...@@ -112,7 +112,7 @@ class _RenderSwitch extends RenderToggleable {
) { ) {
_activeTrackColor = activeTrackColor; _activeTrackColor = activeTrackColor;
_inactiveTrackColor = inactiveTrackColor; _inactiveTrackColor = inactiveTrackColor;
_drag = new HorizontalDragGestureRecognizer(router: Gesturer.instance.pointerRouter, gestureArena: Gesturer.instance.gestureArena) _drag = new HorizontalDragGestureRecognizer()
..onStart = _handleDragStart ..onStart = _handleDragStart
..onUpdate = _handleDragUpdate ..onUpdate = _handleDragUpdate
..onEnd = _handleDragEnd; ..onEnd = _handleDragEnd;
......
...@@ -30,7 +30,7 @@ abstract class RenderToggleable extends RenderConstrainedBox implements Semantic ...@@ -30,7 +30,7 @@ abstract class RenderToggleable extends RenderConstrainedBox implements Semantic
assert(value != null); assert(value != null);
assert(activeColor != null); assert(activeColor != null);
assert(inactiveColor != null); assert(inactiveColor != null);
_tap = new TapGestureRecognizer(router: Gesturer.instance.pointerRouter, gestureArena: Gesturer.instance.gestureArena) _tap = new TapGestureRecognizer()
..onTapDown = _handleTapDown ..onTapDown = _handleTapDown
..onTap = _handleTap ..onTap = _handleTap
..onTapUp = _handleTapUp ..onTapUp = _handleTapUp
......
...@@ -39,7 +39,7 @@ class RenderEditableLine extends RenderBox { ...@@ -39,7 +39,7 @@ class RenderEditableLine extends RenderBox {
..maxWidth = double.INFINITY ..maxWidth = double.INFINITY
..minHeight = 0.0 ..minHeight = 0.0
..maxHeight = double.INFINITY; ..maxHeight = double.INFINITY;
_tap = new TapGestureRecognizer(router: Gesturer.instance.pointerRouter, gestureArena: Gesturer.instance.gestureArena) _tap = new TapGestureRecognizer()
..onTapDown = _handleTapDown ..onTapDown = _handleTapDown
..onTap = _handleTap ..onTap = _handleTap
..onTapCancel = _handleTapCancel; ..onTapCancel = _handleTapCancel;
......
...@@ -82,7 +82,7 @@ abstract class DraggableBase<T> extends StatefulComponent { ...@@ -82,7 +82,7 @@ abstract class DraggableBase<T> extends StatefulComponent {
/// Should return a new MultiDragGestureRecognizer instance /// Should return a new MultiDragGestureRecognizer instance
/// constructed with the given arguments. /// constructed with the given arguments.
MultiDragGestureRecognizer createRecognizer(PointerRouter router, GestureArena arena, GestureMultiDragStartCallback starter); MultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart);
_DraggableState<T> createState() => new _DraggableState<T>(); _DraggableState<T> createState() => new _DraggableState<T>();
} }
...@@ -109,12 +109,8 @@ class Draggable<T> extends DraggableBase<T> { ...@@ -109,12 +109,8 @@ class Draggable<T> extends DraggableBase<T> {
maxSimultaneousDrags: maxSimultaneousDrags maxSimultaneousDrags: maxSimultaneousDrags
); );
MultiDragGestureRecognizer createRecognizer(PointerRouter router, GestureArena arena, GestureMultiDragStartCallback starter) { MultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) {
return new ImmediateMultiDragGestureRecognizer( return new ImmediateMultiDragGestureRecognizer()..onStart = onStart;
pointerRouter: router,
gestureArena: arena,
onStart: starter
);
} }
} }
...@@ -141,12 +137,8 @@ class HorizontalDraggable<T> extends DraggableBase<T> { ...@@ -141,12 +137,8 @@ class HorizontalDraggable<T> extends DraggableBase<T> {
maxSimultaneousDrags: maxSimultaneousDrags maxSimultaneousDrags: maxSimultaneousDrags
); );
MultiDragGestureRecognizer createRecognizer(PointerRouter router, GestureArena arena, GestureMultiDragStartCallback starter) { MultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) {
return new HorizontalMultiDragGestureRecognizer( return new HorizontalMultiDragGestureRecognizer()..onStart = onStart;
pointerRouter: router,
gestureArena: arena,
onStart: starter
);
} }
} }
...@@ -173,12 +165,8 @@ class VerticalDraggable<T> extends DraggableBase<T> { ...@@ -173,12 +165,8 @@ class VerticalDraggable<T> extends DraggableBase<T> {
maxSimultaneousDrags: maxSimultaneousDrags maxSimultaneousDrags: maxSimultaneousDrags
); );
MultiDragGestureRecognizer createRecognizer(PointerRouter router, GestureArena arena, GestureMultiDragStartCallback starter) { MultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) {
return new VerticalMultiDragGestureRecognizer( return new VerticalMultiDragGestureRecognizer()..onStart = onStart;
pointerRouter: router,
gestureArena: arena,
onStart: starter
);
} }
} }
...@@ -204,18 +192,14 @@ class LongPressDraggable<T> extends DraggableBase<T> { ...@@ -204,18 +192,14 @@ class LongPressDraggable<T> extends DraggableBase<T> {
maxSimultaneousDrags: maxSimultaneousDrags maxSimultaneousDrags: maxSimultaneousDrags
); );
MultiDragGestureRecognizer createRecognizer(PointerRouter router, GestureArena arena, GestureMultiDragStartCallback starter) { MultiDragGestureRecognizer createRecognizer(GestureMultiDragStartCallback onStart) {
return new DelayedMultiDragGestureRecognizer( return new DelayedMultiDragGestureRecognizer()
pointerRouter: router, ..onStart = (Point position) {
gestureArena: arena, Drag result = onStart(position);
delay: kLongPressTimeout,
onStart: (Point position) {
Drag result = starter(position);
if (result != null) if (result != null)
userFeedback.performHapticFeedback(HapticFeedbackType.virtualKey); userFeedback.performHapticFeedback(HapticFeedbackType.virtualKey);
return result; return result;
} };
);
} }
} }
...@@ -223,11 +207,7 @@ class _DraggableState<T> extends State<DraggableBase<T>> { ...@@ -223,11 +207,7 @@ class _DraggableState<T> extends State<DraggableBase<T>> {
void initState() { void initState() {
super.initState(); super.initState();
_recognizer = config.createRecognizer( _recognizer = config.createRecognizer(_startDrag);
Gesturer.instance.pointerRouter,
Gesturer.instance.gestureArena,
_startDrag
);
} }
GestureRecognizer _recognizer; GestureRecognizer _recognizer;
......
...@@ -28,7 +28,7 @@ export 'package:flutter/gestures.dart' show ...@@ -28,7 +28,7 @@ export 'package:flutter/gestures.dart' show
GestureScaleEndCallback, GestureScaleEndCallback,
Velocity; Velocity;
typedef GestureRecognizer GestureRecognizerFactory(GestureRecognizer recognizer, PointerRouter router, GestureArena arena); typedef GestureRecognizer GestureRecognizerFactory(GestureRecognizer recognizer);
/// A widget that detects gestures. /// A widget that detects gestures.
/// ///
...@@ -152,8 +152,8 @@ class GestureDetector extends StatelessComponent { ...@@ -152,8 +152,8 @@ class GestureDetector extends StatelessComponent {
Map<Type, GestureRecognizerFactory> gestures = <Type, GestureRecognizerFactory>{}; Map<Type, GestureRecognizerFactory> gestures = <Type, GestureRecognizerFactory>{};
if (onTapDown != null || onTapUp != null || onTap != null || onTapCancel != null) { if (onTapDown != null || onTapUp != null || onTap != null || onTapCancel != null) {
gestures[TapGestureRecognizer] = (TapGestureRecognizer recognizer, PointerRouter router, GestureArena arena) { gestures[TapGestureRecognizer] = (TapGestureRecognizer recognizer) {
return (recognizer ??= new TapGestureRecognizer(router: router, gestureArena: arena)) return (recognizer ??= new TapGestureRecognizer())
..onTapDown = onTapDown ..onTapDown = onTapDown
..onTapUp = onTapUp ..onTapUp = onTapUp
..onTap = onTap ..onTap = onTap
...@@ -162,22 +162,22 @@ class GestureDetector extends StatelessComponent { ...@@ -162,22 +162,22 @@ class GestureDetector extends StatelessComponent {
} }
if (onDoubleTap != null) { if (onDoubleTap != null) {
gestures[DoubleTapGestureRecognizer] = (DoubleTapGestureRecognizer recognizer, PointerRouter router, GestureArena arena) { gestures[DoubleTapGestureRecognizer] = (DoubleTapGestureRecognizer recognizer) {
return (recognizer ??= new DoubleTapGestureRecognizer(router: router, gestureArena: arena)) return (recognizer ??= new DoubleTapGestureRecognizer())
..onDoubleTap = onDoubleTap; ..onDoubleTap = onDoubleTap;
}; };
} }
if (onLongPress != null) { if (onLongPress != null) {
gestures[LongPressGestureRecognizer] = (LongPressGestureRecognizer recognizer, PointerRouter router, GestureArena arena) { gestures[LongPressGestureRecognizer] = (LongPressGestureRecognizer recognizer) {
return (recognizer ??= new LongPressGestureRecognizer(router: router, gestureArena: arena)) return (recognizer ??= new LongPressGestureRecognizer())
..onLongPress = onLongPress; ..onLongPress = onLongPress;
}; };
} }
if (onVerticalDragStart != null || onVerticalDragUpdate != null || onVerticalDragEnd != null) { if (onVerticalDragStart != null || onVerticalDragUpdate != null || onVerticalDragEnd != null) {
gestures[VerticalDragGestureRecognizer] = (VerticalDragGestureRecognizer recognizer, PointerRouter router, GestureArena arena) { gestures[VerticalDragGestureRecognizer] = (VerticalDragGestureRecognizer recognizer) {
return (recognizer ??= new VerticalDragGestureRecognizer(router: router, gestureArena: arena)) return (recognizer ??= new VerticalDragGestureRecognizer())
..onStart = onVerticalDragStart ..onStart = onVerticalDragStart
..onUpdate = onVerticalDragUpdate ..onUpdate = onVerticalDragUpdate
..onEnd = onVerticalDragEnd; ..onEnd = onVerticalDragEnd;
...@@ -185,8 +185,8 @@ class GestureDetector extends StatelessComponent { ...@@ -185,8 +185,8 @@ class GestureDetector extends StatelessComponent {
} }
if (onHorizontalDragStart != null || onHorizontalDragUpdate != null || onHorizontalDragEnd != null) { if (onHorizontalDragStart != null || onHorizontalDragUpdate != null || onHorizontalDragEnd != null) {
gestures[HorizontalDragGestureRecognizer] = (HorizontalDragGestureRecognizer recognizer, PointerRouter router, GestureArena arena) { gestures[HorizontalDragGestureRecognizer] = (HorizontalDragGestureRecognizer recognizer) {
return (recognizer ??= new HorizontalDragGestureRecognizer(router: router, gestureArena: arena)) return (recognizer ??= new HorizontalDragGestureRecognizer())
..onStart = onHorizontalDragStart ..onStart = onHorizontalDragStart
..onUpdate = onHorizontalDragUpdate ..onUpdate = onHorizontalDragUpdate
..onEnd = onHorizontalDragEnd; ..onEnd = onHorizontalDragEnd;
...@@ -194,8 +194,8 @@ class GestureDetector extends StatelessComponent { ...@@ -194,8 +194,8 @@ class GestureDetector extends StatelessComponent {
} }
if (onPanStart != null || onPanUpdate != null || onPanEnd != null) { if (onPanStart != null || onPanUpdate != null || onPanEnd != null) {
gestures[PanGestureRecognizer] = (PanGestureRecognizer recognizer, PointerRouter router, GestureArena arena) { gestures[PanGestureRecognizer] = (PanGestureRecognizer recognizer) {
return (recognizer ??= new PanGestureRecognizer(router: router, gestureArena: arena)) return (recognizer ??= new PanGestureRecognizer())
..onStart = onPanStart ..onStart = onPanStart
..onUpdate = onPanUpdate ..onUpdate = onPanUpdate
..onEnd = onPanEnd; ..onEnd = onPanEnd;
...@@ -203,8 +203,8 @@ class GestureDetector extends StatelessComponent { ...@@ -203,8 +203,8 @@ class GestureDetector extends StatelessComponent {
} }
if (onScaleStart != null || onScaleUpdate != null || onScaleEnd != null) { if (onScaleStart != null || onScaleUpdate != null || onScaleEnd != null) {
gestures[ScaleGestureRecognizer] = (ScaleGestureRecognizer recognizer, PointerRouter router, GestureArena arena) { gestures[ScaleGestureRecognizer] = (ScaleGestureRecognizer recognizer) {
return (recognizer ??= new ScaleGestureRecognizer(router: router, gestureArena: arena)) return (recognizer ??= new ScaleGestureRecognizer())
..onStart = onScaleStart ..onStart = onScaleStart
..onUpdate = onScaleUpdate ..onUpdate = onScaleUpdate
..onEnd = onScaleEnd; ..onEnd = onScaleEnd;
...@@ -314,14 +314,12 @@ class RawGestureDetectorState extends State<RawGestureDetector> { ...@@ -314,14 +314,12 @@ class RawGestureDetectorState extends State<RawGestureDetector> {
} }
void _syncAll(Map<Type, GestureRecognizerFactory> gestures) { void _syncAll(Map<Type, GestureRecognizerFactory> gestures) {
final PointerRouter pointerRouter = Gesturer.instance.pointerRouter;
final GestureArena gestureArena = Gesturer.instance.gestureArena;
assert(_recognizers != null); assert(_recognizers != null);
Map<Type, GestureRecognizer> oldRecognizers = _recognizers; Map<Type, GestureRecognizer> oldRecognizers = _recognizers;
_recognizers = <Type, GestureRecognizer>{}; _recognizers = <Type, GestureRecognizer>{};
for (Type type in gestures.keys) { for (Type type in gestures.keys) {
assert(!_recognizers.containsKey(type)); assert(!_recognizers.containsKey(type));
_recognizers[type] = gestures[type](oldRecognizers[type], pointerRouter, gestureArena); _recognizers[type] = gestures[type](oldRecognizers[type]);
assert(_recognizers[type].runtimeType == type); assert(_recognizers[type].runtimeType == type);
} }
for (Type type in oldRecognizers.keys) { for (Type type in oldRecognizers.keys) {
......
...@@ -6,6 +6,8 @@ import 'package:flutter/gestures.dart'; ...@@ -6,6 +6,8 @@ import 'package:flutter/gestures.dart';
import 'package:quiver/testing/async.dart'; import 'package:quiver/testing/async.dart';
import 'package:test/test.dart'; import 'package:test/test.dart';
import 'gesture_tester.dart';
class TestGestureArenaMember extends GestureArenaMember { class TestGestureArenaMember extends GestureArenaMember {
void acceptGesture(Object key) { void acceptGesture(Object key) {
accepted = true; accepted = true;
...@@ -18,6 +20,7 @@ class TestGestureArenaMember extends GestureArenaMember { ...@@ -18,6 +20,7 @@ class TestGestureArenaMember extends GestureArenaMember {
} }
void main() { void main() {
setUp(ensureGesturer);
// Down/up pair 1: normal tap sequence // Down/up pair 1: normal tap sequence
const PointerDownEvent down1 = const PointerDownEvent( const PointerDownEvent down1 = const PointerDownEvent(
...@@ -80,12 +83,7 @@ void main() { ...@@ -80,12 +83,7 @@ void main() {
); );
test('Should recognize double tap', () { test('Should recognize double tap', () {
PointerRouter router = new PointerRouter(); DoubleTapGestureRecognizer tap = new DoubleTapGestureRecognizer();
GestureArena gestureArena = new GestureArena();
DoubleTapGestureRecognizer tap = new DoubleTapGestureRecognizer(
router: router,
gestureArena: gestureArena
);
bool doubleTapRecognized = false; bool doubleTapRecognized = false;
tap.onDoubleTap = () { tap.onDoubleTap = () {
...@@ -93,37 +91,32 @@ void main() { ...@@ -93,37 +91,32 @@ void main() {
}; };
tap.addPointer(down1); tap.addPointer(down1);
gestureArena.close(1); Gesturer.instance.gestureArena.close(1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(down1); Gesturer.instance.pointerRouter.route(down1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(up1); Gesturer.instance.pointerRouter.route(up1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
gestureArena.sweep(1); Gesturer.instance.gestureArena.sweep(1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
tap.addPointer(down2); tap.addPointer(down2);
gestureArena.close(2); Gesturer.instance.gestureArena.close(2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(down2); Gesturer.instance.pointerRouter.route(down2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(up2); Gesturer.instance.pointerRouter.route(up2);
expect(doubleTapRecognized, isTrue); expect(doubleTapRecognized, isTrue);
gestureArena.sweep(2); Gesturer.instance.gestureArena.sweep(2);
expect(doubleTapRecognized, isTrue); expect(doubleTapRecognized, isTrue);
tap.dispose(); tap.dispose();
}); });
test('Inter-tap distance cancels double tap', () { test('Inter-tap distance cancels double tap', () {
PointerRouter router = new PointerRouter(); DoubleTapGestureRecognizer tap = new DoubleTapGestureRecognizer();
GestureArena gestureArena = new GestureArena();
DoubleTapGestureRecognizer tap = new DoubleTapGestureRecognizer(
router: router,
gestureArena: gestureArena
);
bool doubleTapRecognized = false; bool doubleTapRecognized = false;
tap.onDoubleTap = () { tap.onDoubleTap = () {
...@@ -131,37 +124,32 @@ void main() { ...@@ -131,37 +124,32 @@ void main() {
}; };
tap.addPointer(down1); tap.addPointer(down1);
gestureArena.close(1); Gesturer.instance.gestureArena.close(1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(down1); Gesturer.instance.pointerRouter.route(down1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(up1); Gesturer.instance.pointerRouter.route(up1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
gestureArena.sweep(1); Gesturer.instance.gestureArena.sweep(1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
tap.addPointer(down3); tap.addPointer(down3);
gestureArena.close(3); Gesturer.instance.gestureArena.close(3);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(down3); Gesturer.instance.pointerRouter.route(down3);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(up3); Gesturer.instance.pointerRouter.route(up3);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
gestureArena.sweep(3); Gesturer.instance.gestureArena.sweep(3);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
tap.dispose(); tap.dispose();
}); });
test('Intra-tap distance cancels double tap', () { test('Intra-tap distance cancels double tap', () {
PointerRouter router = new PointerRouter(); DoubleTapGestureRecognizer tap = new DoubleTapGestureRecognizer();
GestureArena gestureArena = new GestureArena();
DoubleTapGestureRecognizer tap = new DoubleTapGestureRecognizer(
router: router,
gestureArena: gestureArena
);
bool doubleTapRecognized = false; bool doubleTapRecognized = false;
tap.onDoubleTap = () { tap.onDoubleTap = () {
...@@ -169,39 +157,34 @@ void main() { ...@@ -169,39 +157,34 @@ void main() {
}; };
tap.addPointer(down4); tap.addPointer(down4);
gestureArena.close(4); Gesturer.instance.gestureArena.close(4);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(down4); Gesturer.instance.pointerRouter.route(down4);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(move4); Gesturer.instance.pointerRouter.route(move4);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(up4); Gesturer.instance.pointerRouter.route(up4);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
gestureArena.sweep(4); Gesturer.instance.gestureArena.sweep(4);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
tap.addPointer(down1); tap.addPointer(down1);
gestureArena.close(1); Gesturer.instance.gestureArena.close(1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(down2); Gesturer.instance.pointerRouter.route(down2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(up1); Gesturer.instance.pointerRouter.route(up1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
gestureArena.sweep(1); Gesturer.instance.gestureArena.sweep(1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
tap.dispose(); tap.dispose();
}); });
test('Inter-tap delay cancels double tap', () { test('Inter-tap delay cancels double tap', () {
PointerRouter router = new PointerRouter(); DoubleTapGestureRecognizer tap = new DoubleTapGestureRecognizer();
GestureArena gestureArena = new GestureArena();
DoubleTapGestureRecognizer tap = new DoubleTapGestureRecognizer(
router: router,
gestureArena: gestureArena
);
bool doubleTapRecognized = false; bool doubleTapRecognized = false;
tap.onDoubleTap = () { tap.onDoubleTap = () {
...@@ -210,26 +193,26 @@ void main() { ...@@ -210,26 +193,26 @@ void main() {
new FakeAsync().run((FakeAsync async) { new FakeAsync().run((FakeAsync async) {
tap.addPointer(down1); tap.addPointer(down1);
gestureArena.close(1); Gesturer.instance.gestureArena.close(1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(down1); Gesturer.instance.pointerRouter.route(down1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(up1); Gesturer.instance.pointerRouter.route(up1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
gestureArena.sweep(1); Gesturer.instance.gestureArena.sweep(1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
async.elapse(new Duration(milliseconds: 5000)); async.elapse(new Duration(milliseconds: 5000));
tap.addPointer(down2); tap.addPointer(down2);
gestureArena.close(2); Gesturer.instance.gestureArena.close(2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(down2); Gesturer.instance.pointerRouter.route(down2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(up2); Gesturer.instance.pointerRouter.route(up2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
gestureArena.sweep(2); Gesturer.instance.gestureArena.sweep(2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
}); });
...@@ -237,12 +220,7 @@ void main() { ...@@ -237,12 +220,7 @@ void main() {
}); });
test('Inter-tap delay resets double tap, allowing third tap to be a double-tap', () { test('Inter-tap delay resets double tap, allowing third tap to be a double-tap', () {
PointerRouter router = new PointerRouter(); DoubleTapGestureRecognizer tap = new DoubleTapGestureRecognizer();
GestureArena gestureArena = new GestureArena();
DoubleTapGestureRecognizer tap = new DoubleTapGestureRecognizer(
router: router,
gestureArena: gestureArena
);
bool doubleTapRecognized = false; bool doubleTapRecognized = false;
tap.onDoubleTap = () { tap.onDoubleTap = () {
...@@ -251,38 +229,38 @@ void main() { ...@@ -251,38 +229,38 @@ void main() {
new FakeAsync().run((FakeAsync async) { new FakeAsync().run((FakeAsync async) {
tap.addPointer(down1); tap.addPointer(down1);
gestureArena.close(1); Gesturer.instance.gestureArena.close(1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(down1); Gesturer.instance.pointerRouter.route(down1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(up1); Gesturer.instance.pointerRouter.route(up1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
gestureArena.sweep(1); Gesturer.instance.gestureArena.sweep(1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
async.elapse(new Duration(milliseconds: 5000)); async.elapse(new Duration(milliseconds: 5000));
tap.addPointer(down2); tap.addPointer(down2);
gestureArena.close(2); Gesturer.instance.gestureArena.close(2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(down2); Gesturer.instance.pointerRouter.route(down2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(up2); Gesturer.instance.pointerRouter.route(up2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
gestureArena.sweep(2); Gesturer.instance.gestureArena.sweep(2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
async.elapse(new Duration(milliseconds: 100)); async.elapse(new Duration(milliseconds: 100));
tap.addPointer(down5); tap.addPointer(down5);
gestureArena.close(5); Gesturer.instance.gestureArena.close(5);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(down5); Gesturer.instance.pointerRouter.route(down5);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(up5); Gesturer.instance.pointerRouter.route(up5);
expect(doubleTapRecognized, isTrue); expect(doubleTapRecognized, isTrue);
gestureArena.sweep(5); Gesturer.instance.gestureArena.sweep(5);
expect(doubleTapRecognized, isTrue); expect(doubleTapRecognized, isTrue);
}); });
...@@ -290,12 +268,7 @@ void main() { ...@@ -290,12 +268,7 @@ void main() {
}); });
test('Intra-tap delay does not cancel double tap', () { test('Intra-tap delay does not cancel double tap', () {
PointerRouter router = new PointerRouter(); DoubleTapGestureRecognizer tap = new DoubleTapGestureRecognizer();
GestureArena gestureArena = new GestureArena();
DoubleTapGestureRecognizer tap = new DoubleTapGestureRecognizer(
router: router,
gestureArena: gestureArena
);
bool doubleTapRecognized = false; bool doubleTapRecognized = false;
tap.onDoubleTap = () { tap.onDoubleTap = () {
...@@ -304,26 +277,26 @@ void main() { ...@@ -304,26 +277,26 @@ void main() {
new FakeAsync().run((FakeAsync async) { new FakeAsync().run((FakeAsync async) {
tap.addPointer(down1); tap.addPointer(down1);
gestureArena.close(1); Gesturer.instance.gestureArena.close(1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(down1); Gesturer.instance.pointerRouter.route(down1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
async.elapse(new Duration(milliseconds: 1000)); async.elapse(new Duration(milliseconds: 1000));
router.route(up1); Gesturer.instance.pointerRouter.route(up1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
gestureArena.sweep(1); Gesturer.instance.gestureArena.sweep(1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
tap.addPointer(down2); tap.addPointer(down2);
gestureArena.close(2); Gesturer.instance.gestureArena.close(2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(down2); Gesturer.instance.pointerRouter.route(down2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(up2); Gesturer.instance.pointerRouter.route(up2);
expect(doubleTapRecognized, isTrue); expect(doubleTapRecognized, isTrue);
gestureArena.sweep(2); Gesturer.instance.gestureArena.sweep(2);
expect(doubleTapRecognized, isTrue); expect(doubleTapRecognized, isTrue);
}); });
...@@ -331,12 +304,7 @@ void main() { ...@@ -331,12 +304,7 @@ void main() {
}); });
test('Should not recognize two overlapping taps', () { test('Should not recognize two overlapping taps', () {
PointerRouter router = new PointerRouter(); DoubleTapGestureRecognizer tap = new DoubleTapGestureRecognizer();
GestureArena gestureArena = new GestureArena();
DoubleTapGestureRecognizer tap = new DoubleTapGestureRecognizer(
router: router,
gestureArena: gestureArena
);
bool doubleTapRecognized = false; bool doubleTapRecognized = false;
tap.onDoubleTap = () { tap.onDoubleTap = () {
...@@ -344,37 +312,32 @@ void main() { ...@@ -344,37 +312,32 @@ void main() {
}; };
tap.addPointer(down1); tap.addPointer(down1);
gestureArena.close(1); Gesturer.instance.gestureArena.close(1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(down1); Gesturer.instance.pointerRouter.route(down1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
tap.addPointer(down2); tap.addPointer(down2);
gestureArena.close(2); Gesturer.instance.gestureArena.close(2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(down1); Gesturer.instance.pointerRouter.route(down1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(up1); Gesturer.instance.pointerRouter.route(up1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
gestureArena.sweep(1); Gesturer.instance.gestureArena.sweep(1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(up2); Gesturer.instance.pointerRouter.route(up2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
gestureArena.sweep(2); Gesturer.instance.gestureArena.sweep(2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
tap.dispose(); tap.dispose();
}); });
test('Should recognize one tap of group followed by second tap', () { test('Should recognize one tap of group followed by second tap', () {
PointerRouter router = new PointerRouter(); DoubleTapGestureRecognizer tap = new DoubleTapGestureRecognizer();
GestureArena gestureArena = new GestureArena();
DoubleTapGestureRecognizer tap = new DoubleTapGestureRecognizer(
router: router,
gestureArena: gestureArena
);
bool doubleTapRecognized = false; bool doubleTapRecognized = false;
tap.onDoubleTap = () { tap.onDoubleTap = () {
...@@ -382,36 +345,36 @@ void main() { ...@@ -382,36 +345,36 @@ void main() {
}; };
tap.addPointer(down1); tap.addPointer(down1);
gestureArena.close(1); Gesturer.instance.gestureArena.close(1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(down1); Gesturer.instance.pointerRouter.route(down1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
tap.addPointer(down2); tap.addPointer(down2);
gestureArena.close(2); Gesturer.instance.gestureArena.close(2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(down1); Gesturer.instance.pointerRouter.route(down1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(up1); Gesturer.instance.pointerRouter.route(up1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
gestureArena.sweep(1); Gesturer.instance.gestureArena.sweep(1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(up2); Gesturer.instance.pointerRouter.route(up2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
gestureArena.sweep(2); Gesturer.instance.gestureArena.sweep(2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
tap.addPointer(down1); tap.addPointer(down1);
gestureArena.close(1); Gesturer.instance.gestureArena.close(1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(down1); Gesturer.instance.pointerRouter.route(down1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(up1); Gesturer.instance.pointerRouter.route(up1);
expect(doubleTapRecognized, isTrue); expect(doubleTapRecognized, isTrue);
gestureArena.sweep(1); Gesturer.instance.gestureArena.sweep(1);
expect(doubleTapRecognized, isTrue); expect(doubleTapRecognized, isTrue);
tap.dispose(); tap.dispose();
...@@ -419,12 +382,7 @@ void main() { ...@@ -419,12 +382,7 @@ void main() {
}); });
test('Should cancel on arena reject during first tap', () { test('Should cancel on arena reject during first tap', () {
PointerRouter router = new PointerRouter(); DoubleTapGestureRecognizer tap = new DoubleTapGestureRecognizer();
GestureArena gestureArena = new GestureArena();
DoubleTapGestureRecognizer tap = new DoubleTapGestureRecognizer(
router: router,
gestureArena: gestureArena
);
bool doubleTapRecognized = false; bool doubleTapRecognized = false;
tap.onDoubleTap = () { tap.onDoubleTap = () {
...@@ -433,41 +391,36 @@ void main() { ...@@ -433,41 +391,36 @@ void main() {
tap.addPointer(down1); tap.addPointer(down1);
TestGestureArenaMember member = new TestGestureArenaMember(); TestGestureArenaMember member = new TestGestureArenaMember();
GestureArenaEntry entry = gestureArena.add(1, member); GestureArenaEntry entry = Gesturer.instance.gestureArena.add(1, member);
gestureArena.close(1); Gesturer.instance.gestureArena.close(1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(down1); Gesturer.instance.pointerRouter.route(down1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(up1); Gesturer.instance.pointerRouter.route(up1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
entry.resolve(GestureDisposition.accepted); entry.resolve(GestureDisposition.accepted);
expect(member.accepted, isTrue); expect(member.accepted, isTrue);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
gestureArena.sweep(1); Gesturer.instance.gestureArena.sweep(1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
tap.addPointer(down2); tap.addPointer(down2);
gestureArena.close(2); Gesturer.instance.gestureArena.close(2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(down2); Gesturer.instance.pointerRouter.route(down2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(up2); Gesturer.instance.pointerRouter.route(up2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
gestureArena.sweep(2); Gesturer.instance.gestureArena.sweep(2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
tap.dispose(); tap.dispose();
}); });
test('Should cancel on arena reject between taps', () { test('Should cancel on arena reject between taps', () {
PointerRouter router = new PointerRouter(); DoubleTapGestureRecognizer tap = new DoubleTapGestureRecognizer();
GestureArena gestureArena = new GestureArena();
DoubleTapGestureRecognizer tap = new DoubleTapGestureRecognizer(
router: router,
gestureArena: gestureArena
);
bool doubleTapRecognized = false; bool doubleTapRecognized = false;
tap.onDoubleTap = () { tap.onDoubleTap = () {
...@@ -476,41 +429,36 @@ void main() { ...@@ -476,41 +429,36 @@ void main() {
tap.addPointer(down1); tap.addPointer(down1);
TestGestureArenaMember member = new TestGestureArenaMember(); TestGestureArenaMember member = new TestGestureArenaMember();
GestureArenaEntry entry = gestureArena.add(1, member); GestureArenaEntry entry = Gesturer.instance.gestureArena.add(1, member);
gestureArena.close(1); Gesturer.instance.gestureArena.close(1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(down1); Gesturer.instance.pointerRouter.route(down1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(up1); Gesturer.instance.pointerRouter.route(up1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
gestureArena.sweep(1); Gesturer.instance.gestureArena.sweep(1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
entry.resolve(GestureDisposition.accepted); entry.resolve(GestureDisposition.accepted);
expect(member.accepted, isTrue); expect(member.accepted, isTrue);
tap.addPointer(down2); tap.addPointer(down2);
gestureArena.close(2); Gesturer.instance.gestureArena.close(2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(down2); Gesturer.instance.pointerRouter.route(down2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(up2); Gesturer.instance.pointerRouter.route(up2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
gestureArena.sweep(2); Gesturer.instance.gestureArena.sweep(2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
tap.dispose(); tap.dispose();
}); });
test('Should cancel on arena reject during last tap', () { test('Should cancel on arena reject during last tap', () {
PointerRouter router = new PointerRouter(); DoubleTapGestureRecognizer tap = new DoubleTapGestureRecognizer();
GestureArena gestureArena = new GestureArena();
DoubleTapGestureRecognizer tap = new DoubleTapGestureRecognizer(
router: router,
gestureArena: gestureArena
);
bool doubleTapRecognized = false; bool doubleTapRecognized = false;
tap.onDoubleTap = () { tap.onDoubleTap = () {
...@@ -519,41 +467,36 @@ void main() { ...@@ -519,41 +467,36 @@ void main() {
tap.addPointer(down1); tap.addPointer(down1);
TestGestureArenaMember member = new TestGestureArenaMember(); TestGestureArenaMember member = new TestGestureArenaMember();
GestureArenaEntry entry = gestureArena.add(1, member); GestureArenaEntry entry = Gesturer.instance.gestureArena.add(1, member);
gestureArena.close(1); Gesturer.instance.gestureArena.close(1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(down1); Gesturer.instance.pointerRouter.route(down1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(up1); Gesturer.instance.pointerRouter.route(up1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
gestureArena.sweep(1); Gesturer.instance.gestureArena.sweep(1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
tap.addPointer(down2); tap.addPointer(down2);
gestureArena.close(2); Gesturer.instance.gestureArena.close(2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(down2); Gesturer.instance.pointerRouter.route(down2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
entry.resolve(GestureDisposition.accepted); entry.resolve(GestureDisposition.accepted);
expect(member.accepted, isTrue); expect(member.accepted, isTrue);
router.route(up2); Gesturer.instance.pointerRouter.route(up2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
gestureArena.sweep(2); Gesturer.instance.gestureArena.sweep(2);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
tap.dispose(); tap.dispose();
}); });
test('Passive gesture should trigger on double tap cancel', () { test('Passive gesture should trigger on double tap cancel', () {
PointerRouter router = new PointerRouter(); DoubleTapGestureRecognizer tap = new DoubleTapGestureRecognizer();
GestureArena gestureArena = new GestureArena();
DoubleTapGestureRecognizer tap = new DoubleTapGestureRecognizer(
router: router,
gestureArena: gestureArena
);
bool doubleTapRecognized = false; bool doubleTapRecognized = false;
tap.onDoubleTap = () { tap.onDoubleTap = () {
...@@ -563,15 +506,15 @@ void main() { ...@@ -563,15 +506,15 @@ void main() {
new FakeAsync().run((FakeAsync async) { new FakeAsync().run((FakeAsync async) {
tap.addPointer(down1); tap.addPointer(down1);
TestGestureArenaMember member = new TestGestureArenaMember(); TestGestureArenaMember member = new TestGestureArenaMember();
gestureArena.add(1, member); Gesturer.instance.gestureArena.add(1, member);
gestureArena.close(1); Gesturer.instance.gestureArena.close(1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(down1); Gesturer.instance.pointerRouter.route(down1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
router.route(up1); Gesturer.instance.pointerRouter.route(up1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
gestureArena.sweep(1); Gesturer.instance.gestureArena.sweep(1);
expect(doubleTapRecognized, isFalse); expect(doubleTapRecognized, isFalse);
expect(member.accepted, isFalse); expect(member.accepted, isFalse);
......
// 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:flutter/services.dart';
import 'package:flutter/gestures.dart';
class TestGestureFlutterBinding extends BindingBase with Gesturer { }
void ensureGesturer() {
if (Gesturer.instance == null)
new TestGestureFlutterBinding();
assert(Gesturer.instance != null);
}
...@@ -6,6 +6,8 @@ import 'package:quiver/testing/async.dart'; ...@@ -6,6 +6,8 @@ import 'package:quiver/testing/async.dart';
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
import 'package:test/test.dart'; import 'package:test/test.dart';
import 'gesture_tester.dart';
const PointerDownEvent down = const PointerDownEvent( const PointerDownEvent down = const PointerDownEvent(
pointer: 5, pointer: 5,
position: const Point(10.0, 10.0) position: const Point(10.0, 10.0)
...@@ -17,13 +19,10 @@ const PointerUpEvent up = const PointerUpEvent( ...@@ -17,13 +19,10 @@ const PointerUpEvent up = const PointerUpEvent(
); );
void main() { void main() {
setUp(ensureGesturer);
test('Should recognize long press', () { test('Should recognize long press', () {
PointerRouter router = new PointerRouter(); LongPressGestureRecognizer longPress = new LongPressGestureRecognizer();
GestureArena gestureArena = new GestureArena();
LongPressGestureRecognizer longPress = new LongPressGestureRecognizer(
router: router,
gestureArena: gestureArena
);
bool longPressRecognized = false; bool longPressRecognized = false;
longPress.onLongPress = () { longPress.onLongPress = () {
...@@ -32,9 +31,9 @@ void main() { ...@@ -32,9 +31,9 @@ void main() {
new FakeAsync().run((FakeAsync async) { new FakeAsync().run((FakeAsync async) {
longPress.addPointer(down); longPress.addPointer(down);
gestureArena.close(5); Gesturer.instance.gestureArena.close(5);
expect(longPressRecognized, isFalse); expect(longPressRecognized, isFalse);
router.route(down); Gesturer.instance.pointerRouter.route(down);
expect(longPressRecognized, isFalse); expect(longPressRecognized, isFalse);
async.elapse(const Duration(milliseconds: 300)); async.elapse(const Duration(milliseconds: 300));
expect(longPressRecognized, isFalse); expect(longPressRecognized, isFalse);
...@@ -46,12 +45,7 @@ void main() { ...@@ -46,12 +45,7 @@ void main() {
}); });
test('Up cancels long press', () { test('Up cancels long press', () {
PointerRouter router = new PointerRouter(); LongPressGestureRecognizer longPress = new LongPressGestureRecognizer();
GestureArena gestureArena = new GestureArena();
LongPressGestureRecognizer longPress = new LongPressGestureRecognizer(
router: router,
gestureArena: gestureArena
);
bool longPressRecognized = false; bool longPressRecognized = false;
longPress.onLongPress = () { longPress.onLongPress = () {
...@@ -60,13 +54,13 @@ void main() { ...@@ -60,13 +54,13 @@ void main() {
new FakeAsync().run((FakeAsync async) { new FakeAsync().run((FakeAsync async) {
longPress.addPointer(down); longPress.addPointer(down);
gestureArena.close(5); Gesturer.instance.gestureArena.close(5);
expect(longPressRecognized, isFalse); expect(longPressRecognized, isFalse);
router.route(down); Gesturer.instance.pointerRouter.route(down);
expect(longPressRecognized, isFalse); expect(longPressRecognized, isFalse);
async.elapse(const Duration(milliseconds: 300)); async.elapse(const Duration(milliseconds: 300));
expect(longPressRecognized, isFalse); expect(longPressRecognized, isFalse);
router.route(up); Gesturer.instance.pointerRouter.route(up);
expect(longPressRecognized, isFalse); expect(longPressRecognized, isFalse);
async.elapse(const Duration(seconds: 1)); async.elapse(const Duration(seconds: 1));
expect(longPressRecognized, isFalse); expect(longPressRecognized, isFalse);
...@@ -76,16 +70,8 @@ void main() { ...@@ -76,16 +70,8 @@ void main() {
}); });
test('Should recognize both tap down and long press', () { test('Should recognize both tap down and long press', () {
PointerRouter router = new PointerRouter(); LongPressGestureRecognizer longPress = new LongPressGestureRecognizer();
GestureArena gestureArena = new GestureArena(); TapGestureRecognizer tap = new TapGestureRecognizer();
LongPressGestureRecognizer longPress = new LongPressGestureRecognizer(
router: router,
gestureArena: gestureArena
);
TapGestureRecognizer tap = new TapGestureRecognizer(
router: router,
gestureArena: gestureArena
);
bool tapDownRecognized = false; bool tapDownRecognized = false;
tap.onTapDown = (_) { tap.onTapDown = (_) {
...@@ -100,10 +86,10 @@ void main() { ...@@ -100,10 +86,10 @@ void main() {
new FakeAsync().run((FakeAsync async) { new FakeAsync().run((FakeAsync async) {
tap.addPointer(down); tap.addPointer(down);
longPress.addPointer(down); longPress.addPointer(down);
gestureArena.close(5); Gesturer.instance.gestureArena.close(5);
expect(tapDownRecognized, isFalse); expect(tapDownRecognized, isFalse);
expect(longPressRecognized, isFalse); expect(longPressRecognized, isFalse);
router.route(down); Gesturer.instance.pointerRouter.route(down);
expect(tapDownRecognized, isFalse); expect(tapDownRecognized, isFalse);
expect(longPressRecognized, isFalse); expect(longPressRecognized, isFalse);
async.elapse(const Duration(milliseconds: 300)); async.elapse(const Duration(milliseconds: 300));
......
...@@ -6,18 +6,16 @@ import 'package:flutter_test/flutter_test.dart'; ...@@ -6,18 +6,16 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
import 'package:test/test.dart'; import 'package:test/test.dart';
import 'gesture_tester.dart';
void main() { void main() {
setUp(ensureGesturer);
test('Should recognize scale gestures', () { test('Should recognize scale gestures', () {
PointerRouter router = new PointerRouter(); GestureArena gestureArena = Gesturer.instance.gestureArena;
GestureArena gestureArena = new GestureArena(); PointerRouter pointerRouter = Gesturer.instance.pointerRouter;
ScaleGestureRecognizer scale = new ScaleGestureRecognizer( ScaleGestureRecognizer scale = new ScaleGestureRecognizer();
router: router, TapGestureRecognizer tap = new TapGestureRecognizer();
gestureArena: gestureArena
);
TapGestureRecognizer tap = new TapGestureRecognizer(
router: router,
gestureArena: gestureArena
);
bool didStartScale = false; bool didStartScale = false;
Point updatedFocalPoint; Point updatedFocalPoint;
...@@ -56,14 +54,14 @@ void main() { ...@@ -56,14 +54,14 @@ void main() {
expect(didTap, isFalse); expect(didTap, isFalse);
// One-finger panning // One-finger panning
router.route(down); pointerRouter.route(down);
expect(didStartScale, isFalse); expect(didStartScale, isFalse);
expect(updatedScale, isNull); expect(updatedScale, isNull);
expect(updatedFocalPoint, isNull); expect(updatedFocalPoint, isNull);
expect(didEndScale, isFalse); expect(didEndScale, isFalse);
expect(didTap, isFalse); expect(didTap, isFalse);
router.route(pointer1.move(const Point(20.0, 30.0))); pointerRouter.route(pointer1.move(const Point(20.0, 30.0)));
expect(didStartScale, isTrue); expect(didStartScale, isTrue);
didStartScale = false; didStartScale = false;
expect(updatedFocalPoint, const Point(20.0, 30.0)); expect(updatedFocalPoint, const Point(20.0, 30.0));
...@@ -79,7 +77,7 @@ void main() { ...@@ -79,7 +77,7 @@ void main() {
scale.addPointer(down2); scale.addPointer(down2);
tap.addPointer(down2); tap.addPointer(down2);
gestureArena.close(2); gestureArena.close(2);
router.route(down2); pointerRouter.route(down2);
expect(didEndScale, isTrue); expect(didEndScale, isTrue);
didEndScale = false; didEndScale = false;
...@@ -88,7 +86,7 @@ void main() { ...@@ -88,7 +86,7 @@ void main() {
expect(didStartScale, isFalse); expect(didStartScale, isFalse);
// Zoom in // Zoom in
router.route(pointer2.move(const Point(0.0, 10.0))); pointerRouter.route(pointer2.move(const Point(0.0, 10.0)));
expect(didStartScale, isTrue); expect(didStartScale, isTrue);
didStartScale = false; didStartScale = false;
expect(updatedFocalPoint, const Point(10.0, 20.0)); expect(updatedFocalPoint, const Point(10.0, 20.0));
...@@ -99,7 +97,7 @@ void main() { ...@@ -99,7 +97,7 @@ void main() {
expect(didTap, isFalse); expect(didTap, isFalse);
// Zoom out // Zoom out
router.route(pointer2.move(const Point(15.0, 25.0))); pointerRouter.route(pointer2.move(const Point(15.0, 25.0)));
expect(updatedFocalPoint, const Point(17.5, 27.5)); expect(updatedFocalPoint, const Point(17.5, 27.5));
updatedFocalPoint = null; updatedFocalPoint = null;
expect(updatedScale, 0.5); expect(updatedScale, 0.5);
...@@ -112,7 +110,7 @@ void main() { ...@@ -112,7 +110,7 @@ void main() {
scale.addPointer(down3); scale.addPointer(down3);
tap.addPointer(down3); tap.addPointer(down3);
gestureArena.close(3); gestureArena.close(3);
router.route(down3); pointerRouter.route(down3);
expect(didEndScale, isTrue); expect(didEndScale, isTrue);
didEndScale = false; didEndScale = false;
...@@ -121,7 +119,7 @@ void main() { ...@@ -121,7 +119,7 @@ void main() {
expect(didStartScale, isFalse); expect(didStartScale, isFalse);
// Zoom in // Zoom in
router.route(pointer3.move(const Point(55.0, 65.0))); pointerRouter.route(pointer3.move(const Point(55.0, 65.0)));
expect(didStartScale, isTrue); expect(didStartScale, isTrue);
didStartScale = false; didStartScale = false;
expect(updatedFocalPoint, const Point(30.0, 40.0)); expect(updatedFocalPoint, const Point(30.0, 40.0));
...@@ -132,9 +130,9 @@ void main() { ...@@ -132,9 +130,9 @@ void main() {
expect(didTap, isFalse); expect(didTap, isFalse);
// Return to original positions but with different fingers // Return to original positions but with different fingers
router.route(pointer1.move(const Point(25.0, 35.0))); pointerRouter.route(pointer1.move(const Point(25.0, 35.0)));
router.route(pointer2.move(const Point(20.0, 30.0))); pointerRouter.route(pointer2.move(const Point(20.0, 30.0)));
router.route(pointer3.move(const Point(15.0, 25.0))); pointerRouter.route(pointer3.move(const Point(15.0, 25.0)));
expect(didStartScale, isFalse); expect(didStartScale, isFalse);
expect(updatedFocalPoint, const Point(20.0, 30.0)); expect(updatedFocalPoint, const Point(20.0, 30.0));
updatedFocalPoint = null; updatedFocalPoint = null;
...@@ -143,7 +141,7 @@ void main() { ...@@ -143,7 +141,7 @@ void main() {
expect(didEndScale, isFalse); expect(didEndScale, isFalse);
expect(didTap, isFalse); expect(didTap, isFalse);
router.route(pointer1.up()); pointerRouter.route(pointer1.up());
expect(didStartScale, isFalse); expect(didStartScale, isFalse);
expect(updatedFocalPoint, isNull); expect(updatedFocalPoint, isNull);
expect(updatedScale, isNull); expect(updatedScale, isNull);
...@@ -152,7 +150,7 @@ void main() { ...@@ -152,7 +150,7 @@ void main() {
expect(didTap, isFalse); expect(didTap, isFalse);
// Continue scaling with two fingers // Continue scaling with two fingers
router.route(pointer3.move(const Point(10.0, 20.0))); pointerRouter.route(pointer3.move(const Point(10.0, 20.0)));
expect(didStartScale, isTrue); expect(didStartScale, isTrue);
didStartScale = false; didStartScale = false;
expect(updatedFocalPoint, const Point(15.0, 25.0)); expect(updatedFocalPoint, const Point(15.0, 25.0));
...@@ -160,7 +158,7 @@ void main() { ...@@ -160,7 +158,7 @@ void main() {
expect(updatedScale, 2.0); expect(updatedScale, 2.0);
updatedScale = null; updatedScale = null;
router.route(pointer2.up()); pointerRouter.route(pointer2.up());
expect(didStartScale, isFalse); expect(didStartScale, isFalse);
expect(updatedFocalPoint, isNull); expect(updatedFocalPoint, isNull);
expect(updatedScale, isNull); expect(updatedScale, isNull);
...@@ -169,7 +167,7 @@ void main() { ...@@ -169,7 +167,7 @@ void main() {
expect(didTap, isFalse); expect(didTap, isFalse);
// Continue panning with one finger // Continue panning with one finger
router.route(pointer3.move(const Point(0.0, 0.0))); pointerRouter.route(pointer3.move(const Point(0.0, 0.0)));
expect(didStartScale, isTrue); expect(didStartScale, isTrue);
didStartScale = false; didStartScale = false;
expect(updatedFocalPoint, const Point(0.0, 0.0)); expect(updatedFocalPoint, const Point(0.0, 0.0));
...@@ -178,7 +176,7 @@ void main() { ...@@ -178,7 +176,7 @@ void main() {
updatedScale = null; updatedScale = null;
// We are done // We are done
router.route(pointer3.up()); pointerRouter.route(pointer3.up());
expect(didStartScale, isFalse); expect(didStartScale, isFalse);
expect(updatedFocalPoint, isNull); expect(updatedFocalPoint, isNull);
expect(updatedScale, isNull); expect(updatedScale, isNull);
......
...@@ -6,18 +6,16 @@ import 'package:flutter_test/flutter_test.dart'; ...@@ -6,18 +6,16 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
import 'package:test/test.dart'; import 'package:test/test.dart';
import 'gesture_tester.dart';
void main() { void main() {
setUp(ensureGesturer);
test('Should recognize pan', () { test('Should recognize pan', () {
PointerRouter router = new PointerRouter(); GestureArena gestureArena = Gesturer.instance.gestureArena;
GestureArena gestureArena = new GestureArena(); PointerRouter pointerRouter = Gesturer.instance.pointerRouter;
PanGestureRecognizer pan = new PanGestureRecognizer( PanGestureRecognizer pan = new PanGestureRecognizer();
router: router, TapGestureRecognizer tap = new TapGestureRecognizer();
gestureArena: gestureArena
);
TapGestureRecognizer tap = new TapGestureRecognizer(
router: router,
gestureArena: gestureArena
);
bool didStartPan = false; bool didStartPan = false;
pan.onStart = (_) { pan.onStart = (_) {
...@@ -49,13 +47,13 @@ void main() { ...@@ -49,13 +47,13 @@ void main() {
expect(didEndPan, isFalse); expect(didEndPan, isFalse);
expect(didTap, isFalse); expect(didTap, isFalse);
router.route(down); pointerRouter.route(down);
expect(didStartPan, isFalse); expect(didStartPan, isFalse);
expect(updatedScrollDelta, isNull); expect(updatedScrollDelta, isNull);
expect(didEndPan, isFalse); expect(didEndPan, isFalse);
expect(didTap, isFalse); expect(didTap, isFalse);
router.route(pointer.move(const Point(20.0, 20.0))); pointerRouter.route(pointer.move(const Point(20.0, 20.0)));
expect(didStartPan, isTrue); expect(didStartPan, isTrue);
didStartPan = false; didStartPan = false;
expect(updatedScrollDelta, const Offset(10.0, 10.0)); expect(updatedScrollDelta, const Offset(10.0, 10.0));
...@@ -63,14 +61,14 @@ void main() { ...@@ -63,14 +61,14 @@ void main() {
expect(didEndPan, isFalse); expect(didEndPan, isFalse);
expect(didTap, isFalse); expect(didTap, isFalse);
router.route(pointer.move(const Point(20.0, 25.0))); pointerRouter.route(pointer.move(const Point(20.0, 25.0)));
expect(didStartPan, isFalse); expect(didStartPan, isFalse);
expect(updatedScrollDelta, const Offset(0.0, 5.0)); expect(updatedScrollDelta, const Offset(0.0, 5.0));
updatedScrollDelta = null; updatedScrollDelta = null;
expect(didEndPan, isFalse); expect(didEndPan, isFalse);
expect(didTap, isFalse); expect(didTap, isFalse);
router.route(pointer.up()); pointerRouter.route(pointer.up());
expect(didStartPan, isFalse); expect(didStartPan, isFalse);
expect(updatedScrollDelta, isNull); expect(updatedScrollDelta, isNull);
expect(didEndPan, isTrue); expect(didEndPan, isTrue);
......
...@@ -6,12 +6,15 @@ import 'package:flutter/gestures.dart'; ...@@ -6,12 +6,15 @@ import 'package:flutter/gestures.dart';
import 'package:quiver/testing/async.dart'; import 'package:quiver/testing/async.dart';
import 'package:test/test.dart'; import 'package:test/test.dart';
import 'gesture_tester.dart';
class TestGestureArenaMember extends GestureArenaMember { class TestGestureArenaMember extends GestureArenaMember {
void acceptGesture(Object key) {} void acceptGesture(Object key) {}
void rejectGesture(Object key) {} void rejectGesture(Object key) {}
} }
void main() { void main() {
setUp(ensureGesturer);
// Down/up pair 1: normal tap sequence // Down/up pair 1: normal tap sequence
const PointerDownEvent down1 = const PointerDownEvent( const PointerDownEvent down1 = const PointerDownEvent(
...@@ -52,12 +55,7 @@ void main() { ...@@ -52,12 +55,7 @@ void main() {
); );
test('Should recognize tap', () { test('Should recognize tap', () {
PointerRouter router = new PointerRouter(); TapGestureRecognizer tap = new TapGestureRecognizer();
GestureArena gestureArena = new GestureArena();
TapGestureRecognizer tap = new TapGestureRecognizer(
router: router,
gestureArena: gestureArena
);
bool tapRecognized = false; bool tapRecognized = false;
tap.onTap = () { tap.onTap = () {
...@@ -65,26 +63,21 @@ void main() { ...@@ -65,26 +63,21 @@ void main() {
}; };
tap.addPointer(down1); tap.addPointer(down1);
gestureArena.close(1); Gesturer.instance.gestureArena.close(1);
expect(tapRecognized, isFalse); expect(tapRecognized, isFalse);
router.route(down1); Gesturer.instance.pointerRouter.route(down1);
expect(tapRecognized, isFalse); expect(tapRecognized, isFalse);
router.route(up1); Gesturer.instance.pointerRouter.route(up1);
expect(tapRecognized, isTrue); expect(tapRecognized, isTrue);
gestureArena.sweep(1); Gesturer.instance.gestureArena.sweep(1);
expect(tapRecognized, isTrue); expect(tapRecognized, isTrue);
tap.dispose(); tap.dispose();
}); });
test('No duplicate tap events', () { test('No duplicate tap events', () {
PointerRouter router = new PointerRouter(); TapGestureRecognizer tap = new TapGestureRecognizer();
GestureArena gestureArena = new GestureArena();
TapGestureRecognizer tap = new TapGestureRecognizer(
router: router,
gestureArena: gestureArena
);
int tapsRecognized = 0; int tapsRecognized = 0;
tap.onTap = () { tap.onTap = () {
...@@ -92,37 +85,32 @@ void main() { ...@@ -92,37 +85,32 @@ void main() {
}; };
tap.addPointer(down1); tap.addPointer(down1);
gestureArena.close(1); Gesturer.instance.gestureArena.close(1);
expect(tapsRecognized, 0); expect(tapsRecognized, 0);
router.route(down1); Gesturer.instance.pointerRouter.route(down1);
expect(tapsRecognized, 0); expect(tapsRecognized, 0);
router.route(up1); Gesturer.instance.pointerRouter.route(up1);
expect(tapsRecognized, 1); expect(tapsRecognized, 1);
gestureArena.sweep(1); Gesturer.instance.gestureArena.sweep(1);
expect(tapsRecognized, 1); expect(tapsRecognized, 1);
tap.addPointer(down1); tap.addPointer(down1);
gestureArena.close(1); Gesturer.instance.gestureArena.close(1);
expect(tapsRecognized, 1); expect(tapsRecognized, 1);
router.route(down1); Gesturer.instance.pointerRouter.route(down1);
expect(tapsRecognized, 1); expect(tapsRecognized, 1);
router.route(up1); Gesturer.instance.pointerRouter.route(up1);
expect(tapsRecognized, 2); expect(tapsRecognized, 2);
gestureArena.sweep(1); Gesturer.instance.gestureArena.sweep(1);
expect(tapsRecognized, 2); expect(tapsRecognized, 2);
tap.dispose(); tap.dispose();
}); });
test('Should not recognize two overlapping taps', () { test('Should not recognize two overlapping taps', () {
PointerRouter router = new PointerRouter(); TapGestureRecognizer tap = new TapGestureRecognizer();
GestureArena gestureArena = new GestureArena();
TapGestureRecognizer tap = new TapGestureRecognizer(
router: router,
gestureArena: gestureArena
);
int tapsRecognized = 0; int tapsRecognized = 0;
tap.onTap = () { tap.onTap = () {
...@@ -130,38 +118,33 @@ void main() { ...@@ -130,38 +118,33 @@ void main() {
}; };
tap.addPointer(down1); tap.addPointer(down1);
gestureArena.close(1); Gesturer.instance.gestureArena.close(1);
expect(tapsRecognized, 0); expect(tapsRecognized, 0);
router.route(down1); Gesturer.instance.pointerRouter.route(down1);
expect(tapsRecognized, 0); expect(tapsRecognized, 0);
tap.addPointer(down2); tap.addPointer(down2);
gestureArena.close(2); Gesturer.instance.gestureArena.close(2);
expect(tapsRecognized, 0); expect(tapsRecognized, 0);
router.route(down1); Gesturer.instance.pointerRouter.route(down1);
expect(tapsRecognized, 0); expect(tapsRecognized, 0);
router.route(up1); Gesturer.instance.pointerRouter.route(up1);
expect(tapsRecognized, 1); expect(tapsRecognized, 1);
gestureArena.sweep(1); Gesturer.instance.gestureArena.sweep(1);
expect(tapsRecognized, 1); expect(tapsRecognized, 1);
router.route(up2); Gesturer.instance.pointerRouter.route(up2);
expect(tapsRecognized, 1); expect(tapsRecognized, 1);
gestureArena.sweep(2); Gesturer.instance.gestureArena.sweep(2);
expect(tapsRecognized, 1); expect(tapsRecognized, 1);
tap.dispose(); tap.dispose();
}); });
test('Distance cancels tap', () { test('Distance cancels tap', () {
PointerRouter router = new PointerRouter(); TapGestureRecognizer tap = new TapGestureRecognizer();
GestureArena gestureArena = new GestureArena();
TapGestureRecognizer tap = new TapGestureRecognizer(
router: router,
gestureArena: gestureArena
);
bool tapRecognized = false; bool tapRecognized = false;
tap.onTap = () { tap.onTap = () {
...@@ -173,20 +156,20 @@ void main() { ...@@ -173,20 +156,20 @@ void main() {
}; };
tap.addPointer(down3); tap.addPointer(down3);
gestureArena.close(3); Gesturer.instance.gestureArena.close(3);
expect(tapRecognized, isFalse); expect(tapRecognized, isFalse);
expect(tapCanceled, isFalse); expect(tapCanceled, isFalse);
router.route(down3); Gesturer.instance.pointerRouter.route(down3);
expect(tapRecognized, isFalse); expect(tapRecognized, isFalse);
expect(tapCanceled, isFalse); expect(tapCanceled, isFalse);
router.route(move3); Gesturer.instance.pointerRouter.route(move3);
expect(tapRecognized, isFalse); expect(tapRecognized, isFalse);
expect(tapCanceled, isTrue); expect(tapCanceled, isTrue);
router.route(up3); Gesturer.instance.pointerRouter.route(up3);
expect(tapRecognized, isFalse); expect(tapRecognized, isFalse);
expect(tapCanceled, isTrue); expect(tapCanceled, isTrue);
gestureArena.sweep(3); Gesturer.instance.gestureArena.sweep(3);
expect(tapRecognized, isFalse); expect(tapRecognized, isFalse);
expect(tapCanceled, isTrue); expect(tapCanceled, isTrue);
...@@ -194,12 +177,7 @@ void main() { ...@@ -194,12 +177,7 @@ void main() {
}); });
test('Timeout does not cancel tap', () { test('Timeout does not cancel tap', () {
PointerRouter router = new PointerRouter(); TapGestureRecognizer tap = new TapGestureRecognizer();
GestureArena gestureArena = new GestureArena();
TapGestureRecognizer tap = new TapGestureRecognizer(
router: router,
gestureArena: gestureArena
);
bool tapRecognized = false; bool tapRecognized = false;
tap.onTap = () { tap.onTap = () {
...@@ -208,16 +186,16 @@ void main() { ...@@ -208,16 +186,16 @@ void main() {
new FakeAsync().run((FakeAsync async) { new FakeAsync().run((FakeAsync async) {
tap.addPointer(down1); tap.addPointer(down1);
gestureArena.close(1); Gesturer.instance.gestureArena.close(1);
expect(tapRecognized, isFalse); expect(tapRecognized, isFalse);
router.route(down1); Gesturer.instance.pointerRouter.route(down1);
expect(tapRecognized, isFalse); expect(tapRecognized, isFalse);
async.elapse(new Duration(milliseconds: 500)); async.elapse(new Duration(milliseconds: 500));
expect(tapRecognized, isFalse); expect(tapRecognized, isFalse);
router.route(up1); Gesturer.instance.pointerRouter.route(up1);
expect(tapRecognized, isTrue); expect(tapRecognized, isTrue);
gestureArena.sweep(1); Gesturer.instance.gestureArena.sweep(1);
expect(tapRecognized, isTrue); expect(tapRecognized, isTrue);
}); });
...@@ -225,12 +203,7 @@ void main() { ...@@ -225,12 +203,7 @@ void main() {
}); });
test('Should yield to other arena members', () { test('Should yield to other arena members', () {
PointerRouter router = new PointerRouter(); TapGestureRecognizer tap = new TapGestureRecognizer();
GestureArena gestureArena = new GestureArena();
TapGestureRecognizer tap = new TapGestureRecognizer(
router: router,
gestureArena: gestureArena
);
bool tapRecognized = false; bool tapRecognized = false;
tap.onTap = () { tap.onTap = () {
...@@ -239,16 +212,16 @@ void main() { ...@@ -239,16 +212,16 @@ void main() {
tap.addPointer(down1); tap.addPointer(down1);
TestGestureArenaMember member = new TestGestureArenaMember(); TestGestureArenaMember member = new TestGestureArenaMember();
GestureArenaEntry entry = gestureArena.add(1, member); GestureArenaEntry entry = Gesturer.instance.gestureArena.add(1, member);
gestureArena.hold(1); Gesturer.instance.gestureArena.hold(1);
gestureArena.close(1); Gesturer.instance.gestureArena.close(1);
expect(tapRecognized, isFalse); expect(tapRecognized, isFalse);
router.route(down1); Gesturer.instance.pointerRouter.route(down1);
expect(tapRecognized, isFalse); expect(tapRecognized, isFalse);
router.route(up1); Gesturer.instance.pointerRouter.route(up1);
expect(tapRecognized, isFalse); expect(tapRecognized, isFalse);
gestureArena.sweep(1); Gesturer.instance.gestureArena.sweep(1);
expect(tapRecognized, isFalse); expect(tapRecognized, isFalse);
entry.resolve(GestureDisposition.accepted); entry.resolve(GestureDisposition.accepted);
...@@ -258,12 +231,7 @@ void main() { ...@@ -258,12 +231,7 @@ void main() {
}); });
test('Should trigger on release of held arena', () { test('Should trigger on release of held arena', () {
PointerRouter router = new PointerRouter(); TapGestureRecognizer tap = new TapGestureRecognizer();
GestureArena gestureArena = new GestureArena();
TapGestureRecognizer tap = new TapGestureRecognizer(
router: router,
gestureArena: gestureArena
);
bool tapRecognized = false; bool tapRecognized = false;
tap.onTap = () { tap.onTap = () {
...@@ -272,16 +240,16 @@ void main() { ...@@ -272,16 +240,16 @@ void main() {
tap.addPointer(down1); tap.addPointer(down1);
TestGestureArenaMember member = new TestGestureArenaMember(); TestGestureArenaMember member = new TestGestureArenaMember();
GestureArenaEntry entry = gestureArena.add(1, member); GestureArenaEntry entry = Gesturer.instance.gestureArena.add(1, member);
gestureArena.hold(1); Gesturer.instance.gestureArena.hold(1);
gestureArena.close(1); Gesturer.instance.gestureArena.close(1);
expect(tapRecognized, isFalse); expect(tapRecognized, isFalse);
router.route(down1); Gesturer.instance.pointerRouter.route(down1);
expect(tapRecognized, isFalse); expect(tapRecognized, isFalse);
router.route(up1); Gesturer.instance.pointerRouter.route(up1);
expect(tapRecognized, isFalse); expect(tapRecognized, isFalse);
gestureArena.sweep(1); Gesturer.instance.gestureArena.sweep(1);
expect(tapRecognized, isFalse); expect(tapRecognized, isFalse);
entry.resolve(GestureDisposition.rejected); entry.resolve(GestureDisposition.rejected);
......
...@@ -11,22 +11,16 @@ void main() { ...@@ -11,22 +11,16 @@ void main() {
test('Can tap a hyperlink', () { test('Can tap a hyperlink', () {
testWidgets((WidgetTester tester) { testWidgets((WidgetTester tester) {
bool didTapLeft = false; bool didTapLeft = false;
TapGestureRecognizer tapLeft = new TapGestureRecognizer( TapGestureRecognizer tapLeft = new TapGestureRecognizer()
router: Gesturer.instance.pointerRouter, ..onTap = () {
gestureArena: Gesturer.instance.gestureArena,
onTap: () {
didTapLeft = true; didTapLeft = true;
} };
);
bool didTapRight = false; bool didTapRight = false;
TapGestureRecognizer tapRight = new TapGestureRecognizer( TapGestureRecognizer tapRight = new TapGestureRecognizer()
router: Gesturer.instance.pointerRouter, ..onTap = () {
gestureArena: Gesturer.instance.gestureArena,
onTap: () {
didTapRight = true; didTapRight = true;
} };
);
Key textKey = new Key('text'); Key textKey = new Key('text');
......
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