| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 import 'dart:sky' as sky; | 5 import 'dart:sky' as sky; |
| 6 | 6 |
| 7 import '../app/scheduler.dart' as scheduler; | 7 import '../base/scheduler.dart' as scheduler; |
| 8 import '../base/hit_test.dart'; |
| 8 import 'box.dart'; | 9 import 'box.dart'; |
| 9 import 'object.dart'; | 10 import 'object.dart'; |
| 10 | 11 |
| 11 class PointerState { | 12 class PointerState { |
| 13 PointerState({ this.result, this.lastPosition }); |
| 12 HitTestResult result; | 14 HitTestResult result; |
| 13 Point lastPosition; | 15 Point lastPosition; |
| 14 | |
| 15 PointerState({ this.result, this.lastPosition }); | |
| 16 } | 16 } |
| 17 | 17 |
| 18 typedef void EventListener(sky.Event event); | 18 typedef void EventListener(sky.Event event); |
| 19 | 19 |
| 20 class SkyBinding { | 20 class SkyBinding { |
| 21 | 21 |
| 22 SkyBinding({ RenderBox root: null, RenderView renderViewOverride }) { | 22 SkyBinding({ RenderBox root: null, RenderView renderViewOverride }) { |
| 23 assert(_app == null); | 23 assert(_instance == null); |
| 24 _app = this; | 24 _instance = this; |
| 25 | 25 |
| 26 sky.view.setEventCallback(_handleEvent); | 26 sky.view.setEventCallback(_handleEvent); |
| 27 |
| 27 sky.view.setMetricsChangedCallback(_handleMetricsChanged); | 28 sky.view.setMetricsChangedCallback(_handleMetricsChanged); |
| 28 scheduler.init(); | 29 scheduler.init(); |
| 29 scheduler.addPersistentFrameCallback(_beginFrame); | |
| 30 | |
| 31 if (renderViewOverride == null) { | 30 if (renderViewOverride == null) { |
| 32 _renderView = new RenderView(child: root); | 31 _renderView = new RenderView(child: root); |
| 33 _renderView.attach(); | 32 _renderView.attach(); |
| 34 _renderView.rootConstraints = _viewConstraints; | 33 _renderView.rootConstraints = _createConstraints(); |
| 35 _renderView.scheduleInitialLayout(); | 34 _renderView.scheduleInitialLayout(); |
| 36 } else { | 35 } else { |
| 37 _renderView = renderViewOverride; | 36 _renderView = renderViewOverride; |
| 38 } | 37 } |
| 39 assert(_renderView != null); | 38 assert(_renderView != null); |
| 39 scheduler.addPersistentFrameCallback(_beginFrame); |
| 40 | 40 |
| 41 assert(_app == this); | 41 assert(_instance == this); |
| 42 } | 42 } |
| 43 | 43 |
| 44 static SkyBinding _app; // used to enforce that we're a singleton | 44 static SkyBinding _instance; // used to enforce that we're a singleton |
| 45 static SkyBinding get instance => _instance; |
| 45 | 46 |
| 46 RenderView _renderView; | 47 RenderView _renderView; |
| 47 RenderView get renderView => _renderView; | 48 RenderView get renderView => _renderView; |
| 48 | 49 |
| 49 ViewConstraints get _viewConstraints => | 50 ViewConstraints _createConstraints() { |
| 50 new ViewConstraints(width: sky.view.width, height: sky.view.height); | 51 return new ViewConstraints(width: sky.view.width, height: sky.view.height); |
| 51 | 52 } |
| 52 Map<int, PointerState> _stateForPointer = new Map<int, PointerState>(); | 53 void _handleMetricsChanged() { |
| 54 _renderView.rootConstraints = _createConstraints(); |
| 55 } |
| 53 | 56 |
| 54 Function onFrame; | 57 Function onFrame; |
| 55 | |
| 56 final List<EventListener> _eventListeners = new List<EventListener>(); | |
| 57 void addEventListener(EventListener e) => _eventListeners.add(e); | |
| 58 bool removeEventListener(EventListener e) => _eventListeners.remove(e); | |
| 59 | |
| 60 RenderBox get root => _renderView.child; | 58 RenderBox get root => _renderView.child; |
| 61 void set root(RenderBox value) { | 59 void set root(RenderBox value) { |
| 62 _renderView.child = value; | 60 _renderView.child = value; |
| 63 } | 61 } |
| 64 void _beginFrame(double timeStamp) { | 62 void _beginFrame(double timeStamp) { |
| 65 if (onFrame != null) | 63 if (onFrame != null) |
| 66 onFrame(); | 64 onFrame(); |
| 67 RenderObject.flushLayout(); | 65 RenderObject.flushLayout(); |
| 68 _renderView.paintFrame(); | 66 _renderView.paintFrame(); |
| 69 } | 67 } |
| 70 | 68 |
| 69 final List<EventListener> _eventListeners = new List<EventListener>(); |
| 70 void addEventListener(EventListener e) => _eventListeners.add(e); |
| 71 bool removeEventListener(EventListener e) => _eventListeners.remove(e); |
| 72 |
| 71 void _handleEvent(sky.Event event) { | 73 void _handleEvent(sky.Event event) { |
| 72 if (event is sky.PointerEvent) { | 74 if (event is sky.PointerEvent) { |
| 73 _handlePointerEvent(event); | 75 _handlePointerEvent(event); |
| 74 } else if (event is sky.GestureEvent) { | 76 } else if (event is sky.GestureEvent) { |
| 75 HitTestResult result = new HitTestResult(); | 77 HitTestResult result = new HitTestResult(); |
| 76 _renderView.hitTest(result, position: new Point(event.x, event.y)); | 78 _renderView.hitTest(result, position: new Point(event.x, event.y)); |
| 77 dispatchEvent(event, result); | 79 dispatchEvent(event, result); |
| 78 } else { | 80 } else { |
| 79 for (EventListener e in _eventListeners) { | 81 for (EventListener e in _eventListeners) |
| 80 e(event); | 82 e(event); |
| 81 } | |
| 82 } | 83 } |
| 83 } | 84 } |
| 84 | 85 |
| 85 void _handleMetricsChanged() { | 86 Map<int, PointerState> _stateForPointer = new Map<int, PointerState>(); |
| 86 _renderView.rootConstraints = _viewConstraints; | |
| 87 } | |
| 88 | 87 |
| 89 PointerState _createStateForPointer(sky.PointerEvent event, Point position) { | 88 PointerState _createStateForPointer(sky.PointerEvent event, Point position) { |
| 90 HitTestResult result = new HitTestResult(); | 89 HitTestResult result = new HitTestResult(); |
| 91 _renderView.hitTest(result, position: position); | 90 _renderView.hitTest(result, position: position); |
| 92 PointerState state = new PointerState(result: result, lastPosition: position
); | 91 PointerState state = new PointerState(result: result, lastPosition: position
); |
| 93 _stateForPointer[event.pointer] = state; | 92 _stateForPointer[event.pointer] = state; |
| 94 return state; | 93 return state; |
| 95 } | 94 } |
| 96 | 95 |
| 97 void _handlePointerEvent(sky.PointerEvent event) { | 96 void _handlePointerEvent(sky.PointerEvent event) { |
| (...skipping 29 matching lines...) Expand all Loading... |
| 127 entry.target.handleEvent(event, entry); | 126 entry.target.handleEvent(event, entry); |
| 128 } | 127 } |
| 129 | 128 |
| 130 String toString() => 'Render Tree:\n${_renderView}'; | 129 String toString() => 'Render Tree:\n${_renderView}'; |
| 131 | 130 |
| 132 void debugDumpRenderTree() { | 131 void debugDumpRenderTree() { |
| 133 toString().split('\n').forEach(print); | 132 toString().split('\n').forEach(print); |
| 134 } | 133 } |
| 135 | 134 |
| 136 } | 135 } |
| OLD | NEW |