Commit 7514ce12 authored by Hixie's avatar Hixie

Clean up pointer handling.

Previously we tried to work around some possible badness from the engine
side, but now we are more assertive about the engine needing to do the
right thing.
parent bf5ef790
...@@ -56,10 +56,12 @@ class _PointerEventConverter { ...@@ -56,10 +56,12 @@ class _PointerEventConverter {
PointerDeviceKind kind = _pointerKindMap[datum.kind]; PointerDeviceKind kind = _pointerKindMap[datum.kind];
switch (datum.type) { switch (datum.type) {
case PointerType.DOWN: case PointerType.DOWN:
assert(!_pointers.containsKey(datum.pointer));
_PointerState state = _pointers.putIfAbsent( _PointerState state = _pointers.putIfAbsent(
datum.pointer, datum.pointer,
() => new _PointerState(position) () => new _PointerState(position)
); );
assert(state.lastPosition == position);
state.startNewPointer(); state.startNewPointer();
state.setDown(); state.setDown();
yield new PointerAddedEvent( yield new PointerAddedEvent(
...@@ -96,13 +98,11 @@ class _PointerEventConverter { ...@@ -96,13 +98,11 @@ class _PointerEventConverter {
); );
break; break;
case PointerType.MOVE: case PointerType.MOVE:
_PointerState state = _pointers[datum.pointer];
// If the service starts supporting hover pointers, then it must also // If the service starts supporting hover pointers, then it must also
// start sending us ADDED and REMOVED data points. In the meantime, we // start sending us ADDED and REMOVED data points.
// only support "down" moves, and ignore spurious moves.
// See also: https://github.com/flutter/flutter/issues/720 // See also: https://github.com/flutter/flutter/issues/720
if (state == null) assert(_pointers.containsKey(datum.pointer));
break; _PointerState state = _pointers[datum.pointer];
assert(state.down); assert(state.down);
Offset offset = position - state.lastPosition; Offset offset = position - state.lastPosition;
state.lastPosition = position; state.lastPosition = position;
...@@ -129,8 +129,9 @@ class _PointerEventConverter { ...@@ -129,8 +129,9 @@ class _PointerEventConverter {
break; break;
case PointerType.UP: case PointerType.UP:
case PointerType.CANCEL: case PointerType.CANCEL:
assert(_pointers.containsKey(datum.pointer));
_PointerState state = _pointers[datum.pointer]; _PointerState state = _pointers[datum.pointer];
assert(state != null); assert(state.down);
assert(position == state.lastPosition); assert(position == state.lastPosition);
state.setUp(); state.setUp();
if (datum.type == PointerType.UP) { if (datum.type == PointerType.UP) {
......
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