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

Side by Side Diff: sky/sdk/lib/widgets/basic.dart

Issue 1236043004: Improve drawer performance (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: cache paint Created 5 years, 5 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 | « sky/sdk/lib/rendering/box.dart ('k') | sky/sdk/lib/widgets/drawer_item.dart » ('j') | 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 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
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 }
OLDNEW
« no previous file with comments | « sky/sdk/lib/rendering/box.dart ('k') | sky/sdk/lib/widgets/drawer_item.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698