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

Side by Side Diff: sky/framework/fn.dart

Issue 986463003: fix typo in _syncEvent; make it possible for a component to entirely change the class of its render… (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 9 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 library fn; 5 library fn;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:collection'; 8 import 'dart:collection';
9 import 'dart:sky' as sky; 9 import 'dart:sky' as sky;
10 import 'reflect.dart' as reflect; 10 import 'reflect.dart' as reflect;
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 List<EventHandler> newHandlers = events._handlers; 181 List<EventHandler> newHandlers = events._handlers;
182 int newStartIndex = 0; 182 int newStartIndex = 0;
183 int newEndIndex = newHandlers.length; 183 int newEndIndex = newHandlers.length;
184 184
185 List<EventHandler> oldHandlers = old.events._handlers; 185 List<EventHandler> oldHandlers = old.events._handlers;
186 int oldStartIndex = 0; 186 int oldStartIndex = 0;
187 int oldEndIndex = oldHandlers.length; 187 int oldEndIndex = oldHandlers.length;
188 188
189 // Skip over leading handlers that match. 189 // Skip over leading handlers that match.
190 while (newStartIndex < newEndIndex && oldStartIndex < oldEndIndex) { 190 while (newStartIndex < newEndIndex && oldStartIndex < oldEndIndex) {
191 EventHandler newHander = newHandlers[newStartIndex]; 191 EventHandler newHandler = newHandlers[newStartIndex];
192 EventHandler oldHandler = oldHandlers[oldStartIndex]; 192 EventHandler oldHandler = oldHandlers[oldStartIndex];
193 if (newHander.type != oldHandler.type 193 if (newHandler.type != oldHandler.type
194 || newHander.listener != oldHandler.listener) 194 || newHandler.listener != oldHandler.listener)
195 break; 195 break;
196 ++newStartIndex; 196 ++newStartIndex;
197 ++oldStartIndex; 197 ++oldStartIndex;
198 } 198 }
199 199
200 // Skip over trailing handlers that match. 200 // Skip over trailing handlers that match.
201 while (newStartIndex < newEndIndex && oldStartIndex < oldEndIndex) { 201 while (newStartIndex < newEndIndex && oldStartIndex < oldEndIndex) {
202 EventHandler newHander = newHandlers[newEndIndex - 1]; 202 EventHandler newHandler = newHandlers[newEndIndex - 1];
203 EventHandler oldHandler = oldHandlers[oldEndIndex - 1]; 203 EventHandler oldHandler = oldHandlers[oldEndIndex - 1];
204 if (newHander.type != oldHandler.type 204 if (newHandler.type != oldHandler.type
205 || newHander.listener != oldHandler.listener) 205 || newHandler.listener != oldHandler.listener)
206 break; 206 break;
207 --newEndIndex; 207 --newEndIndex;
208 --oldEndIndex; 208 --oldEndIndex;
209 } 209 }
210 210
211 sky.Element root = _root as sky.Element; 211 sky.Element root = _root as sky.Element;
212 212
213 for (int i = oldStartIndex; i < oldEndIndex; ++i) { 213 for (int i = oldStartIndex; i < oldEndIndex; ++i) {
214 EventHandler oldHandler = oldHandlers[i]; 214 EventHandler oldHandler = oldHandlers[i];
215 root.removeEventListener(oldHandler.type, oldHandler.listener); 215 root.removeEventListener(oldHandler.type, oldHandler.listener);
216 } 216 }
217 217
218 for (int i = newStartIndex; i < newEndIndex; ++i) { 218 for (int i = newStartIndex; i < newEndIndex; ++i) {
219 EventHandler newHander = newHandlers[i]; 219 EventHandler newHandler = newHandlers[i];
220 root.addEventListener(newHander.type, newHander.listener); 220 root.addEventListener(newHandler.type, newHandler.listener);
221 } 221 }
222 } 222 }
223 223
224 void _syncNode([Element old]) { 224 void _syncNode([Element old]) {
225 if (old == null) { 225 if (old == null) {
226 old = _emptyElement; 226 old = _emptyElement;
227 } 227 }
228 228
229 _syncEvents(old); 229 _syncEvents(old);
230 230
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
597 _currentOrder = _order; 597 _currentOrder = _order;
598 _currentlyRendering = this; 598 _currentlyRendering = this;
599 _rendered = render(); 599 _rendered = render();
600 _currentlyRendering = null; 600 _currentlyRendering = null;
601 _currentOrder = lastOrder; 601 _currentOrder = lastOrder;
602 602
603 _rendered.events.addAll(events); 603 _rendered.events.addAll(events);
604 604
605 _dirty = false; 605 _dirty = false;
606 606
607 // TODO(rafaelw): This prevents components from returning different node 607 if (oldRendered != null && _rendered.runtimeType != oldRendered.runtimeType)
608 // types as their root node at different times. Consider relaxing. 608 oldRendered = null;
609 assert(oldRendered == null ||
610 _rendered.runtimeType == oldRendered.runtimeType);
611 609
612 if (_rendered._sync(oldRendered, host, insertBefore)) { 610 if (_rendered._sync(oldRendered, host, insertBefore)) {
613 _rendered = oldRendered; // retain stateful component 611 _rendered = oldRendered; // retain stateful component
614 } 612 }
615 _root = _rendered._root; 613 _root = _rendered._root;
616 assert(_rendered._root is sky.Node); 614 assert(_rendered._root is sky.Node);
617 } 615 }
618 616
619 void _renderIfDirty() { 617 void _renderIfDirty() {
620 assert(_rendered != null); 618 assert(_rendered != null);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
653 651
654 _sync(null, _host, null); 652 _sync(null, _host, null);
655 assert(_root is sky.Node); 653 assert(_root is sky.Node);
656 654
657 sw.stop(); 655 sw.stop();
658 if (_shouldLogRenderDuration) 656 if (_shouldLogRenderDuration)
659 print("Initial render: ${sw.elapsedMicroseconds} microseconds"); 657 print("Initial render: ${sw.elapsedMicroseconds} microseconds");
660 }); 658 });
661 } 659 }
662 } 660 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698