Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(363)

Side by Side Diff: sky/sdk/lib/framework/app.dart

Issue 1177383006: Rename all the things (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: fix imports Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 import 'dart:sky' as sky;
6 import 'rendering/box.dart';
7 import 'rendering/object.dart';
8 import 'scheduler.dart' as scheduler;
9
10 class PointerState {
11 HitTestResult result;
12 Point lastPosition;
13
14 PointerState({ this.result, this.lastPosition });
15 }
16
17 class AppView {
18
19 AppView({ RenderBox root: null, RenderView renderViewOverride }) {
20 assert(_app == null);
21 _app = this;
22
23 sky.view.setEventCallback(_handleEvent);
24 sky.view.setMetricsChangedCallback(_handleMetricsChanged);
25 scheduler.init();
26 scheduler.addPersistentFrameCallback(_beginFrame);
27
28 if (renderViewOverride == null) {
29 _renderView = new RenderView(child: root);
30 _renderView.attach();
31 _renderView.rootConstraints = _viewConstraints;
32 _renderView.scheduleInitialLayout();
33 } else {
34 _renderView = renderViewOverride;
35 }
36 assert(_renderView != null);
37
38 assert(_app == this);
39 }
40
41 static AppView _app; // used to enforce that we're a singleton
42
43 RenderView _renderView;
44
45 ViewConstraints get _viewConstraints =>
46 new ViewConstraints(width: sky.view.width, height: sky.view.height);
47
48 Map<int, PointerState> _stateForPointer = new Map<int, PointerState>();
49
50 Function onFrame;
51
52 RenderBox get root => _renderView.child;
53 void set root(RenderBox value) {
54 _renderView.child = value;
55 }
56 void _beginFrame(double timeStamp) {
57 if (onFrame != null)
58 onFrame();
59 RenderObject.flushLayout();
60 _renderView.paintFrame();
61 }
62
63 void _handleEvent(sky.Event event) {
64 if (event is sky.PointerEvent) {
65 _handlePointerEvent(event);
66 } else if (event is sky.GestureEvent) {
67 HitTestResult result = new HitTestResult();
68 _renderView.hitTest(result, position: new Point(event.x, event.y));
69 dispatchEvent(event, result);
70 }
71 }
72
73 void _handleMetricsChanged() {
74 _renderView.rootConstraints = _viewConstraints;
75 }
76
77 PointerState _createStateForPointer(sky.PointerEvent event, Point position) {
78 HitTestResult result = new HitTestResult();
79 _renderView.hitTest(result, position: position);
80 PointerState state = new PointerState(result: result, lastPosition: position );
81 _stateForPointer[event.pointer] = state;
82 return state;
83 }
84
85 void _handlePointerEvent(sky.PointerEvent event) {
86 Point position = new Point(event.x, event.y);
87
88 PointerState state;
89 switch(event.type) {
90 case 'pointerdown':
91 state = _createStateForPointer(event, position);
92 break;
93 case 'pointerup':
94 case 'pointercancel':
95 state = _stateForPointer[event.pointer];
96 _stateForPointer.remove(event.pointer);
97 break;
98 case 'pointermove':
99 state = _stateForPointer[event.pointer];
100 // In the case of mouse hover we won't already have a cached down.
101 if (state == null)
102 state = _createStateForPointer(event, position);
103 break;
104 }
105 event.dx = position.x - state.lastPosition.x;
106 event.dy = position.y - state.lastPosition.y;
107 state.lastPosition = position;
108
109 dispatchEvent(event, state.result);
110 }
111
112 void dispatchEvent(sky.Event event, HitTestResult result) {
113 assert(result != null);
114 for (HitTestEntry entry in result.path.reversed)
115 entry.target.handleEvent(event, entry);
116 }
117
118 String toString() => 'Render Tree:\n${_renderView}';
119
120 void debugDumpRenderTree() {
121 toString().split('\n').forEach(print);
122 }
123
124 }
OLDNEW
« no previous file with comments | « sky/sdk/lib/framework/animation/generators.dart ('k') | sky/sdk/lib/framework/editing2/editable_string.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698