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

Side by Side Diff: sky/sdk/lib/framework/rendering/box.dart

Issue 1179713004: Material and RaisedButton. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: 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
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:math' as math; 5 import 'dart:math' as math;
6 import 'dart:sky' as sky; 6 import 'dart:sky' as sky;
7 import 'object.dart'; 7 import 'object.dart';
8 import '../painting/box_painter.dart'; 8 import '../painting/box_painter.dart';
9 import 'package:vector_math/vector_math.dart'; 9 import 'package:vector_math/vector_math.dart';
10 import 'package:sky/framework/net/image_cache.dart' as image_cache; 10 import 'package:sky/framework/net/image_cache.dart' as image_cache;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 return value; 46 return value;
47 } 47 }
48 String toString() => "EdgeDims($top, $right, $bottom, $left)"; 48 String toString() => "EdgeDims($top, $right, $bottom, $left)";
49 } 49 }
50 50
51 class BoxConstraints { 51 class BoxConstraints {
52 const BoxConstraints({ 52 const BoxConstraints({
53 this.minWidth: 0.0, 53 this.minWidth: 0.0,
54 this.maxWidth: double.INFINITY, 54 this.maxWidth: double.INFINITY,
55 this.minHeight: 0.0, 55 this.minHeight: 0.0,
56 this.maxHeight: double.INFINITY}); 56 this.maxHeight: double.INFINITY
57 });
57 58
58 BoxConstraints.tight(Size size) 59 BoxConstraints.tight(Size size)
59 : minWidth = size.width, 60 : minWidth = size.width,
60 maxWidth = size.width, 61 maxWidth = size.width,
61 minHeight = size.height, 62 minHeight = size.height,
62 maxHeight = size.height; 63 maxHeight = size.height;
63 64
64 BoxConstraints.loose(Size size) 65 BoxConstraints.loose(Size size)
65 : minWidth = 0.0, 66 : minWidth = 0.0,
66 maxWidth = size.width, 67 maxWidth = size.width,
67 minHeight = 0.0, 68 minHeight = 0.0,
68 maxHeight = size.height; 69 maxHeight = size.height;
69 70
70 BoxConstraints deflate(EdgeDims edges) { 71 BoxConstraints deflate(EdgeDims edges) {
71 assert(edges != null); 72 assert(edges != null);
72 double horizontal = edges.left + edges.right; 73 double horizontal = edges.left + edges.right;
73 double vertical = edges.top + edges.bottom; 74 double vertical = edges.top + edges.bottom;
74 return new BoxConstraints( 75 return new BoxConstraints(
75 minWidth: math.max(0.0, minWidth - horizontal), 76 minWidth: math.max(0.0, minWidth - horizontal),
76 maxWidth: maxWidth - horizontal, 77 maxWidth: maxWidth - horizontal,
77 minHeight: math.max(0.0, minHeight - vertical), 78 minHeight: math.max(0.0, minHeight - vertical),
78 maxHeight: maxHeight - vertical 79 maxHeight: maxHeight - vertical
79 ); 80 );
80 } 81 }
81 82
83 BoxConstraints loosen() {
84 return new BoxConstraints(
85 minWidth: 0.0,
86 maxWidth: maxWidth,
87 minHeight: 0.0,
88 maxHeight: maxHeight
89 );
90 }
91
82 BoxConstraints apply(BoxConstraints constraints) { 92 BoxConstraints apply(BoxConstraints constraints) {
83 return new BoxConstraints( 93 return new BoxConstraints(
84 minWidth: math.max(minWidth, constraints.minWidth), 94 minWidth: math.max(minWidth, constraints.minWidth),
85 maxWidth: math.min(maxWidth, constraints.maxWidth), 95 maxWidth: math.min(maxWidth, constraints.maxWidth),
86 minHeight: math.max(minHeight, constraints.minHeight), 96 minHeight: math.max(minHeight, constraints.minHeight),
87 maxHeight: math.min(maxHeight, constraints.maxHeight)); 97 maxHeight: math.min(maxHeight, constraints.maxHeight));
88 } 98 }
89 99
90 BoxConstraints applyWidth(double width) { 100 BoxConstraints applyWidth(double width) {
91 return new BoxConstraints(minWidth: math.max(minWidth, width), 101 return new BoxConstraints(minWidth: math.max(minWidth, width),
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 void set size(Size value) { 246 void set size(Size value) {
237 assert(RenderObject.debugDoingLayout); 247 assert(RenderObject.debugDoingLayout);
238 _size = value; 248 _size = value;
239 } 249 }
240 250
241 String debugDescribeSettings(String prefix) => '${super.debugDescribeSettings( prefix)}${prefix}size: ${size}\n'; 251 String debugDescribeSettings(String prefix) => '${super.debugDescribeSettings( prefix)}${prefix}size: ${size}\n';
242 } 252 }
243 253
244 class RenderProxyBox extends RenderBox with RenderObjectWithChildMixin<RenderBox > { 254 class RenderProxyBox extends RenderBox with RenderObjectWithChildMixin<RenderBox > {
245 255
256 // ProxyBox assumes the child will be at 0,0 and will have the same size
257
246 RenderProxyBox([RenderBox child = null]) { 258 RenderProxyBox([RenderBox child = null]) {
247 this.child = child; 259 this.child = child;
248 } 260 }
249 261
250 double getMinIntrinsicWidth(BoxConstraints constraints) { 262 double getMinIntrinsicWidth(BoxConstraints constraints) {
251 if (child != null) 263 if (child != null)
252 return child.getMinIntrinsicWidth(constraints); 264 return child.getMinIntrinsicWidth(constraints);
253 return super.getMinIntrinsicWidth(constraints); 265 return super.getMinIntrinsicWidth(constraints);
254 } 266 }
255 267
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 canvas.saveLayer(rect, new Paint()); 508 canvas.saveLayer(rect, new Paint());
497 Path path = new Path(); 509 Path path = new Path();
498 path.addOval(rect); 510 path.addOval(rect);
499 canvas.clipPath(path); 511 canvas.clipPath(path);
500 child.paint(canvas); 512 child.paint(canvas);
501 canvas.restore(); 513 canvas.restore();
502 } 514 }
503 } 515 }
504 } 516 }
505 517
506 class RenderPadding extends RenderBox with RenderObjectWithChildMixin<RenderBox> { 518 abstract class RenderShiftedBox extends RenderBox with RenderObjectWithChildMixi n<RenderBox> {
507 519
508 RenderPadding({ EdgeDims padding, RenderBox child }) { 520 // Abstract class for one-child-layout render boxes
509 assert(padding != null); 521
510 this.padding = padding; 522 RenderShiftedBox(RenderBox child) {
511 this.child = child; 523 this.child = child;
512 } 524 }
513 525
526 void paint(RenderObjectDisplayList canvas) {
527 if (child != null)
528 canvas.paintChild(child, child.parentData.position);
529 }
530
531 void hitTestChildren(HitTestResult result, { Point position }) {
532 if (child != null) {
533 assert(child.parentData is BoxParentData);
534 Rect childBounds = new Rect.fromPointAndSize(child.parentData.position, ch ild.size);
535 if (childBounds.contains(position)) {
536 child.hitTest(result, position: new Point(position.x - child.parentData. position.x,
537 position.y - child.parentD ata.position.y));
538 }
539 }
540 }
541
542 }
543
544 class RenderPadding extends RenderShiftedBox {
545
546 RenderPadding({ EdgeDims padding, RenderBox child }) : super(child) {
547 assert(padding != null);
548 this.padding = padding;
549 }
550
514 EdgeDims _padding; 551 EdgeDims _padding;
515 EdgeDims get padding => _padding; 552 EdgeDims get padding => _padding;
516 void set padding (EdgeDims value) { 553 void set padding (EdgeDims value) {
517 assert(value != null); 554 assert(value != null);
518 if (_padding == value) 555 if (_padding == value)
519 return; 556 return;
520 _padding = value; 557 _padding = value;
521 markNeedsLayout(); 558 markNeedsLayout();
522 } 559 }
523 560
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
557 new Size(padding.left + padding.right, padding.top + padding.bottom)); 594 new Size(padding.left + padding.right, padding.top + padding.bottom));
558 return; 595 return;
559 } 596 }
560 child.layout(innerConstraints, parentUsesSize: true); 597 child.layout(innerConstraints, parentUsesSize: true);
561 assert(child.parentData is BoxParentData); 598 assert(child.parentData is BoxParentData);
562 child.parentData.position = new Point(padding.left, padding.top); 599 child.parentData.position = new Point(padding.left, padding.top);
563 size = constraints.constrain(new Size(padding.left + child.size.width + padd ing.right, 600 size = constraints.constrain(new Size(padding.left + child.size.width + padd ing.right,
564 padding.top + child.size.height + padding.bottom)); 601 padding.top + child.size.height + padding.bottom));
565 } 602 }
566 603
567 void paint(RenderObjectDisplayList canvas) {
568 if (child != null)
569 canvas.paintChild(child, child.parentData.position);
570 }
571
572 void hitTestChildren(HitTestResult result, { Point position }) {
573 if (child != null) {
574 assert(child.parentData is BoxParentData);
575 Rect childBounds = new Rect.fromPointAndSize(child.parentData.position, ch ild.size);
576 if (childBounds.contains(position)) {
577 child.hitTest(result, position: new Point(position.x - child.parentData. position.x,
578 position.y - child.parentD ata.position.y));
579 }
580 }
581 }
582
583 String debugDescribeSettings(String prefix) => '${super.debugDescribeSettings( prefix)}${prefix}padding: ${padding}\n'; 604 String debugDescribeSettings(String prefix) => '${super.debugDescribeSettings( prefix)}${prefix}padding: ${padding}\n';
584 } 605 }
585 606
607 class RenderPositionedBox extends RenderShiftedBox {
608
609 RenderPositionedBox({
610 RenderBox child,
611 double horizontal: 0.5,
612 double vertical: 0.5
613 }) : _horizontal = horizontal,
614 _vertical = vertical,
615 super(child) {
616 assert(horizontal != null);
617 assert(vertical != null);
618 }
619
620 double _horizontal;
621 double get horizontal => _horizontal;
622 void set horizontal (double value) {
623 assert(value != null);
624 if (_horizontal == value)
625 return;
626 _horizontal = value;
627 markNeedsLayout();
628 }
629
630 double _vertical;
631 double get vertical => _vertical;
632 void set vertical (double value) {
633 assert(value != null);
634 if (_vertical == value)
635 return;
636 _vertical = value;
637 markNeedsLayout();
638 }
639
640 double getMinIntrinsicWidth(BoxConstraints constraints) {
641 if (child != null)
642 return child.getMinIntrinsicWidth(constraints);
643 return super.getMinIntrinsicWidth(constraints);
644 }
645
646 double getMaxIntrinsicWidth(BoxConstraints constraints) {
647 if (child != null)
648 return child.getMaxIntrinsicWidth(constraints);
649 return super.getMaxIntrinsicWidth(constraints);
650 }
651
652 double getMinIntrinsicHeight(BoxConstraints constraints) {
653 if (child != null)
654 return child.getMinIntrinsicHeight(constraints);
655 return super.getMinIntrinsicHeight(constraints);
656 }
657
658 double getMaxIntrinsicHeight(BoxConstraints constraints) {
659 if (child != null)
660 return child.getMaxIntrinsicHeight(constraints);
661 return super.getMaxIntrinsicHeight(constraints);
662 }
663
664 void performLayout() {
665 if (child != null) {
666 child.layout(constraints.loosen());
667 size = constraints.constrain(child.size);
668 assert(child.parentData is BoxParentData);
669 Size delta = size - child.size;
670 child.parentData.position = new Point(delta.width * horizontal, delta.heig ht * vertical);
671 } else {
672 performResize();
673 }
674 }
675
676 String debugDescribeSettings(String prefix) => '${super.debugDescribeSettings( prefix)}${prefix}horizontal: ${horizontal}\n${prefix}vertical: ${vertical}\n';
677 }
678
586 class RenderImage extends RenderBox { 679 class RenderImage extends RenderBox {
587 680
588 RenderImage(String url, Size dimensions) { 681 RenderImage(String url, Size dimensions) {
589 requestedSize = dimensions; 682 requestedSize = dimensions;
590 src = url; 683 src = url;
591 } 684 }
592 685
593 sky.Image _image; 686 sky.Image _image;
594 String _src; 687 String _src;
595 String get src => _src; 688 String get src => _src;
596 void set src (String value) { 689 void set src (String value) {
597 if (value == _src) 690 if (value == _src)
598 return; 691 return;
599 _src = value; 692 _src = value;
600 image_cache.load(_src, (result) { 693 image_cache.load(_src, (result) {
601 _image = result; 694 _image = result;
602 if (requestedSize.width == null || requestedSize.height == null) 695 if (requestedSize.width == null || requestedSize.height == null)
603 markNeedsLayout(); 696 markNeedsLayout();
604 markNeedsPaint(); 697 markNeedsPaint();
605 }); 698 });
606 } 699 }
607 700
608 Size _requestedSize; 701 Size _requestedSize;
609 Size get requestedSize => _requestedSize; 702 Size get requestedSize => _requestedSize;
610 void set requestedSize (Size value) { 703 void set requestedSize (Size value) {
704 if (value == null)
705 value = const Size(null, null);
611 if (value == _requestedSize) 706 if (value == _requestedSize)
612 return; 707 return;
613 _requestedSize = value; 708 _requestedSize = value;
614 markNeedsLayout(); 709 markNeedsLayout();
615 } 710 }
616 711
617 Size _sizeForConstraints(BoxConstraints innerConstraints) { 712 Size _sizeForConstraints(BoxConstraints innerConstraints) {
618 // If there's no image, we can't size ourselves automatically 713 // If there's no image, we can't size ourselves automatically
619 if (_image == null) { 714 if (_image == null) {
620 double width = requestedSize.width == null ? 0.0 : requestedSize.width; 715 double width = requestedSize.width == null ? 0.0 : requestedSize.width;
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
944 1039
945 void defaultPaint(RenderObjectDisplayList canvas) { 1040 void defaultPaint(RenderObjectDisplayList canvas) {
946 RenderBox child = firstChild; 1041 RenderBox child = firstChild;
947 while (child != null) { 1042 while (child != null) {
948 assert(child.parentData is ParentDataType); 1043 assert(child.parentData is ParentDataType);
949 canvas.paintChild(child, child.parentData.position); 1044 canvas.paintChild(child, child.parentData.position);
950 child = child.parentData.nextSibling; 1045 child = child.parentData.nextSibling;
951 } 1046 }
952 } 1047 }
953 } 1048 }
OLDNEW
« no previous file with comments | « sky/sdk/lib/framework/painting/box_painter.dart ('k') | sky/sdk/lib/framework/theme2/colors.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698