| Index: sky/sdk/lib/rendering/box.dart
|
| diff --git a/sky/sdk/lib/rendering/box.dart b/sky/sdk/lib/rendering/box.dart
|
| index 21d1878ffe30d33de4a9e40f25a8f3cd1707f24e..5d61422fa2a1f6a831a6531d4e6167398f974d07 100644
|
| --- a/sky/sdk/lib/rendering/box.dart
|
| +++ b/sky/sdk/lib/rendering/box.dart
|
| @@ -193,6 +193,11 @@ class BoxConstraints extends Constraints {
|
| bool get hasTightHeight => minHeight >= maxHeight;
|
| bool get isTight => hasTightWidth && hasTightHeight;
|
|
|
| + bool contains(Size size) {
|
| + return (minWidth <= size.width) && (size.width <= math.max(minWidth, maxWidth)) &&
|
| + (minHeight <= size.height) && (size.height <= math.max(minHeight, maxHeight));
|
| + }
|
| +
|
| bool operator ==(other) {
|
| if (identical(this, other))
|
| return true;
|
| @@ -290,25 +295,13 @@ abstract class RenderBox extends RenderObject {
|
| return null;
|
| }
|
|
|
| - // This whole block should only be here in debug builds
|
| - bool _debugDoingThisLayout = false;
|
| - bool _debugCanParentUseSize;
|
| - void layoutWithoutResize() {
|
| - _debugDoingThisLayout = true;
|
| - _debugCanParentUseSize = false;
|
| - super.layoutWithoutResize();
|
| - _debugCanParentUseSize = null;
|
| - _debugDoingThisLayout = false;
|
| - }
|
| - void layout(dynamic constraints, { bool parentUsesSize: false }) {
|
| - _debugDoingThisLayout = true;
|
| - _debugCanParentUseSize = parentUsesSize;
|
| - super.layout(constraints, parentUsesSize: parentUsesSize);
|
| - _debugCanParentUseSize = null;
|
| - _debugDoingThisLayout = false;
|
| - }
|
| -
|
| BoxConstraints get constraints => super.constraints;
|
| + bool debugDoesMeetConstraints() {
|
| + assert(constraints != null);
|
| + assert(_size != null);
|
| + assert(!_size.isInfinite);
|
| + return constraints.contains(_size);
|
| + }
|
| void performResize() {
|
| // default behaviour for subclasses that have sizedByParent = true
|
| size = constraints.constrain(Size.zero);
|
| @@ -329,19 +322,34 @@ abstract class RenderBox extends RenderObject {
|
| }
|
| void hitTestChildren(HitTestResult result, { Point position }) { }
|
|
|
| + // TODO(ianh): move size up to before constraints
|
| // TODO(ianh): In non-debug builds, this should all just be:
|
| // Size size = Size.zero;
|
| // In debug builds, however:
|
| Size _size = Size.zero;
|
| - Size get size => _size;
|
| + Size get size {
|
| + if (_size is _DebugSize) {
|
| + final _DebugSize _size = this._size; // TODO(ianh): Remove this once the analyzer is cleverer
|
| + assert(_size._owner == this);
|
| + if (RenderObject.debugActiveLayout != null) {
|
| + // we are always allowed to access our own size (for print debugging and asserts if nothing else)
|
| + // other than us, the only object that's allowed to read our size is our parent, if they're said they will
|
| + assert(debugDoingThisResize || debugDoingThisLayout ||
|
| + (RenderObject.debugActiveLayout == parent && _size._canBeUsedByParent));
|
| + }
|
| + assert(_size == this._size); // TODO(ianh): Remove this once the analyzer is cleverer
|
| + }
|
| + return _size;
|
| + }
|
| void set size(Size value) {
|
| assert(RenderObject.debugDoingLayout);
|
| - assert(_debugDoingThisLayout);
|
| + assert((sizedByParent && debugDoingThisResize) ||
|
| + (!sizedByParent && debugDoingThisLayout));
|
| if (value is _DebugSize) {
|
| assert(value._canBeUsedByParent);
|
| assert(value._owner.parent == this);
|
| }
|
| - _size = inDebugBuild ? new _DebugSize(value, this, _debugCanParentUseSize) : value;
|
| + _size = inDebugBuild ? new _DebugSize(value, this, debugCanParentUseSize) : value;
|
| }
|
|
|
| String debugDescribeSettings(String prefix) => '${super.debugDescribeSettings(prefix)}${prefix}size: ${size}\n';
|
| @@ -1134,11 +1142,8 @@ class RenderView extends RenderObject with RenderObjectWithChildMixin<RenderBox>
|
| assert(_size.height < double.INFINITY);
|
| assert(_size.width < double.INFINITY);
|
|
|
| - if (child != null) {
|
| + if (child != null)
|
| child.layout(new BoxConstraints.tight(_size));
|
| - assert(child.size.width == width);
|
| - assert(child.size.height == height);
|
| - }
|
| }
|
|
|
| void rotate({ int oldAngle, int newAngle, Duration time }) {
|
|
|