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

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

Issue 1162033002: Introduce RenderProxyBox and RenderSizedBox (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Now with test 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
« no previous file with comments | « sky/sdk/lib/framework/components2/scaffold.dart ('k') | sky/tests/raw/render_box.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 'node.dart'; 5 import 'node.dart';
6 import 'dart:sky' as sky; 6 import 'dart:sky' as sky;
7 7
8 // ABSTRACT LAYOUT 8 // ABSTRACT LAYOUT
9 9
10 class ParentData { 10 class ParentData {
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 (left == other.left); 409 (left == other.left);
410 } 410 }
411 411
412 class BoxConstraints { 412 class BoxConstraints {
413 const BoxConstraints({ 413 const BoxConstraints({
414 this.minWidth: 0.0, 414 this.minWidth: 0.0,
415 this.maxWidth: double.INFINITY, 415 this.maxWidth: double.INFINITY,
416 this.minHeight: 0.0, 416 this.minHeight: 0.0,
417 this.maxHeight: double.INFINITY}); 417 this.maxHeight: double.INFINITY});
418 418
419 const BoxConstraints.tight({ double width: 0.0, double height: 0.0 }) 419 BoxConstraints.tight(sky.Size size)
420 : minWidth = width, 420 : minWidth = size.width,
421 maxWidth = width, 421 maxWidth = size.width,
422 minHeight = height, 422 minHeight = size.height,
423 maxHeight = height; 423 maxHeight = size.height;
424 424
425 BoxConstraints deflate(EdgeDims edges) { 425 BoxConstraints deflate(EdgeDims edges) {
426 assert(edges != null); 426 assert(edges != null);
427 return new BoxConstraints( 427 return new BoxConstraints(
428 minWidth: minWidth, 428 minWidth: minWidth,
429 maxWidth: maxWidth - (edges.left + edges.right), 429 maxWidth: maxWidth - (edges.left + edges.right),
430 minHeight: minHeight, 430 minHeight: minHeight,
431 maxHeight: maxHeight - (edges.top + edges.bottom) 431 maxHeight: maxHeight - (edges.top + edges.bottom)
432 ); 432 );
433 } 433 }
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 bool hitTest(HitTestResult result, { sky.Point position }) { 503 bool hitTest(HitTestResult result, { sky.Point position }) {
504 hitTestChildren(result, position: position); 504 hitTestChildren(result, position: position);
505 result.add(this); 505 result.add(this);
506 return true; 506 return true;
507 } 507 }
508 void hitTestChildren(HitTestResult result, { sky.Point position }) { } 508 void hitTestChildren(HitTestResult result, { sky.Point position }) { }
509 509
510 sky.Size size = new sky.Size(0.0, 0.0); 510 sky.Size size = new sky.Size(0.0, 0.0);
511 } 511 }
512 512
513 abstract class RenderProxyBox extends RenderBox with RenderNodeWithChildMixin<Re nderBox> {
514 RenderProxyBox(RenderBox child) {
515 this.child = child;
516 }
517
518 BoxDimensions getIntrinsicDimensions(BoxConstraints constraints) {
519 return child.getIntrinsicDimensions(constraints);
520 }
521
522 void performLayout() {
523 child.layout(constraints, parentUsesSize: true);
524 size = child.size;
525 }
526
527 void hitTestChildren(HitTestResult result, { sky.Point position }) {
528 child.hitTest(result, position: position);
529 }
530
531 void paint(RenderNodeDisplayList canvas) {
532 child.paint(canvas);
533 }
534 }
535
536 class RenderSizedBox extends RenderProxyBox {
537 final sky.Size desiredSize;
538
539 RenderSizedBox(RenderBox child, [this.desiredSize = const sky.Size.infinite()] )
540 : super(child);
541
542 BoxDimensions getIntrinsicDimensions(BoxConstraints constraints) {
543 return new BoxDimensions.withConstraints(constraints,
544 width: desiredSize.width,
545 height: desiredSize.height);
546 }
547
548 void performLayout() {
549 size = constraints.constrain(desiredSize);
550 child.layout(new BoxConstraints.tight(size));
551 }
552 }
553
513 class RenderPadding extends RenderBox with RenderNodeWithChildMixin<RenderBox> { 554 class RenderPadding extends RenderBox with RenderNodeWithChildMixin<RenderBox> {
514 555
515 RenderPadding(EdgeDims padding, RenderBox child) { 556 RenderPadding(EdgeDims padding, RenderBox child) {
516 assert(padding != null); 557 assert(padding != null);
517 this.padding = padding; 558 this.padding = padding;
518 this.child = child; 559 this.child = child;
519 } 560 }
520 561
521 EdgeDims _padding; 562 EdgeDims _padding;
522 EdgeDims get padding => _padding; 563 EdgeDims get padding => _padding;
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
584 625
585 BoxDecoration _decoration; 626 BoxDecoration _decoration;
586 BoxDecoration get decoration => _decoration; 627 BoxDecoration get decoration => _decoration;
587 void set decoration (BoxDecoration value) { 628 void set decoration (BoxDecoration value) {
588 if (value == _decoration) 629 if (value == _decoration)
589 return; 630 return;
590 _decoration = value; 631 _decoration = value;
591 markNeedsPaint(); 632 markNeedsPaint();
592 } 633 }
593 634
635 void performLayout() {
636 size = constraints.constrain(new sky.Size.infinite());
637 }
638
594 void paint(RenderNodeDisplayList canvas) { 639 void paint(RenderNodeDisplayList canvas) {
595 assert(size.width != null); 640 assert(size.width != null);
596 assert(size.height != null); 641 assert(size.height != null);
597 642
598 if (_decoration == null) 643 if (_decoration == null)
599 return; 644 return;
600 645
601 if (_decoration.backgroundColor != null) { 646 if (_decoration.backgroundColor != null) {
602 sky.Paint paint = new sky.Paint()..color = _decoration.backgroundColor; 647 sky.Paint paint = new sky.Paint()..color = _decoration.backgroundColor;
603 canvas.drawRect(new sky.Rect.fromLTRB(0.0, 0.0, size.width, size.height), paint); 648 canvas.drawRect(new sky.Rect.fromLTRB(0.0, 0.0, size.width, size.height), paint);
604 } 649 }
605 } 650 }
606
607 } 651 }
608 652
609 class RenderDecoratedCircle extends RenderDecoratedBox with RenderNodeWithChildM ixin<RenderBox> { 653 class RenderDecoratedCircle extends RenderDecoratedBox with RenderNodeWithChildM ixin<RenderBox> {
610 RenderDecoratedCircle({ 654 RenderDecoratedCircle({
611 BoxDecoration decoration, 655 BoxDecoration decoration,
612 RenderBox child 656 RenderBox child
613 }) : super(decoration) { 657 }) : super(decoration) {
614 this.child = child; 658 this.child = child;
615 } 659 }
616 660
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
667 if (_orientation != null && child != null) 711 if (_orientation != null && child != null)
668 child.rotate(oldAngle: _orientation, newAngle: constraints.orientation, time: timeForRotation); 712 child.rotate(oldAngle: _orientation, newAngle: constraints.orientation, time: timeForRotation);
669 _orientation = constraints.orientation; 713 _orientation = constraints.orientation;
670 } 714 }
671 _size = new sky.Size(constraints.width, constraints.height); 715 _size = new sky.Size(constraints.width, constraints.height);
672 assert(_size.height < double.INFINITY); 716 assert(_size.height < double.INFINITY);
673 assert(_size.width < double.INFINITY); 717 assert(_size.width < double.INFINITY);
674 } 718 }
675 void performLayout() { 719 void performLayout() {
676 if (child != null) { 720 if (child != null) {
677 child.layout(new BoxConstraints.tight(width: width, height: height)); 721 child.layout(new BoxConstraints.tight(_size));
678 assert(child.size.width == width); 722 assert(child.size.width == width);
679 assert(child.size.height == height); 723 assert(child.size.height == height);
680 } 724 }
681 } 725 }
682 726
683 void rotate({ int oldAngle, int newAngle, Duration time }) { 727 void rotate({ int oldAngle, int newAngle, Duration time }) {
684 assert(false); // nobody tells the screen to rotate, the whole rotate() danc e is started from our performResize() 728 assert(false); // nobody tells the screen to rotate, the whole rotate() danc e is started from our performResize()
685 } 729 }
686 730
687 bool hitTest(HitTestResult result, { sky.Point position }) { 731 bool hitTest(HitTestResult result, { sky.Point position }) {
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
946 990
947 void hitTestChildren(HitTestResult result, { double x, double y }) { 991 void hitTestChildren(HitTestResult result, { double x, double y }) {
948 // defaultHitTestChildren(result, x: x, y: y); 992 // defaultHitTestChildren(result, x: x, y: y);
949 } 993 }
950 994
951 void paint(RenderNodeDisplayList canvas) { 995 void paint(RenderNodeDisplayList canvas) {
952 super.paint(canvas); 996 super.paint(canvas);
953 _layoutRoot.paint(canvas); 997 _layoutRoot.paint(canvas);
954 } 998 }
955 } 999 }
OLDNEW
« no previous file with comments | « sky/sdk/lib/framework/components2/scaffold.dart ('k') | sky/tests/raw/render_box.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698