| Index: sky/sdk/lib/framework/layout2.dart
|
| diff --git a/sky/sdk/lib/framework/layout2.dart b/sky/sdk/lib/framework/layout2.dart
|
| index 75ff4e6878d10d540d89d2818ffe75f371bddfc8..0284dc845acb6614d0ece7aed9ff830258694cbe 100644
|
| --- a/sky/sdk/lib/framework/layout2.dart
|
| +++ b/sky/sdk/lib/framework/layout2.dart
|
| @@ -401,10 +401,24 @@ class BoxConstraints {
|
| this.minHeight: 0.0,
|
| this.maxHeight: double.INFINITY});
|
|
|
| + const BoxConstraints.tight({ width: width, height: height })
|
| + : minWidth = width,
|
| + maxWidth = width,
|
| + minHeight = height,
|
| + maxHeight = height;
|
| +
|
| final double minWidth;
|
| final double maxWidth;
|
| final double minHeight;
|
| final double maxHeight;
|
| +
|
| + double constrainWidth(double width) {
|
| + return clamp(min: minWidth, max: maxWidth, value: width);
|
| + }
|
| +
|
| + double constrainHeight(double height) {
|
| + return clamp(min: minHeight, max: maxHeight, value: height);
|
| + }
|
| }
|
|
|
| class BoxDimensions {
|
| @@ -412,8 +426,8 @@ class BoxDimensions {
|
|
|
| BoxDimensions.withConstraints(
|
| BoxConstraints constraints, {double width: 0.0, double height: 0.0}) {
|
| - this.width = clamp(min: minWidth, max: maxWidth, value: width);
|
| - this.height = clamp(min: minHeight, max: maxHeight, value: height);
|
| + this.width = constraints.constrainWidth(width);
|
| + this.height = constraints.constrainHeight(height);
|
| }
|
|
|
| final double width;
|
| @@ -442,29 +456,17 @@ abstract class RenderBox extends RenderNode {
|
| }
|
|
|
| void layout(BoxConstraints constraints, { RenderNode relayoutSubtreeRoot }) {
|
| - setWidth(constraints, 0.0);
|
| - setHeight(constraints, 0.0);
|
| + width = constraints.constrainWidth(0.0);
|
| + height = constraints.constrainHeight(0.0);
|
| layoutDone();
|
| }
|
|
|
| double width;
|
| double height;
|
| -
|
| - void setWidth(BoxConstraints constraints, double newWidth) {
|
| - width = clamp(min: constraints.minWidth,
|
| - max: constraints.maxWidth,
|
| - value: newWidth);
|
| - }
|
| -
|
| - void setHeight(BoxConstraints constraints, double newHeight) {
|
| - height = clamp(min: constraints.minHeight,
|
| - max: constraints.maxHeight,
|
| - value: newHeight);
|
| - }
|
| }
|
|
|
| class BoxDecoration {
|
| - BoxDecoration({
|
| + const BoxDecoration({
|
| this.backgroundColor
|
| });
|
|
|
| @@ -628,9 +630,8 @@ class RenderBlock extends RenderDecoratedBox with ContainerRenderNodeMixin<Rende
|
| // child positions if they're not needed to determine dimensions)
|
| BoxDimensions getIntrinsicDimensions(BoxConstraints constraints) {
|
| double outerHeight = _padding.top + _padding.bottom;
|
| - // TODO(abarth): Shouldn't this have a value: maxWidth?
|
| - double outerWidth = clamp(min: constraints.minWidth,
|
| - max: constraints.maxWidth);
|
| + double outerWidth = constraints.constrainWidth(constraints.maxWidth);
|
| + assert(outerWidth < double.INFINITY);
|
| double innerWidth = outerWidth - (_padding.left + _padding.right);
|
| RenderBox child = _firstChild;
|
| BoxConstraints constraints = new BoxConstraints(minWidth: innerWidth,
|
| @@ -641,12 +642,8 @@ class RenderBlock extends RenderDecoratedBox with ContainerRenderNodeMixin<Rende
|
| child = child.parentData.nextSibling;
|
| }
|
|
|
| - return new BoxDimensions(
|
| - width: outerWidth,
|
| - height: clamp(min: constraints.minHeight,
|
| - max: constraints.maxHeight,
|
| - value: outerHeight)
|
| - );
|
| + return new BoxDimensions(width: outerWidth,
|
| + height: constraints.constrainHeight(outerHeight));
|
| }
|
|
|
| double _minHeight; // value cached from parent for relayout call
|
| @@ -655,8 +652,8 @@ class RenderBlock extends RenderDecoratedBox with ContainerRenderNodeMixin<Rende
|
| if (relayoutSubtreeRoot != null)
|
| saveRelayoutSubtreeRoot(relayoutSubtreeRoot);
|
| relayoutSubtreeRoot = relayoutSubtreeRoot == null ? this : relayoutSubtreeRoot;
|
| - // TODO(abarth): Shouldn't this be setWidth(constaints, constraints.maxWidth)?
|
| - width = clamp(min: constraints.minWidth, max: constraints.maxWidth);
|
| + width = constraints.constrainWidth(constraints.maxWidth);
|
| + assert(width < double.INFINITY);
|
| _minHeight = constraints.minHeight;
|
| _maxHeight = constraints.maxHeight;
|
| internalLayout(relayoutSubtreeRoot);
|
| @@ -676,7 +673,7 @@ class RenderBlock extends RenderDecoratedBox with ContainerRenderNodeMixin<Rende
|
| child.layout(new BoxConstraints(minWidth: innerWidth, maxWidth: innerWidth),
|
| relayoutSubtreeRoot: relayoutSubtreeRoot);
|
| assert(child.parentData is BlockParentData);
|
| - child.parentData.x = 0.0; // TODO(abarth): Shouldn't this be _padding.left?
|
| + child.parentData.x = _padding.left;
|
| child.parentData.y = y;
|
| y += child.height;
|
| child = child.parentData.nextSibling;
|
| @@ -743,8 +740,8 @@ class ScaffoldBox extends RenderBox {
|
| final RenderBox drawer;
|
|
|
| void layout(BoxConstraints constraints, { RenderNode relayoutSubtreeRoot }) {
|
| - setHeight(constraints, 0.0);
|
| - setWidth(constraints, 0.0);
|
| + width = constraints.constrainWidth(0.0);
|
| + height = constraints.constrainHeight(0.0);
|
| relayout();
|
| }
|
|
|
| @@ -754,20 +751,20 @@ class ScaffoldBox extends RenderBox {
|
| void relayout() {
|
| double bodyHeight = height;
|
| if (toolbar != null) {
|
| - toolbar.layout(new BoxConstraints(minWidth: width, maxWidth: width, minHeight: kToolbarHeight, maxHeight: kToolbarHeight));
|
| + toolbar.layout(new BoxConstraints.tight(width: width, height: kToolbarHeight));
|
| assert(toolbar.parentData is BoxParentData);
|
| toolbar.parentData.x = 0.0;
|
| toolbar.parentData.y = 0.0;
|
| bodyHeight -= kToolbarHeight;
|
| }
|
| if (statusbar != null) {
|
| - statusbar.layout(new BoxConstraints(minWidth: width, maxWidth: width, minHeight: kStatusbarHeight, maxHeight: kStatusbarHeight));
|
| + statusbar.layout(new BoxConstraints.tight(width: width, height: kStatusbarHeight));
|
| assert(statusbar.parentData is BoxParentData);
|
| statusbar.parentData.x = 0.0;
|
| statusbar.parentData.y = height - kStatusbarHeight;
|
| bodyHeight -= kStatusbarHeight;
|
| }
|
| - body.layout(new BoxConstraints(minWidth: width, maxWidth: width, minHeight: bodyHeight, maxHeight: bodyHeight));
|
| + body.layout(new BoxConstraints.tight(width: width, height: bodyHeight));
|
| if (drawer != null)
|
| drawer.layout(new BoxConstraints(minWidth: 0.0, maxWidth: width, minHeight: height, maxHeight: height));
|
| layoutDone();
|
|
|