Chromium Code Reviews| 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 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 446 Widget build() { | 448 Widget build() { |
| 447 InlineBase text = new InlineText(data); | 449 InlineBase text = new InlineText(data); |
| 448 TextStyle defaultStyle = DefaultTextStyle.of(this); | 450 TextStyle defaultStyle = DefaultTextStyle.of(this); |
| 449 TextStyle combinedStyle; | 451 TextStyle combinedStyle; |
| 450 if (defaultStyle != null) { | 452 if (defaultStyle != null) { |
| 451 if (style != null) | 453 if (style != null) |
| 452 combinedStyle = defaultStyle.merge(style); | 454 combinedStyle = defaultStyle.merge(style); |
| 453 else | 455 else |
| 454 combinedStyle = defaultStyle; | 456 combinedStyle = defaultStyle; |
| 455 } else { | 457 } else { |
| 456 combinedStyle = style; | 458 combinedStyle = style; |
| 457 } | 459 } |
| 458 if (combinedStyle != null) | 460 if (combinedStyle != null) |
| 459 text = new InlineStyle(combinedStyle, [text]); | 461 text = new InlineStyle(combinedStyle, [text]); |
| 460 return new Inline(text: text); | 462 return new Inline(text: text); |
| 461 } | 463 } |
| 462 } | 464 } |
| 463 | 465 |
| 464 class Image extends LeafRenderObjectWrapper { | 466 class Image extends LeafRenderObjectWrapper { |
| 467 Image({ sky.Image image, this.size }) | |
| 468 : image = image, super(key: image.hashCode.toString()); | |
| 465 | 469 |
| 466 Image({ | 470 RenderImage get root => super.root; |
| 467 src, | 471 RenderImage createNode() => new RenderImage(image, size); |
| 468 this.size | 472 |
| 469 }) : src = src, | 473 final sky.Image image; |
| 470 super(key: src) { | 474 final Size size; |
| 471 assert(src != null); | 475 |
| 476 void syncRenderObject(Widget old) { | |
| 477 super.syncRenderObject(old); | |
| 478 root.image = image; | |
| 479 root.requestedSize = size; | |
| 480 } | |
| 481 } | |
| 482 | |
| 483 class FutureImage extends Component { | |
| 484 FutureImage({ this.image, this.size }) : super(stateful: true); | |
| 485 | |
| 486 Future<sky.Image> image; | |
| 487 Size size; | |
| 488 sky.Image _resolvedImage; | |
| 489 | |
| 490 void didMount() { | |
| 491 super.didMount(); | |
| 492 _fetchImage(); | |
| 472 } | 493 } |
| 473 | 494 |
| 474 RenderImage get root => super.root; | 495 void _fetchImage() { |
|
Hixie
2015/07/01 20:53:34
fetch sounds like it hits the network
| |
| 475 RenderImage createNode() => new RenderImage(this.src, this.size); | 496 image.then((sky.Image image) { |
| 497 setState(() { | |
| 498 if (!mounted) | |
| 499 return; | |
| 500 _resolvedImage = image; | |
| 501 }); | |
| 502 }); | |
| 503 } | |
| 504 | |
| 505 void syncFields(FutureImage source) { | |
| 506 bool needToFetchImage = (image != source.image); | |
| 507 image = source.image; | |
| 508 size = source.size; | |
| 509 if (needToFetchImage) | |
| 510 _fetchImage(); | |
| 511 } | |
| 512 | |
| 513 Widget build() { | |
| 514 return new Image(image: _resolvedImage, size: size); | |
| 515 } | |
| 516 } | |
| 517 | |
| 518 class NetworkImage extends Component { | |
| 519 NetworkImage({ String src, this.size }) : src = src, super(key: src); | |
| 476 | 520 |
| 477 final String src; | 521 final String src; |
| 478 final Size size; | 522 final Size size; |
| 479 | 523 |
| 480 void syncRenderObject(Widget old) { | 524 Widget build() { |
| 481 super.syncRenderObject(old); | 525 return new FutureImage(image: image_cache.load(src), size: size); |
| 482 root.src = src; | |
| 483 root.requestedSize = size; | |
| 484 } | 526 } |
| 485 | |
| 486 } | 527 } |
| 487 | 528 |
| 488 class WidgetToRenderBoxAdapter extends LeafRenderObjectWrapper { | 529 class WidgetToRenderBoxAdapter extends LeafRenderObjectWrapper { |
| 489 | 530 |
| 490 WidgetToRenderBoxAdapter(RenderBox renderBox) | 531 WidgetToRenderBoxAdapter(RenderBox renderBox) |
| 491 : renderBox = renderBox, | 532 : renderBox = renderBox, |
| 492 super(key: renderBox.hashCode.toString()); | 533 super(key: renderBox.hashCode.toString()); |
| 493 | 534 |
| 494 RenderBox get root => super.root; | 535 RenderBox get root => super.root; |
| 495 RenderBox createNode() => this.renderBox; | 536 RenderBox createNode() => this.renderBox; |
| 496 | 537 |
| 497 final RenderBox renderBox; | 538 final RenderBox renderBox; |
| 498 | 539 |
| 499 void syncRenderObject(Widget old) { | 540 void syncRenderObject(Widget old) { |
| 500 super.syncRenderObject(old); | 541 super.syncRenderObject(old); |
| 501 if (old != null) { | 542 if (old != null) { |
| 502 assert(old is WidgetToRenderBoxAdapter); | 543 assert(old is WidgetToRenderBoxAdapter); |
| 503 assert(root == old.root); | 544 assert(root == old.root); |
| 504 } | 545 } |
| 505 } | 546 } |
| 506 | 547 |
| 507 void remove() { | 548 void remove() { |
| 508 RenderObjectWrapper ancestor = findAncestor(RenderObjectWrapper); | 549 RenderObjectWrapper ancestor = findAncestor(RenderObjectWrapper); |
| 509 assert(ancestor is RenderObjectWrapper); | 550 assert(ancestor is RenderObjectWrapper); |
| 510 ancestor.detachChildRoot(this); | 551 ancestor.detachChildRoot(this); |
| 511 super.remove(); | 552 super.remove(); |
| 512 } | 553 } |
| 513 | 554 |
| 514 } | 555 } |
| OLD | NEW |