| Index: sky/sdk/lib/framework/app.dart
|
| diff --git a/sky/sdk/lib/framework/app.dart b/sky/sdk/lib/framework/app.dart
|
| index 38113d44ca55d529189a01d601bcbad4bc04d06b..f0dce51ce55edfb4e2f143bd55ae33d7a9ee5303 100644
|
| --- a/sky/sdk/lib/framework/app.dart
|
| +++ b/sky/sdk/lib/framework/app.dart
|
| @@ -43,8 +43,21 @@ class AppView {
|
| }
|
|
|
| void _handleEvent(sky.Event event) {
|
| - if (event is sky.PointerEvent)
|
| + if (event is sky.PointerEvent) {
|
| _handlePointerEvent(event);
|
| + } else if (event is sky.GestureEvent) {
|
| + HitTestResult result = new HitTestResult();
|
| + _renderView.hitTest(result, position: new sky.Point(event.x, event.y));
|
| + dispatchEvent(event, result);
|
| + }
|
| + }
|
| +
|
| + PointerState _createStateForPointer(sky.PointerEvent event, sky.Point position) {
|
| + HitTestResult result = new HitTestResult();
|
| + _renderView.hitTest(result, position: position);
|
| + PointerState state = new PointerState(result: result, lastPosition: position);
|
| + _stateForPointer[event.pointer] = state;
|
| + return state;
|
| }
|
|
|
| void _handlePointerEvent(sky.PointerEvent event) {
|
| @@ -53,10 +66,7 @@ class AppView {
|
| PointerState state;
|
| switch(event.type) {
|
| case 'pointerdown':
|
| - HitTestResult result = new HitTestResult();
|
| - _renderView.hitTest(result, position: position);
|
| - state = new PointerState(result: result, lastPosition: position);
|
| - _stateForPointer[event.pointer] = state;
|
| + state = _createStateForPointer(event, position);
|
| break;
|
| case 'pointerup':
|
| case 'pointercancel':
|
| @@ -66,22 +76,20 @@ class AppView {
|
| case 'pointermove':
|
| state = _stateForPointer[event.pointer];
|
| // In the case of mouse hover we won't already have a cached down.
|
| - if (state.result == null) {
|
| - state.result = new HitTestResult();
|
| - _renderView.hitTest(state.result, position: position);
|
| - }
|
| + if (state == null)
|
| + state = _createStateForPointer(event, position);
|
| break;
|
| }
|
| event.dx = position.x - state.lastPosition.x;
|
| event.dy = position.y - state.lastPosition.y;
|
| state.lastPosition = position;
|
|
|
| - dispatchPointerEvent(event, state.result);
|
| + dispatchEvent(event, state.result);
|
| }
|
|
|
| - void dispatchPointerEvent(sky.PointerEvent event, HitTestResult result) {
|
| + void dispatchEvent(sky.Event event, HitTestResult result) {
|
| assert(result != null);
|
| for (RenderNode node in result.path.reversed)
|
| - node.handlePointer(event);
|
| + node.handleEvent(event);
|
| }
|
| }
|
|
|