Commit 11da9b02 authored by Adam Barth's avatar Adam Barth

Merge pull request #830 from Hixie/BoxConstraints

Catch un-normalized BoxConstraints
parents 23ab08ad 1a049c14
...@@ -37,6 +37,8 @@ class SectorConstraints extends Constraints { ...@@ -37,6 +37,8 @@ class SectorConstraints extends Constraints {
} }
bool get isTight => minDeltaTheta >= maxDeltaTheta && minDeltaTheta >= maxDeltaTheta; bool get isTight => minDeltaTheta >= maxDeltaTheta && minDeltaTheta >= maxDeltaTheta;
bool get isNormalized => minDeltaRadius <= maxDeltaRadius && minDeltaTheta <= maxDeltaTheta;
} }
class SectorDimensions { class SectorDimensions {
......
...@@ -167,6 +167,7 @@ class RenderBlock extends RenderBlockBase { ...@@ -167,6 +167,7 @@ class RenderBlock extends RenderBlockBase {
} }
double getMinIntrinsicWidth(BoxConstraints constraints) { double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (isVertical) { if (isVertical) {
return _getIntrinsicCrossAxis( return _getIntrinsicCrossAxis(
constraints, constraints,
...@@ -177,6 +178,7 @@ class RenderBlock extends RenderBlockBase { ...@@ -177,6 +178,7 @@ class RenderBlock extends RenderBlockBase {
} }
double getMaxIntrinsicWidth(BoxConstraints constraints) { double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (isVertical) { if (isVertical) {
return _getIntrinsicCrossAxis( return _getIntrinsicCrossAxis(
constraints, constraints,
...@@ -187,6 +189,7 @@ class RenderBlock extends RenderBlockBase { ...@@ -187,6 +189,7 @@ class RenderBlock extends RenderBlockBase {
} }
double getMinIntrinsicHeight(BoxConstraints constraints) { double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (isVertical) if (isVertical)
return _getIntrinsicMainAxis(constraints); return _getIntrinsicMainAxis(constraints);
return _getIntrinsicCrossAxis( return _getIntrinsicCrossAxis(
...@@ -196,6 +199,7 @@ class RenderBlock extends RenderBlockBase { ...@@ -196,6 +199,7 @@ class RenderBlock extends RenderBlockBase {
} }
double getMaxIntrinsicHeight(BoxConstraints constraints) { double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (isVertical) if (isVertical)
return _getIntrinsicMainAxis(constraints); return _getIntrinsicMainAxis(constraints);
return _getIntrinsicCrossAxis( return _getIntrinsicCrossAxis(
...@@ -361,24 +365,28 @@ class RenderBlockViewport extends RenderBlockBase { ...@@ -361,24 +365,28 @@ class RenderBlockViewport extends RenderBlockBase {
} }
double getMinIntrinsicWidth(BoxConstraints constraints) { double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (isVertical) if (isVertical)
return _getIntrinsicDimension(constraints, minCrossAxisExtentCallback, constraints.constrainWidth); return _getIntrinsicDimension(constraints, minCrossAxisExtentCallback, constraints.constrainWidth);
return constraints.constrainWidth(minExtent); return constraints.constrainWidth(minExtent);
} }
double getMaxIntrinsicWidth(BoxConstraints constraints) { double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (isVertical) if (isVertical)
return _getIntrinsicDimension(constraints, maxCrossAxisExtentCallback, constraints.constrainWidth); return _getIntrinsicDimension(constraints, maxCrossAxisExtentCallback, constraints.constrainWidth);
return _getIntrinsicDimension(constraints, totalExtentCallback, new BoxConstraints(minWidth: minExtent).enforce(constraints).constrainWidth); return _getIntrinsicDimension(constraints, totalExtentCallback, new BoxConstraints(minWidth: minExtent).enforce(constraints).constrainWidth);
} }
double getMinIntrinsicHeight(BoxConstraints constraints) { double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (!isVertical) if (!isVertical)
return _getIntrinsicDimension(constraints, minCrossAxisExtentCallback, constraints.constrainHeight); return _getIntrinsicDimension(constraints, minCrossAxisExtentCallback, constraints.constrainHeight);
return constraints.constrainHeight(0.0); return constraints.constrainHeight(0.0);
} }
double getMaxIntrinsicHeight(BoxConstraints constraints) { double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (!isVertical) if (!isVertical)
return _getIntrinsicDimension(constraints, maxCrossAxisExtentCallback, constraints.constrainHeight); return _getIntrinsicDimension(constraints, maxCrossAxisExtentCallback, constraints.constrainHeight);
return _getIntrinsicDimension(constraints, totalExtentCallback, new BoxConstraints(minHeight: minExtent).enforce(constraints).constrainHeight); return _getIntrinsicDimension(constraints, totalExtentCallback, new BoxConstraints(minHeight: minExtent).enforce(constraints).constrainHeight);
......
...@@ -88,6 +88,7 @@ class BoxConstraints extends Constraints { ...@@ -88,6 +88,7 @@ class BoxConstraints extends Constraints {
/// Returns new box constraints that are smaller by the given edge dimensions /// Returns new box constraints that are smaller by the given edge dimensions
BoxConstraints deflate(EdgeDims edges) { BoxConstraints deflate(EdgeDims edges) {
assert(edges != null); assert(edges != null);
assert(isNormalized);
double horizontal = edges.left + edges.right; double horizontal = edges.left + edges.right;
double vertical = edges.top + edges.bottom; double vertical = edges.top + edges.bottom;
double deflatedMinWidth = math.max(0.0, minWidth - horizontal); double deflatedMinWidth = math.max(0.0, minWidth - horizontal);
...@@ -102,6 +103,7 @@ class BoxConstraints extends Constraints { ...@@ -102,6 +103,7 @@ class BoxConstraints extends Constraints {
/// Returns new box constraints that remove the minimum width and height requirements /// Returns new box constraints that remove the minimum width and height requirements
BoxConstraints loosen() { BoxConstraints loosen() {
assert(isNormalized);
return new BoxConstraints( return new BoxConstraints(
minWidth: 0.0, minWidth: 0.0,
maxWidth: maxWidth, maxWidth: maxWidth,
...@@ -144,19 +146,24 @@ class BoxConstraints extends Constraints { ...@@ -144,19 +146,24 @@ class BoxConstraints extends Constraints {
/// Returns the width that both satisfies the constraints and is as close as possible to the given width /// Returns the width that both satisfies the constraints and is as close as possible to the given width
double constrainWidth([double width = double.INFINITY]) { double constrainWidth([double width = double.INFINITY]) {
assert(isNormalized);
return clamp(min: minWidth, max: maxWidth, value: width); return clamp(min: minWidth, max: maxWidth, value: width);
} }
/// Returns the height that both satisfies the constraints and is as close as possible to the given height /// Returns the height that both satisfies the constraints and is as close as possible to the given height
double constrainHeight([double height = double.INFINITY]) { double constrainHeight([double height = double.INFINITY]) {
assert(isNormalized);
return clamp(min: minHeight, max: maxHeight, value: height); return clamp(min: minHeight, max: maxHeight, value: height);
} }
/// Returns the size that both satisfies the constraints and is as close as possible to the given size /// Returns the size that both satisfies the constraints and is as close as possible to the given size
Size constrain(Size size) { Size constrain(Size size) {
Size result = new Size(constrainWidth(size.width), constrainHeight(size.height)); Size result = new Size(constrainWidth(size.width), constrainHeight(size.height));
if (size is _DebugSize) assert(() {
result = new _DebugSize(result, size._owner, size._canBeUsedByParent); if (size is _DebugSize)
result = new _DebugSize(result, size._owner, size._canBeUsedByParent);
return true;
});
return result; return result;
} }
...@@ -177,8 +184,9 @@ class BoxConstraints extends Constraints { ...@@ -177,8 +184,9 @@ class BoxConstraints extends Constraints {
/// Whether the given size satisfies the constraints /// Whether the given size satisfies the constraints
bool isSatisfiedBy(Size size) { bool isSatisfiedBy(Size size) {
return (minWidth <= size.width) && (size.width <= math.max(minWidth, maxWidth)) && assert(isNormalized);
(minHeight <= size.height) && (size.height <= math.max(minHeight, maxHeight)); return (minWidth <= size.width) && (size.width <= maxWidth) &&
(minHeight <= size.height) && (size.height <= maxHeight);
} }
BoxConstraints operator*(double other) { BoxConstraints operator*(double other) {
...@@ -227,6 +235,8 @@ class BoxConstraints extends Constraints { ...@@ -227,6 +235,8 @@ class BoxConstraints extends Constraints {
return b * t; return b * t;
if (b == null) if (b == null)
return a * (1.0 - t); return a * (1.0 - t);
assert(a.isNormalized);
assert(b.isNormalized);
return new BoxConstraints( return new BoxConstraints(
minWidth: ui.lerpDouble(a.minWidth, b.minWidth, t), minWidth: ui.lerpDouble(a.minWidth, b.minWidth, t),
maxWidth: ui.lerpDouble(a.maxWidth, b.maxWidth, t), maxWidth: ui.lerpDouble(a.maxWidth, b.maxWidth, t),
...@@ -235,12 +245,25 @@ class BoxConstraints extends Constraints { ...@@ -235,12 +245,25 @@ class BoxConstraints extends Constraints {
); );
} }
bool get isNormalized => minWidth <= maxWidth && minHeight <= maxHeight;
BoxConstraints normalize() {
return new BoxConstraints(
minWidth: minWidth,
maxWidth: minWidth > maxWidth ? minWidth : maxWidth,
minHeight: minHeight,
maxHeight: minHeight > maxHeight ? minHeight : maxHeight
);
}
bool operator ==(dynamic other) { bool operator ==(dynamic other) {
assert(isNormalized);
if (identical(this, other)) if (identical(this, other))
return true; return true;
if (other is! BoxConstraints) if (other is! BoxConstraints)
return false; return false;
final BoxConstraints typedOther = other; final BoxConstraints typedOther = other;
assert(typedOther.isNormalized);
return minWidth == typedOther.minWidth && return minWidth == typedOther.minWidth &&
maxWidth == typedOther.maxWidth && maxWidth == typedOther.maxWidth &&
minHeight == typedOther.minHeight && minHeight == typedOther.minHeight &&
...@@ -248,6 +271,7 @@ class BoxConstraints extends Constraints { ...@@ -248,6 +271,7 @@ class BoxConstraints extends Constraints {
} }
int get hashCode { int get hashCode {
assert(isNormalized);
int value = 373; int value = 373;
value = 37 * value + minWidth.hashCode; value = 37 * value + minWidth.hashCode;
value = 37 * value + maxWidth.hashCode; value = 37 * value + maxWidth.hashCode;
...@@ -257,11 +281,12 @@ class BoxConstraints extends Constraints { ...@@ -257,11 +281,12 @@ class BoxConstraints extends Constraints {
} }
String toString() { String toString() {
String annotation = isNormalized ? '' : '; NOT NORMALIZED';
if (minWidth == double.INFINITY && minHeight == double.INFINITY) if (minWidth == double.INFINITY && minHeight == double.INFINITY)
return 'BoxConstraints(biggest)'; return 'BoxConstraints(biggest$annotation)';
if (minWidth == 0 && maxWidth == double.INFINITY && if (minWidth == 0 && maxWidth == double.INFINITY &&
minHeight == 0 && maxHeight == double.INFINITY) minHeight == 0 && maxHeight == double.INFINITY)
return 'BoxConstraints(unconstrained)'; return 'BoxConstraints(unconstrained$annotation)';
String describe(double min, double max, String dim) { String describe(double min, double max, String dim) {
if (min == max) if (min == max)
return '$dim=${min.toStringAsFixed(1)}'; return '$dim=${min.toStringAsFixed(1)}';
...@@ -269,7 +294,7 @@ class BoxConstraints extends Constraints { ...@@ -269,7 +294,7 @@ class BoxConstraints extends Constraints {
} }
final String width = describe(minWidth, maxWidth, 'w'); final String width = describe(minWidth, maxWidth, 'w');
final String height = describe(minHeight, maxHeight, 'h'); final String height = describe(minHeight, maxHeight, 'h');
return 'BoxConstraints($width, $height)'; return 'BoxConstraints($width, $height$annotation)';
} }
} }
...@@ -334,6 +359,7 @@ abstract class RenderBox extends RenderObject { ...@@ -334,6 +359,7 @@ abstract class RenderBox extends RenderObject {
/// ///
/// Override in subclasses that implement [performLayout]. /// Override in subclasses that implement [performLayout].
double getMinIntrinsicWidth(BoxConstraints constraints) { double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
return constraints.constrainWidth(0.0); return constraints.constrainWidth(0.0);
} }
...@@ -342,6 +368,7 @@ abstract class RenderBox extends RenderObject { ...@@ -342,6 +368,7 @@ abstract class RenderBox extends RenderObject {
/// ///
/// Override in subclasses that implement [performLayout]. /// Override in subclasses that implement [performLayout].
double getMaxIntrinsicWidth(BoxConstraints constraints) { double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
return constraints.constrainWidth(0.0); return constraints.constrainWidth(0.0);
} }
...@@ -350,6 +377,7 @@ abstract class RenderBox extends RenderObject { ...@@ -350,6 +377,7 @@ abstract class RenderBox extends RenderObject {
/// ///
/// Override in subclasses that implement [performLayout]. /// Override in subclasses that implement [performLayout].
double getMinIntrinsicHeight(BoxConstraints constraints) { double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
return constraints.constrainHeight(0.0); return constraints.constrainHeight(0.0);
} }
...@@ -362,6 +390,7 @@ abstract class RenderBox extends RenderObject { ...@@ -362,6 +390,7 @@ abstract class RenderBox extends RenderObject {
/// ///
/// Override in subclasses that implement [performLayout]. /// Override in subclasses that implement [performLayout].
double getMaxIntrinsicHeight(BoxConstraints constraints) { double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
return constraints.constrainHeight(0.0); return constraints.constrainHeight(0.0);
} }
......
...@@ -41,6 +41,7 @@ abstract class MultiChildLayoutDelegate { ...@@ -41,6 +41,7 @@ abstract class MultiChildLayoutDelegate {
'A MultiChildLayoutDelegate cannot layout the same child more than once.'; 'A MultiChildLayoutDelegate cannot layout the same child more than once.';
return _debugChildrenNeedingLayout.remove(child); return _debugChildrenNeedingLayout.remove(child);
}); });
assert(constraints.isNormalized);
child.layout(constraints, parentUsesSize: true); child.layout(constraints, parentUsesSize: true);
return child.size; return child.size;
} }
...@@ -130,6 +131,7 @@ class RenderCustomMultiChildLayoutBox extends RenderBox ...@@ -130,6 +131,7 @@ class RenderCustomMultiChildLayoutBox extends RenderBox
} }
Size _getSize(BoxConstraints constraints) { Size _getSize(BoxConstraints constraints) {
assert(constraints.isNormalized);
return constraints.constrain(_delegate.getSize(constraints)); return constraints.constrain(_delegate.getSize(constraints));
} }
......
...@@ -60,6 +60,7 @@ class RenderEditableParagraph extends RenderParagraph { ...@@ -60,6 +60,7 @@ class RenderEditableParagraph extends RenderParagraph {
} }
BoxConstraints _getTextContraints(BoxConstraints constraints) { BoxConstraints _getTextContraints(BoxConstraints constraints) {
assert(constraints.isNormalized);
return new BoxConstraints( return new BoxConstraints(
minWidth: 0.0, minWidth: 0.0,
maxWidth: double.INFINITY, maxWidth: double.INFINITY,
......
...@@ -148,6 +148,7 @@ class RenderFlex extends RenderBox with ContainerRenderObjectMixin<RenderBox, Fl ...@@ -148,6 +148,7 @@ class RenderFlex extends RenderBox with ContainerRenderObjectMixin<RenderBox, Fl
double _getIntrinsicSize({ BoxConstraints constraints, double _getIntrinsicSize({ BoxConstraints constraints,
FlexDirection sizingDirection, FlexDirection sizingDirection,
_ChildSizingFunction childSize }) { _ChildSizingFunction childSize }) {
assert(constraints.isNormalized);
// http://www.w3.org/TR/2015/WD-css-flexbox-1-20150514/#intrinsic-sizes // http://www.w3.org/TR/2015/WD-css-flexbox-1-20150514/#intrinsic-sizes
if (_direction == sizingDirection) { if (_direction == sizingDirection) {
// INTRINSIC MAIN SIZE // INTRINSIC MAIN SIZE
......
...@@ -74,21 +74,25 @@ class RenderGrid extends RenderBox with ContainerRenderObjectMixin<RenderBox, Gr ...@@ -74,21 +74,25 @@ class RenderGrid extends RenderBox with ContainerRenderObjectMixin<RenderBox, Gr
} }
double getMinIntrinsicWidth(BoxConstraints constraints) { double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
// We can render at any width. // We can render at any width.
return constraints.constrainWidth(0.0); return constraints.constrainWidth(0.0);
} }
double getMaxIntrinsicWidth(BoxConstraints constraints) { double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
double maxWidth = childCount * _maxChildExtent; double maxWidth = childCount * _maxChildExtent;
return constraints.constrainWidth(maxWidth); return constraints.constrainWidth(maxWidth);
} }
double getMinIntrinsicHeight(BoxConstraints constraints) { double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
double desiredHeight = _computeMetrics().size.height; double desiredHeight = _computeMetrics().size.height;
return constraints.constrainHeight(desiredHeight); return constraints.constrainHeight(desiredHeight);
} }
double getMaxIntrinsicHeight(BoxConstraints constraints) { double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
return getMinIntrinsicHeight(constraints); return getMinIntrinsicHeight(constraints);
} }
......
...@@ -172,22 +172,26 @@ class RenderImage extends RenderBox { ...@@ -172,22 +172,26 @@ class RenderImage extends RenderBox {
} }
double getMinIntrinsicWidth(BoxConstraints constraints) { double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (_width == null && _height == null) if (_width == null && _height == null)
return constraints.constrainWidth(0.0); return constraints.constrainWidth(0.0);
return _sizeForConstraints(constraints).width; return _sizeForConstraints(constraints).width;
} }
double getMaxIntrinsicWidth(BoxConstraints constraints) { double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
return _sizeForConstraints(constraints).width; return _sizeForConstraints(constraints).width;
} }
double getMinIntrinsicHeight(BoxConstraints constraints) { double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (_width == null && _height == null) if (_width == null && _height == null)
return constraints.constrainHeight(0.0); return constraints.constrainHeight(0.0);
return _sizeForConstraints(constraints).height; return _sizeForConstraints(constraints).height;
} }
double getMaxIntrinsicHeight(BoxConstraints constraints) { double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
return _sizeForConstraints(constraints).height; return _sizeForConstraints(constraints).height;
} }
......
...@@ -366,6 +366,9 @@ abstract class Constraints { ...@@ -366,6 +366,9 @@ abstract class Constraints {
/// Whether there is exactly one size possible given these constraints /// Whether there is exactly one size possible given these constraints
bool get isTight; bool get isTight;
/// Whether the constraint is expressed in a consistent manner.
bool get isNormalized;
} }
typedef void RenderObjectVisitor(RenderObject child); typedef void RenderObjectVisitor(RenderObject child);
...@@ -657,6 +660,7 @@ abstract class RenderObject extends AbstractNode implements HitTestTarget { ...@@ -657,6 +660,7 @@ abstract class RenderObject extends AbstractNode implements HitTestTarget {
/// implemented here) to return early if the child does not need to do any /// implemented here) to return early if the child does not need to do any
/// work to update its layout information. /// work to update its layout information.
void layout(Constraints constraints, { bool parentUsesSize: false }) { void layout(Constraints constraints, { bool parentUsesSize: false }) {
assert(constraints.isNormalized);
assert(!_debugDoingThisResize); assert(!_debugDoingThisResize);
assert(!_debugDoingThisLayout); assert(!_debugDoingThisLayout);
final RenderObject parent = this.parent; final RenderObject parent = this.parent;
......
...@@ -93,18 +93,22 @@ class RenderOverflowBox extends RenderBox with RenderObjectWithChildMixin<Render ...@@ -93,18 +93,22 @@ class RenderOverflowBox extends RenderBox with RenderObjectWithChildMixin<Render
} }
double getMinIntrinsicWidth(BoxConstraints constraints) { double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
return constraints.constrainWidth(); return constraints.constrainWidth();
} }
double getMaxIntrinsicWidth(BoxConstraints constraints) { double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
return constraints.constrainWidth(); return constraints.constrainWidth();
} }
double getMinIntrinsicHeight(BoxConstraints constraints) { double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
return constraints.constrainHeight(); return constraints.constrainHeight();
} }
double getMaxIntrinsicHeight(BoxConstraints constraints) { double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
return constraints.constrainHeight(); return constraints.constrainHeight();
} }
...@@ -165,18 +169,22 @@ class RenderSizedOverflowBox extends RenderBox with RenderObjectWithChildMixin<R ...@@ -165,18 +169,22 @@ class RenderSizedOverflowBox extends RenderBox with RenderObjectWithChildMixin<R
} }
double getMinIntrinsicWidth(BoxConstraints constraints) { double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
return constraints.constrainWidth(_requestedSize.width); return constraints.constrainWidth(_requestedSize.width);
} }
double getMaxIntrinsicWidth(BoxConstraints constraints) { double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
return constraints.constrainWidth(_requestedSize.width); return constraints.constrainWidth(_requestedSize.width);
} }
double getMinIntrinsicHeight(BoxConstraints constraints) { double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
return constraints.constrainWidth(_requestedSize.height); return constraints.constrainWidth(_requestedSize.height);
} }
double getMaxIntrinsicHeight(BoxConstraints constraints) { double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
return constraints.constrainWidth(_requestedSize.height); return constraints.constrainWidth(_requestedSize.height);
} }
......
...@@ -49,6 +49,7 @@ class RenderParagraph extends RenderBox { ...@@ -49,6 +49,7 @@ class RenderParagraph extends RenderBox {
void layoutText(BoxConstraints constraints) { void layoutText(BoxConstraints constraints) {
assert(constraints != null); assert(constraints != null);
assert(constraints.isNormalized);
if (_constraintsForCurrentLayout == constraints) if (_constraintsForCurrentLayout == constraints)
return; // already cached this layout return; // already cached this layout
textPainter.maxWidth = constraints.maxWidth; textPainter.maxWidth = constraints.maxWidth;
...@@ -80,10 +81,12 @@ class RenderParagraph extends RenderBox { ...@@ -80,10 +81,12 @@ class RenderParagraph extends RenderBox {
} }
double getMinIntrinsicHeight(BoxConstraints constraints) { double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
return _getIntrinsicHeight(constraints); return _getIntrinsicHeight(constraints);
} }
double getMaxIntrinsicHeight(BoxConstraints constraints) { double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
return _getIntrinsicHeight(constraints); return _getIntrinsicHeight(constraints);
} }
......
...@@ -38,24 +38,28 @@ class RenderProxyBox extends RenderBox with RenderObjectWithChildMixin<RenderBox ...@@ -38,24 +38,28 @@ class RenderProxyBox extends RenderBox with RenderObjectWithChildMixin<RenderBox
} }
double getMinIntrinsicWidth(BoxConstraints constraints) { double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (child != null) if (child != null)
return child.getMinIntrinsicWidth(constraints); return child.getMinIntrinsicWidth(constraints);
return super.getMinIntrinsicWidth(constraints); return super.getMinIntrinsicWidth(constraints);
} }
double getMaxIntrinsicWidth(BoxConstraints constraints) { double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (child != null) if (child != null)
return child.getMaxIntrinsicWidth(constraints); return child.getMaxIntrinsicWidth(constraints);
return super.getMaxIntrinsicWidth(constraints); return super.getMaxIntrinsicWidth(constraints);
} }
double getMinIntrinsicHeight(BoxConstraints constraints) { double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (child != null) if (child != null)
return child.getMinIntrinsicHeight(constraints); return child.getMinIntrinsicHeight(constraints);
return super.getMinIntrinsicHeight(constraints); return super.getMinIntrinsicHeight(constraints);
} }
double getMaxIntrinsicHeight(BoxConstraints constraints) { double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (child != null) if (child != null)
return child.getMaxIntrinsicHeight(constraints); return child.getMaxIntrinsicHeight(constraints);
return super.getMaxIntrinsicHeight(constraints); return super.getMaxIntrinsicHeight(constraints);
...@@ -102,6 +106,7 @@ class RenderConstrainedBox extends RenderProxyBox { ...@@ -102,6 +106,7 @@ class RenderConstrainedBox extends RenderProxyBox {
BoxConstraints additionalConstraints BoxConstraints additionalConstraints
}) : _additionalConstraints = additionalConstraints, super(child) { }) : _additionalConstraints = additionalConstraints, super(child) {
assert(additionalConstraints != null); assert(additionalConstraints != null);
assert(additionalConstraints.isNormalized);
} }
/// Additional constraints to apply to [child] during layout /// Additional constraints to apply to [child] during layout
...@@ -109,6 +114,7 @@ class RenderConstrainedBox extends RenderProxyBox { ...@@ -109,6 +114,7 @@ class RenderConstrainedBox extends RenderProxyBox {
BoxConstraints _additionalConstraints; BoxConstraints _additionalConstraints;
void set additionalConstraints (BoxConstraints newConstraints) { void set additionalConstraints (BoxConstraints newConstraints) {
assert(newConstraints != null); assert(newConstraints != null);
assert(newConstraints.isNormalized);
if (_additionalConstraints == newConstraints) if (_additionalConstraints == newConstraints)
return; return;
_additionalConstraints = newConstraints; _additionalConstraints = newConstraints;
...@@ -116,24 +122,28 @@ class RenderConstrainedBox extends RenderProxyBox { ...@@ -116,24 +122,28 @@ class RenderConstrainedBox extends RenderProxyBox {
} }
double getMinIntrinsicWidth(BoxConstraints constraints) { double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (child != null) if (child != null)
return child.getMinIntrinsicWidth(_additionalConstraints.enforce(constraints)); return child.getMinIntrinsicWidth(_additionalConstraints.enforce(constraints));
return _additionalConstraints.enforce(constraints).constrainWidth(0.0); return _additionalConstraints.enforce(constraints).constrainWidth(0.0);
} }
double getMaxIntrinsicWidth(BoxConstraints constraints) { double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (child != null) if (child != null)
return child.getMaxIntrinsicWidth(_additionalConstraints.enforce(constraints)); return child.getMaxIntrinsicWidth(_additionalConstraints.enforce(constraints));
return _additionalConstraints.enforce(constraints).constrainWidth(0.0); return _additionalConstraints.enforce(constraints).constrainWidth(0.0);
} }
double getMinIntrinsicHeight(BoxConstraints constraints) { double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (child != null) if (child != null)
return child.getMinIntrinsicHeight(_additionalConstraints.enforce(constraints)); return child.getMinIntrinsicHeight(_additionalConstraints.enforce(constraints));
return _additionalConstraints.enforce(constraints).constrainHeight(0.0); return _additionalConstraints.enforce(constraints).constrainHeight(0.0);
} }
double getMaxIntrinsicHeight(BoxConstraints constraints) { double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (child != null) if (child != null)
return child.getMaxIntrinsicHeight(_additionalConstraints.enforce(constraints)); return child.getMaxIntrinsicHeight(_additionalConstraints.enforce(constraints));
return _additionalConstraints.enforce(constraints).constrainHeight(0.0); return _additionalConstraints.enforce(constraints).constrainHeight(0.0);
...@@ -221,24 +231,28 @@ class RenderFractionallySizedBox extends RenderProxyBox { ...@@ -221,24 +231,28 @@ class RenderFractionallySizedBox extends RenderProxyBox {
} }
double getMinIntrinsicWidth(BoxConstraints constraints) { double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (child != null) if (child != null)
return child.getMinIntrinsicWidth(_getInnerConstraints(constraints)); return child.getMinIntrinsicWidth(_getInnerConstraints(constraints));
return _getInnerConstraints(constraints).constrainWidth(0.0); return _getInnerConstraints(constraints).constrainWidth(0.0);
} }
double getMaxIntrinsicWidth(BoxConstraints constraints) { double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (child != null) if (child != null)
return child.getMaxIntrinsicWidth(_getInnerConstraints(constraints)); return child.getMaxIntrinsicWidth(_getInnerConstraints(constraints));
return _getInnerConstraints(constraints).constrainWidth(0.0); return _getInnerConstraints(constraints).constrainWidth(0.0);
} }
double getMinIntrinsicHeight(BoxConstraints constraints) { double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (child != null) if (child != null)
return child.getMinIntrinsicHeight(_getInnerConstraints(constraints)); return child.getMinIntrinsicHeight(_getInnerConstraints(constraints));
return _getInnerConstraints(constraints).constrainHeight(0.0); return _getInnerConstraints(constraints).constrainHeight(0.0);
} }
double getMaxIntrinsicHeight(BoxConstraints constraints) { double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (child != null) if (child != null)
return child.getMaxIntrinsicHeight(_getInnerConstraints(constraints)); return child.getMaxIntrinsicHeight(_getInnerConstraints(constraints));
return _getInnerConstraints(constraints).constrainHeight(0.0); return _getInnerConstraints(constraints).constrainHeight(0.0);
...@@ -307,6 +321,7 @@ class RenderAspectRatio extends RenderProxyBox { ...@@ -307,6 +321,7 @@ class RenderAspectRatio extends RenderProxyBox {
} }
Size _applyAspectRatio(BoxConstraints constraints) { Size _applyAspectRatio(BoxConstraints constraints) {
assert(constraints.isNormalized);
double width = constraints.constrainWidth(); double width = constraints.constrainWidth();
double height = constraints.constrainHeight(width / _aspectRatio); double height = constraints.constrainHeight(width / _aspectRatio);
return new Size(width, height); return new Size(width, height);
...@@ -385,10 +400,12 @@ class RenderIntrinsicWidth extends RenderProxyBox { ...@@ -385,10 +400,12 @@ class RenderIntrinsicWidth extends RenderProxyBox {
} }
double getMinIntrinsicWidth(BoxConstraints constraints) { double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
return getMaxIntrinsicWidth(constraints); return getMaxIntrinsicWidth(constraints);
} }
double getMaxIntrinsicWidth(BoxConstraints constraints) { double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (child == null) if (child == null)
return constraints.constrainWidth(0.0); return constraints.constrainWidth(0.0);
double childResult = child.getMaxIntrinsicWidth(constraints); double childResult = child.getMaxIntrinsicWidth(constraints);
...@@ -396,6 +413,7 @@ class RenderIntrinsicWidth extends RenderProxyBox { ...@@ -396,6 +413,7 @@ class RenderIntrinsicWidth extends RenderProxyBox {
} }
double getMinIntrinsicHeight(BoxConstraints constraints) { double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (child == null) if (child == null)
return constraints.constrainHeight(0.0); return constraints.constrainHeight(0.0);
double childResult = child.getMinIntrinsicHeight(_getInnerConstraints(constraints)); double childResult = child.getMinIntrinsicHeight(_getInnerConstraints(constraints));
...@@ -403,6 +421,7 @@ class RenderIntrinsicWidth extends RenderProxyBox { ...@@ -403,6 +421,7 @@ class RenderIntrinsicWidth extends RenderProxyBox {
} }
double getMaxIntrinsicHeight(BoxConstraints constraints) { double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (child == null) if (child == null)
return constraints.constrainHeight(0.0); return constraints.constrainHeight(0.0);
double childResult = child.getMaxIntrinsicHeight(_getInnerConstraints(constraints)); double childResult = child.getMaxIntrinsicHeight(_getInnerConstraints(constraints));
...@@ -451,22 +470,26 @@ class RenderIntrinsicHeight extends RenderProxyBox { ...@@ -451,22 +470,26 @@ class RenderIntrinsicHeight extends RenderProxyBox {
} }
double getMinIntrinsicWidth(BoxConstraints constraints) { double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (child == null) if (child == null)
return constraints.constrainWidth(0.0); return constraints.constrainWidth(0.0);
return child.getMinIntrinsicWidth(_getInnerConstraints(constraints)); return child.getMinIntrinsicWidth(_getInnerConstraints(constraints));
} }
double getMaxIntrinsicWidth(BoxConstraints constraints) { double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (child == null) if (child == null)
return constraints.constrainWidth(0.0); return constraints.constrainWidth(0.0);
return child.getMaxIntrinsicWidth(_getInnerConstraints(constraints)); return child.getMaxIntrinsicWidth(_getInnerConstraints(constraints));
} }
double getMinIntrinsicHeight(BoxConstraints constraints) { double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
return getMaxIntrinsicHeight(constraints); return getMaxIntrinsicHeight(constraints);
} }
double getMaxIntrinsicHeight(BoxConstraints constraints) { double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (child == null) if (child == null)
return constraints.constrainHeight(0.0); return constraints.constrainHeight(0.0);
return child.getMaxIntrinsicHeight(constraints); return child.getMaxIntrinsicHeight(constraints);
......
...@@ -7,33 +7,36 @@ import 'package:flutter/painting.dart'; ...@@ -7,33 +7,36 @@ import 'package:flutter/painting.dart';
import 'box.dart'; import 'box.dart';
import 'object.dart'; import 'object.dart';
/// Abstract class for one-child-layout render boxes that provide control over
/// the child's position.
abstract class RenderShiftedBox extends RenderBox with RenderObjectWithChildMixin<RenderBox> { abstract class RenderShiftedBox extends RenderBox with RenderObjectWithChildMixin<RenderBox> {
// Abstract class for one-child-layout render boxes
RenderShiftedBox(RenderBox child) { RenderShiftedBox(RenderBox child) {
this.child = child; this.child = child;
} }
double getMinIntrinsicWidth(BoxConstraints constraints) { double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (child != null) if (child != null)
return child.getMinIntrinsicWidth(constraints); return child.getMinIntrinsicWidth(constraints);
return super.getMinIntrinsicWidth(constraints); return super.getMinIntrinsicWidth(constraints);
} }
double getMaxIntrinsicWidth(BoxConstraints constraints) { double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (child != null) if (child != null)
return child.getMaxIntrinsicWidth(constraints); return child.getMaxIntrinsicWidth(constraints);
return super.getMaxIntrinsicWidth(constraints); return super.getMaxIntrinsicWidth(constraints);
} }
double getMinIntrinsicHeight(BoxConstraints constraints) { double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (child != null) if (child != null)
return child.getMinIntrinsicHeight(constraints); return child.getMinIntrinsicHeight(constraints);
return super.getMinIntrinsicHeight(constraints); return super.getMinIntrinsicHeight(constraints);
} }
double getMaxIntrinsicHeight(BoxConstraints constraints) { double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (child != null) if (child != null)
return child.getMaxIntrinsicHeight(constraints); return child.getMaxIntrinsicHeight(constraints);
return super.getMaxIntrinsicHeight(constraints); return super.getMaxIntrinsicHeight(constraints);
...@@ -100,6 +103,7 @@ class RenderPadding extends RenderShiftedBox { ...@@ -100,6 +103,7 @@ class RenderPadding extends RenderShiftedBox {
} }
double getMinIntrinsicWidth(BoxConstraints constraints) { double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
double totalPadding = padding.left + padding.right; double totalPadding = padding.left + padding.right;
if (child != null) if (child != null)
return child.getMinIntrinsicWidth(constraints.deflate(padding)) + totalPadding; return child.getMinIntrinsicWidth(constraints.deflate(padding)) + totalPadding;
...@@ -107,6 +111,7 @@ class RenderPadding extends RenderShiftedBox { ...@@ -107,6 +111,7 @@ class RenderPadding extends RenderShiftedBox {
} }
double getMaxIntrinsicWidth(BoxConstraints constraints) { double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
double totalPadding = padding.left + padding.right; double totalPadding = padding.left + padding.right;
if (child != null) if (child != null)
return child.getMaxIntrinsicWidth(constraints.deflate(padding)) + totalPadding; return child.getMaxIntrinsicWidth(constraints.deflate(padding)) + totalPadding;
...@@ -114,6 +119,7 @@ class RenderPadding extends RenderShiftedBox { ...@@ -114,6 +119,7 @@ class RenderPadding extends RenderShiftedBox {
} }
double getMinIntrinsicHeight(BoxConstraints constraints) { double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
double totalPadding = padding.top + padding.bottom; double totalPadding = padding.top + padding.bottom;
if (child != null) if (child != null)
return child.getMinIntrinsicHeight(constraints.deflate(padding)) + totalPadding; return child.getMinIntrinsicHeight(constraints.deflate(padding)) + totalPadding;
...@@ -121,6 +127,7 @@ class RenderPadding extends RenderShiftedBox { ...@@ -121,6 +127,7 @@ class RenderPadding extends RenderShiftedBox {
} }
double getMaxIntrinsicHeight(BoxConstraints constraints) { double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
double totalPadding = padding.top + padding.bottom; double totalPadding = padding.top + padding.bottom;
if (child != null) if (child != null)
return child.getMaxIntrinsicHeight(constraints.deflate(padding)) + totalPadding; return child.getMaxIntrinsicHeight(constraints.deflate(padding)) + totalPadding;
...@@ -282,18 +289,22 @@ class RenderCustomOneChildLayoutBox extends RenderShiftedBox { ...@@ -282,18 +289,22 @@ class RenderCustomOneChildLayoutBox extends RenderShiftedBox {
} }
double getMinIntrinsicWidth(BoxConstraints constraints) { double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
return _getSize(constraints).width; return _getSize(constraints).width;
} }
double getMaxIntrinsicWidth(BoxConstraints constraints) { double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
return _getSize(constraints).width; return _getSize(constraints).width;
} }
double getMinIntrinsicHeight(BoxConstraints constraints) { double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
return _getSize(constraints).height; return _getSize(constraints).height;
} }
double getMaxIntrinsicHeight(BoxConstraints constraints) { double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
return _getSize(constraints).height; return _getSize(constraints).height;
} }
...@@ -305,9 +316,11 @@ class RenderCustomOneChildLayoutBox extends RenderShiftedBox { ...@@ -305,9 +316,11 @@ class RenderCustomOneChildLayoutBox extends RenderShiftedBox {
void performLayout() { void performLayout() {
if (child != null) { if (child != null) {
child.layout(delegate.getConstraintsForChild(constraints), parentUsesSize: true); BoxConstraints childConstraints = delegate.getConstraintsForChild(constraints);
assert(childConstraints.isNormalized);
child.layout(childConstraints, parentUsesSize: !childConstraints.isTight);
final BoxParentData childParentData = child.parentData; final BoxParentData childParentData = child.parentData;
childParentData.position = delegate.getPositionForChild(size, child.size); childParentData.position = delegate.getPositionForChild(size, childConstraints.isTight ? childConstraints.smallest : child.size);
} }
} }
} }
......
...@@ -222,6 +222,7 @@ abstract class RenderStackBase extends RenderBox ...@@ -222,6 +222,7 @@ abstract class RenderStackBase extends RenderBox
} }
double getMinIntrinsicWidth(BoxConstraints constraints) { double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
double width = constraints.minWidth; double width = constraints.minWidth;
RenderBox child = firstChild; RenderBox child = firstChild;
while (child != null) { while (child != null) {
...@@ -236,6 +237,7 @@ abstract class RenderStackBase extends RenderBox ...@@ -236,6 +237,7 @@ abstract class RenderStackBase extends RenderBox
} }
double getMaxIntrinsicWidth(BoxConstraints constraints) { double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
bool hasNonPositionedChildren = false; bool hasNonPositionedChildren = false;
double width = constraints.minWidth; double width = constraints.minWidth;
RenderBox child = firstChild; RenderBox child = firstChild;
...@@ -255,6 +257,7 @@ abstract class RenderStackBase extends RenderBox ...@@ -255,6 +257,7 @@ abstract class RenderStackBase extends RenderBox
} }
double getMinIntrinsicHeight(BoxConstraints constraints) { double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
double height = constraints.minHeight; double height = constraints.minHeight;
RenderBox child = firstChild; RenderBox child = firstChild;
while (child != null) { while (child != null) {
...@@ -269,6 +272,7 @@ abstract class RenderStackBase extends RenderBox ...@@ -269,6 +272,7 @@ abstract class RenderStackBase extends RenderBox
} }
double getMaxIntrinsicHeight(BoxConstraints constraints) { double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
bool hasNonPositionedChildren = false; bool hasNonPositionedChildren = false;
double height = constraints.minHeight; double height = constraints.minHeight;
RenderBox child = firstChild; RenderBox child = firstChild;
......
...@@ -34,18 +34,22 @@ class RenderStatisticsBox extends RenderBox { ...@@ -34,18 +34,22 @@ class RenderStatisticsBox extends RenderBox {
bool get sizedByParent => true; bool get sizedByParent => true;
double getMinIntrinsicWidth(BoxConstraints constraints) { double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
return constraints.minWidth; return constraints.minWidth;
} }
double getMaxIntrinsicWidth(BoxConstraints constraints) { double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
return constraints.maxWidth; return constraints.maxWidth;
} }
double getMinIntrinsicHeight(BoxConstraints constraints) { double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
return constraints.minHeight; return constraints.minHeight;
} }
double getMaxIntrinsicHeight(BoxConstraints constraints) { double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
return constraints.maxHeight; return constraints.maxHeight;
} }
......
...@@ -98,24 +98,28 @@ class RenderViewport extends RenderBox with RenderObjectWithChildMixin<RenderBox ...@@ -98,24 +98,28 @@ class RenderViewport extends RenderBox with RenderObjectWithChildMixin<RenderBox
} }
double getMinIntrinsicWidth(BoxConstraints constraints) { double getMinIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (child != null) if (child != null)
return child.getMinIntrinsicWidth(_getInnerConstraints(constraints)); return child.getMinIntrinsicWidth(_getInnerConstraints(constraints));
return super.getMinIntrinsicWidth(constraints); return super.getMinIntrinsicWidth(constraints);
} }
double getMaxIntrinsicWidth(BoxConstraints constraints) { double getMaxIntrinsicWidth(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (child != null) if (child != null)
return child.getMaxIntrinsicWidth(_getInnerConstraints(constraints)); return child.getMaxIntrinsicWidth(_getInnerConstraints(constraints));
return super.getMaxIntrinsicWidth(constraints); return super.getMaxIntrinsicWidth(constraints);
} }
double getMinIntrinsicHeight(BoxConstraints constraints) { double getMinIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (child != null) if (child != null)
return child.getMinIntrinsicHeight(_getInnerConstraints(constraints)); return child.getMinIntrinsicHeight(_getInnerConstraints(constraints));
return super.getMinIntrinsicHeight(constraints); return super.getMinIntrinsicHeight(constraints);
} }
double getMaxIntrinsicHeight(BoxConstraints constraints) { double getMaxIntrinsicHeight(BoxConstraints constraints) {
assert(constraints.isNormalized);
if (child != null) if (child != null)
return child.getMaxIntrinsicHeight(_getInnerConstraints(constraints)); return child.getMaxIntrinsicHeight(_getInnerConstraints(constraints));
return super.getMaxIntrinsicHeight(constraints); return super.getMaxIntrinsicHeight(constraints);
......
...@@ -8,7 +8,7 @@ void main() { ...@@ -8,7 +8,7 @@ void main() {
RenderDecoratedBox box = new RenderDecoratedBox(decoration: new BoxDecoration()); RenderDecoratedBox box = new RenderDecoratedBox(decoration: new BoxDecoration());
RenderFlex flex = new RenderFlex(children: <RenderBox>[box]); RenderFlex flex = new RenderFlex(children: <RenderBox>[box]);
layout(flex, constraints: const BoxConstraints( layout(flex, constraints: const BoxConstraints(
minWidth: 200.0, maxWidth: 100.0, minHeight: 200.0, maxHeight: 100.0) minWidth: 200.0, maxWidth: 200.0, minHeight: 200.0, maxHeight: 200.0)
); );
expect(flex.size.width, equals(200.0), reason: "flex width"); expect(flex.size.width, equals(200.0), reason: "flex width");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment