| 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:async'; |
| 5 import 'dart:sky' as sky; | 6 import 'dart:sky' as sky; |
| 6 | 7 |
| 7 import 'package:vector_math/vector_math.dart'; | 8 import 'package:vector_math/vector_math.dart'; |
| 8 | 9 |
| 10 import '../mojo/net/image_cache.dart' as image_cache; |
| 9 import '../painting/text_style.dart'; | 11 import '../painting/text_style.dart'; |
| 10 import '../rendering/block.dart'; | 12 import '../rendering/block.dart'; |
| 11 import '../rendering/box.dart'; | 13 import '../rendering/box.dart'; |
| 12 import '../rendering/flex.dart'; | 14 import '../rendering/flex.dart'; |
| 13 import '../rendering/object.dart'; | 15 import '../rendering/object.dart'; |
| 14 import '../rendering/paragraph.dart'; | 16 import '../rendering/paragraph.dart'; |
| 15 import '../rendering/stack.dart'; | 17 import '../rendering/stack.dart'; |
| 16 import 'default_text_style.dart'; | 18 import 'default_text_style.dart'; |
| 17 import 'widget.dart'; | 19 import 'widget.dart'; |
| 18 | 20 |
| (...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 470 Widget build() { | 472 Widget build() { |
| 471 InlineBase text = new InlineText(data); | 473 InlineBase text = new InlineText(data); |
| 472 TextStyle defaultStyle = DefaultTextStyle.of(this); | 474 TextStyle defaultStyle = DefaultTextStyle.of(this); |
| 473 TextStyle combinedStyle; | 475 TextStyle combinedStyle; |
| 474 if (defaultStyle != null) { | 476 if (defaultStyle != null) { |
| 475 if (style != null) | 477 if (style != null) |
| 476 combinedStyle = defaultStyle.merge(style); | 478 combinedStyle = defaultStyle.merge(style); |
| 477 else | 479 else |
| 478 combinedStyle = defaultStyle; | 480 combinedStyle = defaultStyle; |
| 479 } else { | 481 } else { |
| 480 combinedStyle = style; | 482 combinedStyle = style; |
| 481 } | 483 } |
| 482 if (combinedStyle != null) | 484 if (combinedStyle != null) |
| 483 text = new InlineStyle(combinedStyle, [text]); | 485 text = new InlineStyle(combinedStyle, [text]); |
| 484 return new Inline(text: text); | 486 return new Inline(text: text); |
| 485 } | 487 } |
| 486 } | 488 } |
| 487 | 489 |
| 488 class Image extends LeafRenderObjectWrapper { | 490 class Image extends LeafRenderObjectWrapper { |
| 491 Image({ sky.Image image, this.size }) |
| 492 : image = image, super(key: image.hashCode.toString()); |
| 489 | 493 |
| 490 Image({ | 494 RenderImage get root => super.root; |
| 491 src, | 495 RenderImage createNode() => new RenderImage(image, size); |
| 492 this.size | 496 |
| 493 }) : src = src, | 497 final sky.Image image; |
| 494 super(key: src) { | 498 final Size size; |
| 495 assert(src != null); | 499 |
| 500 void syncRenderObject(Widget old) { |
| 501 super.syncRenderObject(old); |
| 502 root.image = image; |
| 503 root.requestedSize = size; |
| 504 } |
| 505 } |
| 506 |
| 507 class FutureImage extends Component { |
| 508 FutureImage({ this.image, this.size }) : super(stateful: true); |
| 509 |
| 510 Future<sky.Image> image; |
| 511 Size size; |
| 512 sky.Image _resolvedImage; |
| 513 |
| 514 void didMount() { |
| 515 super.didMount(); |
| 516 _resolveImage(); |
| 496 } | 517 } |
| 497 | 518 |
| 498 RenderImage get root => super.root; | 519 void _resolveImage() { |
| 499 RenderImage createNode() => new RenderImage(this.src, this.size); | 520 image.then((sky.Image resolvedImage) { |
| 521 if (!mounted) |
| 522 return; |
| 523 setState(() { |
| 524 _resolvedImage = resolvedImage; |
| 525 }); |
| 526 }); |
| 527 } |
| 528 |
| 529 void syncFields(FutureImage source) { |
| 530 bool needToResolveImage = (image != source.image); |
| 531 image = source.image; |
| 532 size = source.size; |
| 533 if (needToResolveImage) |
| 534 _resolveImage(); |
| 535 } |
| 536 |
| 537 Widget build() { |
| 538 return new Image(image: _resolvedImage, size: size); |
| 539 } |
| 540 } |
| 541 |
| 542 class NetworkImage extends Component { |
| 543 NetworkImage({ String src, this.size }) : src = src, super(key: src); |
| 500 | 544 |
| 501 final String src; | 545 final String src; |
| 502 final Size size; | 546 final Size size; |
| 503 | 547 |
| 504 void syncRenderObject(Widget old) { | 548 Widget build() { |
| 505 super.syncRenderObject(old); | 549 return new FutureImage(image: image_cache.load(src), size: size); |
| 506 root.src = src; | |
| 507 root.requestedSize = size; | |
| 508 } | 550 } |
| 509 | |
| 510 } | 551 } |
| 511 | 552 |
| 512 class WidgetToRenderBoxAdapter extends LeafRenderObjectWrapper { | 553 class WidgetToRenderBoxAdapter extends LeafRenderObjectWrapper { |
| 513 | 554 |
| 514 WidgetToRenderBoxAdapter(RenderBox renderBox) | 555 WidgetToRenderBoxAdapter(RenderBox renderBox) |
| 515 : renderBox = renderBox, | 556 : renderBox = renderBox, |
| 516 super(key: renderBox.hashCode.toString()); | 557 super(key: renderBox.hashCode.toString()); |
| 517 | 558 |
| 518 RenderBox get root => super.root; | 559 RenderBox get root => super.root; |
| 519 RenderBox createNode() => this.renderBox; | 560 RenderBox createNode() => this.renderBox; |
| 520 | 561 |
| 521 final RenderBox renderBox; | 562 final RenderBox renderBox; |
| 522 | 563 |
| 523 void syncRenderObject(Widget old) { | 564 void syncRenderObject(Widget old) { |
| 524 super.syncRenderObject(old); | 565 super.syncRenderObject(old); |
| 525 if (old != null) { | 566 if (old != null) { |
| 526 assert(old is WidgetToRenderBoxAdapter); | 567 assert(old is WidgetToRenderBoxAdapter); |
| 527 assert(root == old.root); | 568 assert(root == old.root); |
| 528 } | 569 } |
| 529 } | 570 } |
| 530 | 571 |
| 531 void remove() { | 572 void remove() { |
| 532 RenderObjectWrapper ancestor = findAncestor(RenderObjectWrapper); | 573 RenderObjectWrapper ancestor = findAncestor(RenderObjectWrapper); |
| 533 assert(ancestor is RenderObjectWrapper); | 574 assert(ancestor is RenderObjectWrapper); |
| 534 ancestor.detachChildRoot(this); | 575 ancestor.detachChildRoot(this); |
| 535 super.remove(); | 576 super.remove(); |
| 536 } | 577 } |
| 537 | 578 |
| 538 } | 579 } |
| OLD | NEW |