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 '../sky/scheduler.dart' as scheduler; |
| 8 import '../sky/hittest.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 |