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

Side by Side Diff: client/html/src/EventTargetWrappingImplementation.dart

Issue 8363040: Implement measurement using futures (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Remove duplicated imports from html.dart Created 9 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « client/html/src/ElementWrappingImplementation.dart ('k') | client/html/src/Measurement.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 class _ListenerWrapper {
6 final EventListener raw;
7 final Function wrapped;
8 final String type;
9 final bool useCapture;
10
11 _ListenerWrapper(this.raw, this.wrapped, this.type, this.useCapture);
12 }
13
14 class EventsImplementation implements Events { 5 class EventsImplementation implements Events {
15 /* raw event target. */ 6 /* Raw event target. */
16 var _ptr; 7 var _ptr;
17 8
18 Map<String, EventListenerList> _listenerMap; 9 Map<String, EventListenerList> _listenerMap;
19 10
20 EventsImplementation._wrap(this._ptr) { 11 EventsImplementation._wrap(this._ptr) {
21 _listenerMap = <String, EventListenerList>{}; 12 _listenerMap = <String, EventListenerList>{};
22 } 13 }
23 14
24 EventListenerList operator [](String type) { 15 EventListenerList operator [](String type) {
25 return _get(type.toLowerCase()); 16 return _get(type.toLowerCase());
(...skipping 25 matching lines...) Expand all
51 _add(listener, useCapture); 42 _add(listener, useCapture);
52 return this; 43 return this;
53 } 44 }
54 45
55 EventListenerList remove(EventListener listener, [bool useCapture = false]) { 46 EventListenerList remove(EventListener listener, [bool useCapture = false]) {
56 _remove(listener, useCapture); 47 _remove(listener, useCapture);
57 return this; 48 return this;
58 } 49 }
59 50
60 bool dispatch(Event evt) { 51 bool dispatch(Event evt) {
61 // TODO(jacobr): what is the correct behavior here? 52 // TODO(jacobr): what is the correct behavior here. We could alternately
53 // force the event to have the expected type.
62 assert(evt.type == _type); 54 assert(evt.type == _type);
63 return _ptr.dispatchEvent(LevelDom.unwrap(evt)); 55 return _ptr.dispatchEvent(LevelDom.unwrap(evt));
64 } 56 }
65 57
66 void _add(EventListener listener, bool useCapture) { 58 void _add(EventListener listener, bool useCapture) {
67 _ptr.addEventListener(_type, 59 _ptr.addEventListener(_type,
68 _findOrAddWrapper(listener, useCapture), 60 _findOrAddWrapper(listener, useCapture),
69 useCapture); 61 useCapture);
70 } 62 }
71 63
72 void _remove(EventListener listener, bool useCapture) { 64 void _remove(EventListener listener, bool useCapture) {
73 Function wrapper = _removeWrapper(listener, useCapture); 65 Function wrapper = _removeWrapper(listener, useCapture);
74 if (wrapper !== null) { 66 if (wrapper !== null) {
75 _ptr.removeEventListener(_type, wrapper, useCapture); 67 _ptr.removeEventListener(_type, wrapper, useCapture);
76 } 68 }
77 } 69 }
78 70
79 Function _removeWrapper(EventListener listener, bool useCapture) { 71 Function _removeWrapper(EventListener listener, bool useCapture) {
80 if (_wrappers === null) { 72 if (_wrappers === null) {
81 return null; 73 return null;
82 } 74 }
83 for (int i = 0; i < _wrappers.length; i++) { 75 for (int i = 0; i < _wrappers.length; i++) {
84 _EventListenerWrapper wrapper = _wrappers[i]; 76 _EventListenerWrapper wrapper = _wrappers[i];
85 if (wrapper.raw === listener 77 if (wrapper.raw === listener && wrapper.useCapture == useCapture) {
86 && wrapper.useCapture == useCapture) {
87 // Order doesn't matter so we swap with the last element instead of 78 // Order doesn't matter so we swap with the last element instead of
88 // performing a more expensive remove from the middle of the list. 79 // performing a more expensive remove from the middle of the list.
89 if (i + 1 != _wrappers.length) { 80 if (i + 1 != _wrappers.length) {
90 _wrappers[i] = _wrappers.removeLast(); 81 _wrappers[i] = _wrappers.removeLast();
91 } else { 82 } else {
92 _wrappers.removeLast(); 83 _wrappers.removeLast();
93 } 84 }
94 return wrapper.wrapped; 85 return wrapper.wrapped;
95 } 86 }
96 } 87 }
97 return null; 88 return null;
98 } 89 }
99 90
100 Function _findOrAddWrapper(EventListener listener, bool useCapture) { 91 Function _findOrAddWrapper(EventListener listener, bool useCapture) {
101 if (_wrappers === null) { 92 if (_wrappers === null) {
102 _wrappers = <_EventListenerWrapper>[]; 93 _wrappers = <_EventListenerWrapper>[];
103 } else { 94 } else {
104 for (_EventListenerWrapper wrapper in _wrappers) { 95 for (_EventListenerWrapper wrapper in _wrappers) {
105 if (wrapper.raw === listener && wrapper.useCapture == useCapture) { 96 if (wrapper.raw === listener && wrapper.useCapture == useCapture) {
106 return wrapper.wrapped; 97 return wrapper.wrapped;
107 } 98 }
108 } 99 }
109 } 100 }
110 final wrapped = (e) => listener(LevelDom.wrapEvent(e)); 101 final wrapped = (e) { listener(LevelDom.wrapEvent(e)); };
111 _wrappers.add(new _EventListenerWrapper(listener, wrapped, useCapture)); 102 _wrappers.add(new _EventListenerWrapper(listener, wrapped, useCapture));
112 return wrapped; 103 return wrapped;
113 } 104 }
114 } 105 }
115 106
116 class EventTargetWrappingImplementation extends DOMWrapperBase implements EventT arget { 107 class EventTargetWrappingImplementation extends DOMWrapperBase implements EventT arget {
117 Events _on; 108 Events _on;
118 109
119 EventTargetWrappingImplementation._wrap(ptr) : super._wrap(ptr); 110 EventTargetWrappingImplementation._wrap(ptr) : super._wrap(ptr);
120 111
121 Events get on() { 112 Events get on() {
122 if (_on === null) { 113 if (_on === null) {
123 _on = new EventsImplementation._wrap(_ptr); 114 _on = new EventsImplementation._wrap(_ptr);
124 } 115 }
125 return _on; 116 return _on;
126 } 117 }
127 } 118 }
OLDNEW
« no previous file with comments | « client/html/src/ElementWrappingImplementation.dart ('k') | client/html/src/Measurement.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698