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

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

Issue 1165013003: Rename RenderNode to RenderObject. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: 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
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 'app.dart'; 7 import 'app.dart';
8 import 'dart:async'; 8 import 'dart:async';
9 import 'dart:collection'; 9 import 'dart:collection';
10 import 'dart:mirrors'; 10 import 'dart:mirrors';
11 import 'dart:sky' as sky; 11 import 'dart:sky' as sky;
12 import 'package:vector_math/vector_math.dart'; 12 import 'package:vector_math/vector_math.dart';
13 import 'reflect.dart' as reflect; 13 import 'reflect.dart' as reflect;
14 import 'rendering/block.dart'; 14 import 'rendering/block.dart';
15 import 'rendering/box.dart'; 15 import 'rendering/box.dart';
16 import 'rendering/flex.dart'; 16 import 'rendering/flex.dart';
17 import 'rendering/node.dart'; 17 import 'rendering/object.dart';
18 import 'rendering/paragraph.dart'; 18 import 'rendering/paragraph.dart';
19 import 'rendering/stack.dart'; 19 import 'rendering/stack.dart';
20 20
21 // final sky.Tracing _tracing = sky.window.tracing; 21 // final sky.Tracing _tracing = sky.window.tracing;
22 22
23 final bool _shouldLogRenderDuration = false; 23 final bool _shouldLogRenderDuration = false;
24 final bool _shouldTrace = false; 24 final bool _shouldTrace = false;
25 25
26 enum _SyncOperation { IDENTICAL, INSERTION, STATEFUL, STATELESS, REMOVAL } 26 enum _SyncOperation { IDENTICAL, INSERTION, STATEFUL, STATELESS, REMOVAL }
27 27
28 /* 28 /*
29 * All Effen nodes derive from UINode. All nodes have a _parent, a _key and 29 * All Effen nodes derive from UINode. All nodes have a _parent, a _key and
30 * can be sync'd. 30 * can be sync'd.
31 */ 31 */
32 abstract class UINode { 32 abstract class UINode {
33 String _key; 33 String _key;
34 UINode _parent; 34 UINode _parent;
35 UINode get parent => _parent; 35 UINode get parent => _parent;
36 RenderNode root; 36 RenderObject root;
37 bool _defunct = false; 37 bool _defunct = false;
38 38
39 UINode({ Object key }) { 39 UINode({ Object key }) {
40 _key = key == null ? "$runtimeType" : "$runtimeType-$key"; 40 _key = key == null ? "$runtimeType" : "$runtimeType-$key";
41 assert(this is App || _inRenderDirtyComponents); // you should not build the UI tree ahead of time, build it only during build() 41 assert(this is App || _inRenderDirtyComponents); // you should not build the UI tree ahead of time, build it only during build()
42 } 42 }
43 43
44 // Subclasses which implements Nodes that become stateful may return true 44 // Subclasses which implements Nodes that become stateful may return true
45 // if the |old| node has become stateful and should be retained. 45 // if the |old| node has become stateful and should be retained.
46 bool _willSync(UINode old) => false; 46 bool _willSync(UINode old) => false;
47 47
48 bool get interchangeable => false; // if true, then keys can be duplicated 48 bool get interchangeable => false; // if true, then keys can be duplicated
49 49
50 void _sync(UINode old, dynamic slot); 50 void _sync(UINode old, dynamic slot);
51 // 'slot' is the identifier that the parent RenderNodeWrapper uses to know 51 // 'slot' is the identifier that the parent RenderObjectWrapper uses to know
52 // where to put this descendant 52 // where to put this descendant
53 53
54 void _remove() { 54 void _remove() {
55 _defunct = true; 55 _defunct = true;
56 root = null; 56 root = null;
57 handleRemoved(); 57 handleRemoved();
58 } 58 }
59 void handleRemoved() { } 59 void handleRemoved() { }
60 60
61 UINode findAncestor(Type targetType) { 61 UINode findAncestor(Type targetType) {
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 // new component was built that could re-use some of it. Consider 117 // new component was built that could re-use some of it. Consider
118 // syncing the new VDOM against the old one. 118 // syncing the new VDOM against the old one.
119 if (oldNode != null && node._key != oldNode._key) { 119 if (oldNode != null && node._key != oldNode._key) {
120 removeChild(oldNode); 120 removeChild(oldNode);
121 } 121 }
122 122
123 if (node._willSync(oldNode)) { 123 if (node._willSync(oldNode)) {
124 _traceSync(_SyncOperation.STATEFUL, node._key); 124 _traceSync(_SyncOperation.STATEFUL, node._key);
125 oldNode._sync(node, slot); 125 oldNode._sync(node, slot);
126 node._defunct = true; 126 node._defunct = true;
127 assert(oldNode.root is RenderNode); 127 assert(oldNode.root is RenderObject);
128 return oldNode; 128 return oldNode;
129 } 129 }
130 130
131 assert(!node._defunct); 131 assert(!node._defunct);
132 node._parent = this; 132 node._parent = this;
133 133
134 if (oldNode == null) { 134 if (oldNode == null) {
135 _traceSync(_SyncOperation.INSERTION, node._key); 135 _traceSync(_SyncOperation.INSERTION, node._key);
136 } else { 136 } else {
137 _traceSync(_SyncOperation.STATELESS, node._key); 137 _traceSync(_SyncOperation.STATELESS, node._key);
138 } 138 }
139 node._sync(oldNode, slot); 139 node._sync(oldNode, slot);
140 if (oldNode != null) 140 if (oldNode != null)
141 oldNode._defunct = true; 141 oldNode._defunct = true;
142 142
143 assert(node.root is RenderNode); 143 assert(node.root is RenderObject);
144 return node; 144 return node;
145 } 145 }
146 } 146 }
147 147
148 abstract class ContentNode extends UINode { 148 abstract class ContentNode extends UINode {
149 UINode content; 149 UINode content;
150 150
151 ContentNode(UINode content) : this.content = content, super(key: content._key) ; 151 ContentNode(UINode content) : this.content = content, super(key: content._key) ;
152 152
153 void _sync(UINode old, dynamic slot) { 153 void _sync(UINode old, dynamic slot) {
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 252
253 void _handleEvent(sky.Event e) { 253 void _handleEvent(sky.Event e) {
254 sky.EventListener listener = listeners[e.type]; 254 sky.EventListener listener = listeners[e.type];
255 if (listener != null) { 255 if (listener != null) {
256 listener(e); 256 listener(e);
257 } 257 }
258 } 258 }
259 } 259 }
260 260
261 /* 261 /*
262 * RenderNodeWrappers correspond to a desired state of a RenderNode. 262 * RenderObjectWrappers correspond to a desired state of a RenderObject.
263 * They are fully immutable, with one exception: A UINode which is a 263 * They are fully immutable, with one exception: A UINode which is a
264 * Component which lives within an OneChildListRenderNodeWrapper's 264 * Component which lives within an OneChildListRenderObjectWrapper's
265 * children list, may be replaced with the "old" instance if it has 265 * children list, may be replaced with the "old" instance if it has
266 * become stateful. 266 * become stateful.
267 */ 267 */
268 abstract class RenderNodeWrapper extends UINode { 268 abstract class RenderObjectWrapper extends UINode {
269 269
270 static final Map<RenderNode, RenderNodeWrapper> _nodeMap = 270 static final Map<RenderObject, RenderObjectWrapper> _nodeMap =
271 new HashMap<RenderNode, RenderNodeWrapper>(); 271 new HashMap<RenderObject, RenderObjectWrapper>();
272 272
273 static RenderNodeWrapper _getMounted(RenderNode node) => _nodeMap[node]; 273 static RenderObjectWrapper _getMounted(RenderObject node) => _nodeMap[node];
274 274
275 RenderNodeWrapper({ 275 RenderObjectWrapper({
276 Object key 276 Object key
277 }) : super(key: key); 277 }) : super(key: key);
278 278
279 RenderNode createNode(); 279 RenderObject createNode();
280 280
281 void insert(RenderNodeWrapper child, dynamic slot); 281 void insert(RenderObjectWrapper child, dynamic slot);
282 282
283 void _sync(UINode old, dynamic slot) { 283 void _sync(UINode old, dynamic slot) {
284 if (old == null) { 284 if (old == null) {
285 root = createNode(); 285 root = createNode();
286 assert(root != null); 286 assert(root != null);
287 var ancestor = findAncestor(RenderNodeWrapper); 287 var ancestor = findAncestor(RenderObjectWrapper);
288 if (ancestor is RenderNodeWrapper) 288 if (ancestor is RenderObjectWrapper)
289 ancestor.insert(this, slot); 289 ancestor.insert(this, slot);
290 } else { 290 } else {
291 root = old.root; 291 root = old.root;
292 assert(root != null); 292 assert(root != null);
293 } 293 }
294 294
295 _nodeMap[root] = this; 295 _nodeMap[root] = this;
296 syncRenderNode(old); 296 syncRenderObject(old);
297 } 297 }
298 298
299 void syncRenderNode(RenderNodeWrapper old) { 299 void syncRenderObject(RenderObjectWrapper old) {
300 ParentData parentData = null; 300 ParentData parentData = null;
301 UINode parent = _parent; 301 UINode parent = _parent;
302 while (parent != null && parent is! RenderNodeWrapper) { 302 while (parent != null && parent is! RenderObjectWrapper) {
303 if (parent is ParentDataNode && parent.parentData != null) { 303 if (parent is ParentDataNode && parent.parentData != null) {
304 if (parentData != null) 304 if (parentData != null)
305 parentData.merge(parent.parentData); // this will throw if the types a ren't the same 305 parentData.merge(parent.parentData); // this will throw if the types a ren't the same
306 else 306 else
307 parentData = parent.parentData; 307 parentData = parent.parentData;
308 } 308 }
309 parent = parent._parent; 309 parent = parent._parent;
310 } 310 }
311 if (parentData != null) { 311 if (parentData != null) {
312 assert(root.parentData != null); 312 assert(root.parentData != null);
313 root.parentData.merge(parentData); // this will throw if the types aren't approriate 313 root.parentData.merge(parentData); // this will throw if the types aren't approriate
314 assert(parent != null); 314 assert(parent != null);
315 assert(parent.root != null); 315 assert(parent.root != null);
316 parent.root.markNeedsLayout(); 316 parent.root.markNeedsLayout();
317 } 317 }
318 } 318 }
319 319
320 void removeChild(UINode node) { 320 void removeChild(UINode node) {
321 root.remove(node.root); 321 root.remove(node.root);
322 super.removeChild(node); 322 super.removeChild(node);
323 } 323 }
324 324
325 void _remove() { 325 void _remove() {
326 assert(root != null); 326 assert(root != null);
327 _nodeMap.remove(root); 327 _nodeMap.remove(root);
328 super._remove(); 328 super._remove();
329 } 329 }
330 } 330 }
331 331
332 abstract class OneChildRenderNodeWrapper extends RenderNodeWrapper { 332 abstract class OneChildRenderObjectWrapper extends RenderObjectWrapper {
333 final UINode child; 333 final UINode child;
334 334
335 OneChildRenderNodeWrapper({ this.child, Object key }) : super(key: key); 335 OneChildRenderObjectWrapper({ this.child, Object key }) : super(key: key);
336 336
337 void insert(RenderNodeWrapper child, dynamic slot) { 337 void insert(RenderObjectWrapper child, dynamic slot) {
338 assert(slot == null); 338 assert(slot == null);
339 root.child = child.root; 339 root.child = child.root;
340 } 340 }
341 341
342 void syncRenderNode(RenderNodeWrapper old) { 342 void syncRenderObject(RenderObjectWrapper old) {
343 super.syncRenderNode(old); 343 super.syncRenderObject(old);
344 UINode oldChild = old == null ? null : (old as OneChildRenderNodeWrapper).ch ild; 344 UINode oldChild = old == null ? null : (old as OneChildRenderObjectWrapper). child;
345 syncChild(child, oldChild, null); 345 syncChild(child, oldChild, null);
346 } 346 }
347 347
348 void _remove() { 348 void _remove() {
349 assert(child != null); 349 assert(child != null);
350 removeChild(child); 350 removeChild(child);
351 super._remove(); 351 super._remove();
352 } 352 }
353 } 353 }
354 354
355 class Padding extends OneChildRenderNodeWrapper { 355 class Padding extends OneChildRenderObjectWrapper {
356 RenderPadding root; 356 RenderPadding root;
357 final EdgeDims padding; 357 final EdgeDims padding;
358 358
359 Padding({ this.padding, UINode child, Object key }) 359 Padding({ this.padding, UINode child, Object key })
360 : super(child: child, key: key); 360 : super(child: child, key: key);
361 361
362 RenderPadding createNode() => new RenderPadding(padding: padding); 362 RenderPadding createNode() => new RenderPadding(padding: padding);
363 363
364 void syncRenderNode(Padding old) { 364 void syncRenderObject(Padding old) {
365 super.syncRenderNode(old); 365 super.syncRenderObject(old);
366 root.padding = padding; 366 root.padding = padding;
367 } 367 }
368 } 368 }
369 369
370 class DecoratedBox extends OneChildRenderNodeWrapper { 370 class DecoratedBox extends OneChildRenderObjectWrapper {
371 RenderDecoratedBox root; 371 RenderDecoratedBox root;
372 final BoxDecoration decoration; 372 final BoxDecoration decoration;
373 373
374 DecoratedBox({ this.decoration, UINode child, Object key }) 374 DecoratedBox({ this.decoration, UINode child, Object key })
375 : super(child: child, key: key); 375 : super(child: child, key: key);
376 376
377 RenderDecoratedBox createNode() => new RenderDecoratedBox(decoration: decorati on); 377 RenderDecoratedBox createNode() => new RenderDecoratedBox(decoration: decorati on);
378 378
379 void syncRenderNode(DecoratedBox old) { 379 void syncRenderObject(DecoratedBox old) {
380 super.syncRenderNode(old); 380 super.syncRenderObject(old);
381 root.decoration = decoration; 381 root.decoration = decoration;
382 } 382 }
383 } 383 }
384 384
385 class SizedBox extends OneChildRenderNodeWrapper { 385 class SizedBox extends OneChildRenderObjectWrapper {
386 RenderSizedBox root; 386 RenderSizedBox root;
387 final sky.Size desiredSize; 387 final sky.Size desiredSize;
388 388
389 SizedBox({ this.desiredSize, UINode child, Object key }) 389 SizedBox({ this.desiredSize, UINode child, Object key })
390 : super(child: child, key: key); 390 : super(child: child, key: key);
391 391
392 RenderSizedBox createNode() => new RenderSizedBox(desiredSize: desiredSize); 392 RenderSizedBox createNode() => new RenderSizedBox(desiredSize: desiredSize);
393 393
394 void syncRenderNode(SizedBox old) { 394 void syncRenderObject(SizedBox old) {
395 super.syncRenderNode(old); 395 super.syncRenderObject(old);
396 root.desiredSize = desiredSize; 396 root.desiredSize = desiredSize;
397 } 397 }
398 } 398 }
399 399
400 class Transform extends OneChildRenderNodeWrapper { 400 class Transform extends OneChildRenderObjectWrapper {
401 RenderTransform root; 401 RenderTransform root;
402 final Matrix4 transform; 402 final Matrix4 transform;
403 403
404 Transform({ this.transform, UINode child, Object key }) 404 Transform({ this.transform, UINode child, Object key })
405 : super(child: child, key: key); 405 : super(child: child, key: key);
406 406
407 RenderTransform createNode() => new RenderTransform(transform: transform); 407 RenderTransform createNode() => new RenderTransform(transform: transform);
408 408
409 void syncRenderNode(Transform old) { 409 void syncRenderObject(Transform old) {
410 super.syncRenderNode(old); 410 super.syncRenderObject(old);
411 root.transform = transform; 411 root.transform = transform;
412 } 412 }
413 } 413 }
414 414
415 final List<UINode> _emptyList = new List<UINode>(); 415 final List<UINode> _emptyList = new List<UINode>();
416 416
417 abstract class OneChildListRenderNodeWrapper extends RenderNodeWrapper { 417 abstract class OneChildListRenderObjectWrapper extends RenderObjectWrapper {
418 418
419 // In OneChildListRenderNodeWrapper subclasses, slots are RenderNode nodes 419 // In OneChildListRenderObjectWrapper subclasses, slots are RenderObject nodes
420 // to use as the "insert before" sibling in ContainerRenderNodeMixin.add() cal ls 420 // to use as the "insert before" sibling in ContainerRenderObjectMixin.add() c alls
421 421
422 final List<UINode> children; 422 final List<UINode> children;
423 423
424 OneChildListRenderNodeWrapper({ 424 OneChildListRenderObjectWrapper({
425 Object key, 425 Object key,
426 List<UINode> children 426 List<UINode> children
427 }) : this.children = children == null ? _emptyList : children, 427 }) : this.children = children == null ? _emptyList : children,
428 super( 428 super(
429 key: key 429 key: key
430 ) { 430 ) {
431 assert(!_debugHasDuplicateIds()); 431 assert(!_debugHasDuplicateIds());
432 } 432 }
433 433
434 void insert(RenderNodeWrapper child, dynamic slot) { 434 void insert(RenderObjectWrapper child, dynamic slot) {
435 assert(slot == null || slot is RenderNode); 435 assert(slot == null || slot is RenderObject);
436 root.add(child.root, before: slot); 436 root.add(child.root, before: slot);
437 } 437 }
438 438
439 void _remove() { 439 void _remove() {
440 assert(children != null); 440 assert(children != null);
441 for (var child in children) { 441 for (var child in children) {
442 assert(child != null); 442 assert(child != null);
443 removeChild(child); 443 removeChild(child);
444 } 444 }
445 super._remove(); 445 super._remove();
446 } 446 }
447 447
448 bool _debugHasDuplicateIds() { 448 bool _debugHasDuplicateIds() {
449 var idSet = new HashSet<String>(); 449 var idSet = new HashSet<String>();
450 for (var child in children) { 450 for (var child in children) {
451 assert(child != null); 451 assert(child != null);
452 if (child.interchangeable) 452 if (child.interchangeable)
453 continue; // when these nodes are reordered, we just reassign the data 453 continue; // when these nodes are reordered, we just reassign the data
454 454
455 if (!idSet.add(child._key)) { 455 if (!idSet.add(child._key)) {
456 throw '''If multiple non-interchangeable nodes of the same type exist as children 456 throw '''If multiple non-interchangeable nodes of the same type exist as children
457 of another node, they must have unique keys. 457 of another node, they must have unique keys.
458 Duplicate: "${child._key}"'''; 458 Duplicate: "${child._key}"''';
459 } 459 }
460 } 460 }
461 return false; 461 return false;
462 } 462 }
463 463
464 void syncRenderNode(OneChildListRenderNodeWrapper old) { 464 void syncRenderObject(OneChildListRenderObjectWrapper old) {
465 super.syncRenderNode(old); 465 super.syncRenderObject(old);
466 466
467 if (root is! ContainerRenderNodeMixin) 467 if (root is! ContainerRenderObjectMixin)
468 return; 468 return;
469 469
470 var startIndex = 0; 470 var startIndex = 0;
471 var endIndex = children.length; 471 var endIndex = children.length;
472 472
473 var oldChildren = old == null ? [] : old.children; 473 var oldChildren = old == null ? [] : old.children;
474 var oldStartIndex = 0; 474 var oldStartIndex = 0;
475 var oldEndIndex = oldChildren.length; 475 var oldEndIndex = oldChildren.length;
476 476
477 RenderNode nextSibling = null; 477 RenderObject nextSibling = null;
478 UINode currentNode = null; 478 UINode currentNode = null;
479 UINode oldNode = null; 479 UINode oldNode = null;
480 480
481 void sync(int atIndex) { 481 void sync(int atIndex) {
482 children[atIndex] = syncChild(currentNode, oldNode, nextSibling); 482 children[atIndex] = syncChild(currentNode, oldNode, nextSibling);
483 assert(children[atIndex] != null); 483 assert(children[atIndex] != null);
484 } 484 }
485 485
486 // Scan backwards from end of list while nodes can be directly synced 486 // Scan backwards from end of list while nodes can be directly synced
487 // without reordering. 487 // without reordering.
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
529 bool searchForOldNode() { 529 bool searchForOldNode() {
530 if (currentNode.interchangeable) 530 if (currentNode.interchangeable)
531 return false; // never re-order these nodes 531 return false; // never re-order these nodes
532 532
533 ensureOldIdMap(); 533 ensureOldIdMap();
534 oldNode = oldNodeIdMap[currentNode._key]; 534 oldNode = oldNodeIdMap[currentNode._key];
535 if (oldNode == null) 535 if (oldNode == null)
536 return false; 536 return false;
537 537
538 oldNodeIdMap[currentNode._key] = null; // mark it reordered 538 oldNodeIdMap[currentNode._key] = null; // mark it reordered
539 assert(root is ContainerRenderNodeMixin); 539 assert(root is ContainerRenderObjectMixin);
540 assert(oldNode.root is ContainerRenderNodeMixin); 540 assert(oldNode.root is ContainerRenderObjectMixin);
541 541
542 old.root.remove(oldNode.root); 542 old.root.remove(oldNode.root);
543 root.add(oldNode.root, before: nextSibling); 543 root.add(oldNode.root, before: nextSibling);
544 544
545 return true; 545 return true;
546 } 546 }
547 547
548 // Scan forwards, this time we may re-order; 548 // Scan forwards, this time we may re-order;
549 nextSibling = root.firstChild; 549 nextSibling = root.firstChild;
550 while (startIndex < endIndex && oldStartIndex < oldEndIndex) { 550 while (startIndex < endIndex && oldStartIndex < oldEndIndex) {
(...skipping 26 matching lines...) Expand all
577 // Removals 577 // Removals
578 currentNode = null; 578 currentNode = null;
579 while (oldStartIndex < oldEndIndex) { 579 while (oldStartIndex < oldEndIndex) {
580 oldNode = oldChildren[oldStartIndex]; 580 oldNode = oldChildren[oldStartIndex];
581 removeChild(oldNode); 581 removeChild(oldNode);
582 advanceOldStartIndex(); 582 advanceOldStartIndex();
583 } 583 }
584 } 584 }
585 } 585 }
586 586
587 class BlockContainer extends OneChildListRenderNodeWrapper { 587 class BlockContainer extends OneChildListRenderObjectWrapper {
588 RenderBlock root; 588 RenderBlock root;
589 RenderBlock createNode() => new RenderBlock(); 589 RenderBlock createNode() => new RenderBlock();
590 590
591 BlockContainer({ Object key, List<UINode> children }) 591 BlockContainer({ Object key, List<UINode> children })
592 : super(key: key, children: children); 592 : super(key: key, children: children);
593 } 593 }
594 594
595 class StackContainer extends OneChildListRenderNodeWrapper { 595 class StackContainer extends OneChildListRenderObjectWrapper {
596 RenderStack root; 596 RenderStack root;
597 RenderStack createNode() => new RenderStack(); 597 RenderStack createNode() => new RenderStack();
598 598
599 StackContainer({ Object key, List<UINode> children }) 599 StackContainer({ Object key, List<UINode> children })
600 : super(key: key, children: children); 600 : super(key: key, children: children);
601 } 601 }
602 602
603 class Paragraph extends RenderNodeWrapper { 603 class Paragraph extends RenderObjectWrapper {
604 RenderParagraph root; 604 RenderParagraph root;
605 RenderParagraph createNode() => new RenderParagraph(text: text); 605 RenderParagraph createNode() => new RenderParagraph(text: text);
606 606
607 final String text; 607 final String text;
608 608
609 Paragraph({ Object key, this.text }) : super(key: key); 609 Paragraph({ Object key, this.text }) : super(key: key);
610 610
611 void syncRenderNode(UINode old) { 611 void syncRenderObject(UINode old) {
612 super.syncRenderNode(old); 612 super.syncRenderObject(old);
613 root.text = text; 613 root.text = text;
614 } 614 }
615 } 615 }
616 616
617 class FlexContainer extends OneChildListRenderNodeWrapper { 617 class FlexContainer extends OneChildListRenderObjectWrapper {
618 RenderFlex root; 618 RenderFlex root;
619 RenderFlex createNode() => new RenderFlex(direction: this.direction); 619 RenderFlex createNode() => new RenderFlex(direction: this.direction);
620 620
621 final FlexDirection direction; 621 final FlexDirection direction;
622 622
623 FlexContainer({ 623 FlexContainer({
624 Object key, 624 Object key,
625 List<UINode> children, 625 List<UINode> children,
626 this.direction: FlexDirection.Horizontal 626 this.direction: FlexDirection.Horizontal
627 }) : super(key: key, children: children); 627 }) : super(key: key, children: children);
628 628
629 void syncRenderNode(UINode old) { 629 void syncRenderObject(UINode old) {
630 super.syncRenderNode(old); 630 super.syncRenderObject(old);
631 root.direction = direction; 631 root.direction = direction;
632 } 632 }
633 } 633 }
634 634
635 class FlexExpandingChild extends ParentDataNode { 635 class FlexExpandingChild extends ParentDataNode {
636 FlexExpandingChild(UINode content, [int flex = 1]) 636 FlexExpandingChild(UINode content, [int flex = 1])
637 : super(content, new FlexBoxParentData()..flex = flex); 637 : super(content, new FlexBoxParentData()..flex = flex);
638 } 638 }
639 639
640 class Image extends RenderNodeWrapper { 640 class Image extends RenderObjectWrapper {
641 RenderImage root; 641 RenderImage root;
642 RenderImage createNode() => new RenderImage(this.src, this.size); 642 RenderImage createNode() => new RenderImage(this.src, this.size);
643 643
644 final String src; 644 final String src;
645 final sky.Size size; 645 final sky.Size size;
646 646
647 Image({ 647 Image({
648 Object key, 648 Object key,
649 this.src, 649 this.src,
650 this.size 650 this.size
651 }) : super(key: key); 651 }) : super(key: key);
652 652
653 void syncRenderNode(UINode old) { 653 void syncRenderObject(UINode old) {
654 super.syncRenderNode(old); 654 super.syncRenderObject(old);
655 root.src = src; 655 root.src = src;
656 root.requestedSize = size; 656 root.requestedSize = size;
657 } 657 }
658 } 658 }
659 659
660 660
661 Set<Component> _mountedComponents = new HashSet<Component>(); 661 Set<Component> _mountedComponents = new HashSet<Component>();
662 Set<Component> _unmountedComponents = new HashSet<Component>(); 662 Set<Component> _unmountedComponents = new HashSet<Component>();
663 663
664 void _enqueueDidMount(Component c) { 664 void _enqueueDidMount(Component c) {
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
771 _mountCallbacks.forEach((fn) => fn()); 771 _mountCallbacks.forEach((fn) => fn());
772 } 772 }
773 773
774 void _didUnmount() { 774 void _didUnmount() {
775 if (_unmountCallbacks != null) 775 if (_unmountCallbacks != null)
776 _unmountCallbacks.forEach((fn) => fn()); 776 _unmountCallbacks.forEach((fn) => fn());
777 } 777 }
778 778
779 // TODO(rafaelw): It seems wrong to expose DOM at all. This is presently 779 // TODO(rafaelw): It seems wrong to expose DOM at all. This is presently
780 // needed to get sizing info. 780 // needed to get sizing info.
781 RenderNode getRoot() => root; 781 RenderObject getRoot() => root;
782 782
783 void _remove() { 783 void _remove() {
784 assert(_built != null); 784 assert(_built != null);
785 assert(root != null); 785 assert(root != null);
786 removeChild(_built); 786 removeChild(_built);
787 _built = null; 787 _built = null;
788 _enqueueDidUnmount(this); 788 _enqueueDidUnmount(this);
789 super._remove(); 789 super._remove();
790 } 790 }
791 791
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
911 return current; 911 return current;
912 } 912 }
913 } 913 }
914 914
915 class _AppView extends AppView { 915 class _AppView extends AppView {
916 _AppView() : super(null); 916 _AppView() : super(null);
917 917
918 void dispatchEvent(sky.Event event, HitTestResult result) { 918 void dispatchEvent(sky.Event event, HitTestResult result) {
919 super.dispatchEvent(event, result); 919 super.dispatchEvent(event, result);
920 920
921 UINode target = RenderNodeWrapper._getMounted(result.path.first); 921 UINode target = RenderObjectWrapper._getMounted(result.path.first);
922 922
923 // TODO(rafaelw): StopPropagation? 923 // TODO(rafaelw): StopPropagation?
924 while (target != null) { 924 while (target != null) {
925 if (target is EventListenerNode) 925 if (target is EventListenerNode)
926 target._handleEvent(event); 926 target._handleEvent(event);
927 target = target._parent; 927 target = target._parent;
928 } 928 }
929 } 929 }
930 } 930 }
931 931
(...skipping 16 matching lines...) Expand all
948 assert(root.parent is RenderView); 948 assert(root.parent is RenderView);
949 } 949 }
950 } 950 }
951 951
952 class Text extends Component { 952 class Text extends Component {
953 Text(this.data) : super(key: '*text*'); 953 Text(this.data) : super(key: '*text*');
954 final String data; 954 final String data;
955 bool get interchangeable => true; 955 bool get interchangeable => true;
956 UINode build() => new Paragraph(text: data); 956 UINode build() => new Paragraph(text: data);
957 } 957 }
OLDNEW
« no previous file with comments | « sky/sdk/lib/framework/components2/scaffold.dart ('k') | sky/sdk/lib/framework/rendering/block.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698