Chromium Code Reviews| Index: sky/sdk/lib/framework/app.dart |
| diff --git a/sky/sdk/lib/framework/app.dart b/sky/sdk/lib/framework/app.dart |
| index 4c105715d9f6a9c19f4fb36d5fd23fa2ec7c1d3b..b25208a94bfd098640b583bd5f603b1fd2aa8620 100644 |
| --- a/sky/sdk/lib/framework/app.dart |
| +++ b/sky/sdk/lib/framework/app.dart |
| @@ -14,21 +14,42 @@ class AppView { |
| _renderView = new RenderView(root: root); |
| _renderView.layout(newWidth: sky.view.width, newHeight: sky.view.height); |
| + _hitTestResultForPointer = new Map<int, HitTestResult>(); |
|
abarth-chromium
2015/05/27 18:13:19
You can actually do this work on line 24 directly.
|
| + |
| sky.view.scheduleFrame(); |
| } |
| RenderView _renderView; |
| + Map<int, HitTestResult> _hitTestResultForPointer; |
|
abarth-chromium
2015/05/27 18:13:19
final Map<int, HitTestResult> _hitTestResultForPoi
|
| + |
| void _beginFrame(double timeStamp) { |
| RenderNode.flushLayout(); |
| _renderView.paintFrame(); |
| } |
| void _handleEvent(sky.Event event) { |
| - if (event is! sky.PointerEvent) |
| - return; |
| - HitTestResult result = new HitTestResult(); |
| - _renderView.hitTest(result, x: event.x, y: event.y); |
| + if (event is sky.PointerEvent) |
| + _handlePointerEvent(event); |
| + } |
| + |
| + void _handlePointerEvent(sky.PointerEvent event) { |
| + HitTestResult result; |
| + switch(event.type) { |
| + case 'pointerdown': |
| + result = new HitTestResult(); |
| + _renderView.hitTest(result, x: event.x, y: event.y); |
| + _hitTestResultForPointer[event.pointer] = result; |
| + break; |
| + case 'pointerup': |
| + case 'pointercancel': |
| + result = _hitTestResultForPointer[event.pointer]; |
| + _hitTestResultForPointer.remove(event.pointer); |
| + break; |
| + case 'pointermove': |
| + result = _hitTestResultForPointer[event.pointer]; |
| + break; |
| + } |
| result.path.reversed.forEach((RenderNode node) { |
|
abarth-chromium
2015/05/27 18:13:19
I'd add an assert(result != null)
|
| node.handlePointer(event); |
| }); |