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:async'; |
6 import 'dart:sky' as sky; | 6 import 'dart:sky' as sky; |
7 | 7 |
8 import 'package:vector_math/vector_math.dart'; | 8 import 'package:vector_math/vector_math.dart'; |
9 | 9 |
10 import 'package:sky/mojo/asset_bundle.dart'; | 10 import 'package:sky/mojo/asset_bundle.dart'; |
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
478 } else { | 478 } else { |
479 combinedStyle = style; | 479 combinedStyle = style; |
480 } | 480 } |
481 if (combinedStyle != null) | 481 if (combinedStyle != null) |
482 text = new InlineStyle(combinedStyle, [text]); | 482 text = new InlineStyle(combinedStyle, [text]); |
483 return new Inline(text: text); | 483 return new Inline(text: text); |
484 } | 484 } |
485 } | 485 } |
486 | 486 |
487 class Image extends LeafRenderObjectWrapper { | 487 class Image extends LeafRenderObjectWrapper { |
488 Image({ sky.Image image, this.size }) | 488 Image({ sky.Image image, this.size, this.colorFilter }) |
489 : image = image, | 489 : image = image, |
490 super(key: image.hashCode.toString()); // TODO(ianh): Find a way to unique
ly identify the sky.Image rather than using hashCode, which could collide | 490 super(key: image.hashCode.toString()); // TODO(ianh): Find a way to unique
ly identify the sky.Image rather than using hashCode, which could collide |
491 | 491 |
492 final sky.Image image; | 492 final sky.Image image; |
493 final Size size; | 493 final Size size; |
| 494 final sky.ColorFilter colorFilter; |
494 | 495 |
495 RenderImage createNode() => new RenderImage(image, size); | 496 RenderImage createNode() => new RenderImage(image, size, colorFilter: colorFil
ter); |
496 RenderImage get root => super.root; | 497 RenderImage get root => super.root; |
497 | 498 |
498 void syncRenderObject(Widget old) { | 499 void syncRenderObject(Widget old) { |
499 super.syncRenderObject(old); | 500 super.syncRenderObject(old); |
500 root.image = image; | 501 root.image = image; |
501 root.requestedSize = size; | 502 root.requestedSize = size; |
| 503 root.colorFilter = colorFilter; |
502 } | 504 } |
503 } | 505 } |
504 | 506 |
505 class FutureImage extends StatefulComponent { | 507 class FutureImage extends StatefulComponent { |
506 FutureImage({ String key, this.image, this.size }) : super(key: key); | 508 FutureImage({ String key, this.image, this.size, this.colorFilter }) |
| 509 : super(key: key); |
507 | 510 |
508 Future<sky.Image> image; | 511 Future<sky.Image> image; |
509 Size size; | 512 Size size; |
| 513 sky.ColorFilter colorFilter; |
510 | 514 |
511 sky.Image _resolvedImage; | 515 sky.Image _resolvedImage; |
512 | 516 |
513 void _resolveImage() { | 517 void _resolveImage() { |
514 image.then((sky.Image resolvedImage) { | 518 image.then((sky.Image resolvedImage) { |
515 if (!mounted) | 519 if (!mounted) |
516 return; | 520 return; |
517 setState(() { | 521 setState(() { |
518 _resolvedImage = resolvedImage; | 522 _resolvedImage = resolvedImage; |
519 }); | 523 }); |
520 }); | 524 }); |
521 } | 525 } |
522 | 526 |
523 void didMount() { | 527 void didMount() { |
524 super.didMount(); | 528 super.didMount(); |
525 _resolveImage(); | 529 _resolveImage(); |
526 } | 530 } |
527 | 531 |
528 void syncFields(FutureImage source) { | 532 void syncFields(FutureImage source) { |
529 bool needToResolveImage = (image != source.image); | 533 bool needToResolveImage = (image != source.image); |
530 image = source.image; | 534 image = source.image; |
531 size = source.size; | 535 size = source.size; |
532 if (needToResolveImage) | 536 if (needToResolveImage) |
533 _resolveImage(); | 537 _resolveImage(); |
534 } | 538 } |
535 | 539 |
536 Widget build() { | 540 Widget build() { |
537 return new Image(image: _resolvedImage, size: size); | 541 return new Image(image: _resolvedImage, size: size, colorFilter: colorFilter
); |
538 } | 542 } |
539 } | 543 } |
540 | 544 |
541 class NetworkImage extends Component { | 545 class NetworkImage extends Component { |
542 NetworkImage({ String src, this.size }) | 546 NetworkImage({ String src, this.size, this.colorFilter }) |
543 : src = src, | 547 : src = src, |
544 super(key: src); | 548 super(key: src); |
545 | 549 |
546 final String src; | 550 final String src; |
547 final Size size; | 551 final Size size; |
| 552 final sky.ColorFilter colorFilter; |
548 | 553 |
549 Widget build() { | 554 Widget build() { |
550 return new FutureImage(image: image_cache.load(src), size: size); | 555 return new FutureImage( |
| 556 image: image_cache.load(src), |
| 557 size: size, |
| 558 colorFilter: colorFilter |
| 559 ); |
551 } | 560 } |
552 } | 561 } |
553 | 562 |
554 class AssetImage extends Component { | 563 class AssetImage extends Component { |
555 AssetImage({ String name, this.bundle, this.size }) | 564 AssetImage({ String name, this.bundle, this.size, this.colorFilter }) |
556 : name = name, | 565 : name = name, |
557 super(key: name); | 566 super(key: name); |
558 | 567 |
559 final String name; | 568 final String name; |
560 final AssetBundle bundle; | 569 final AssetBundle bundle; |
561 final Size size; | 570 final Size size; |
| 571 final sky.ColorFilter colorFilter; |
562 | 572 |
563 Widget build() { | 573 Widget build() { |
564 return new FutureImage(image: bundle.loadImage(name), size: size); | 574 return new FutureImage( |
| 575 image: bundle.loadImage(name), |
| 576 size: size, |
| 577 colorFilter: colorFilter |
| 578 ); |
565 } | 579 } |
566 } | 580 } |
567 | 581 |
568 class WidgetToRenderBoxAdapter extends LeafRenderObjectWrapper { | 582 class WidgetToRenderBoxAdapter extends LeafRenderObjectWrapper { |
569 WidgetToRenderBoxAdapter(RenderBox renderBox) | 583 WidgetToRenderBoxAdapter(RenderBox renderBox) |
570 : renderBox = renderBox, | 584 : renderBox = renderBox, |
571 super(key: renderBox.hashCode.toString()); // TODO(ianh): Find a way to un
iquely identify the RenderBox rather than using hashCode, which could collide | 585 super(key: renderBox.hashCode.toString()); // TODO(ianh): Find a way to un
iquely identify the RenderBox rather than using hashCode, which could collide |
572 | 586 |
573 final RenderBox renderBox; | 587 final RenderBox renderBox; |
574 | 588 |
575 RenderBox createNode() => this.renderBox; | 589 RenderBox createNode() => this.renderBox; |
576 RenderBox get root => super.root; | 590 RenderBox get root => super.root; |
577 | 591 |
578 void syncRenderObject(Widget old) { | 592 void syncRenderObject(Widget old) { |
579 super.syncRenderObject(old); | 593 super.syncRenderObject(old); |
580 if (old != null) { | 594 if (old != null) { |
581 assert(old is WidgetToRenderBoxAdapter); | 595 assert(old is WidgetToRenderBoxAdapter); |
582 assert(root == old.root); | 596 assert(root == old.root); |
583 } | 597 } |
584 } | 598 } |
585 | 599 |
586 void remove() { | 600 void remove() { |
587 RenderObjectWrapper ancestor = findAncestorRenderObjectWrapper(); | 601 RenderObjectWrapper ancestor = findAncestorRenderObjectWrapper(); |
588 assert(ancestor is RenderObjectWrapper); | 602 assert(ancestor is RenderObjectWrapper); |
589 assert(ancestor.root == root.parent); | 603 assert(ancestor.root == root.parent); |
590 ancestor.detachChildRoot(this); | 604 ancestor.detachChildRoot(this); |
591 super.remove(); | 605 super.remove(); |
592 } | 606 } |
593 } | 607 } |
OLD | NEW |