diff --git a/sdk/lib/framework/components2/scaffold.dart b/sdk/lib/framework/components2/scaffold.dart index 4cac5d2a9d9..ea6c3797b35 100644 --- a/sdk/lib/framework/components2/scaffold.dart +++ b/sdk/lib/framework/components2/scaffold.dart @@ -130,6 +130,9 @@ class RenderScaffold extends RenderBox { } } + String debugDescribeChildren(String prefix) { + return _slots.keys.map((slot) => '${prefix}${slot}: ${_slots[slot].toString(prefix)}').join('\n'); + } } class Scaffold extends RenderObjectWrapper { diff --git a/sdk/lib/framework/rendering/box.dart b/sdk/lib/framework/rendering/box.dart index 9c97a6cde32..0be7bb90f24 100644 --- a/sdk/lib/framework/rendering/box.dart +++ b/sdk/lib/framework/rendering/box.dart @@ -109,6 +109,7 @@ class BoxConstraints { class BoxParentData extends ParentData { sky.Point position = new sky.Point(0.0, 0.0); + String toString() => 'position=$position'; } abstract class RenderBox extends RenderObject { @@ -213,6 +214,8 @@ class RenderSizedBox extends RenderProxyBox { if (child != null) child.layout(new BoxConstraints.tight(size)); } + + String debugDescribeSettings(String prefix) => '${prefix}desiredSize: ${desiredSize}'; } class RenderClip extends RenderProxyBox { @@ -285,6 +288,7 @@ class RenderPadding extends RenderBox with RenderObjectWithChildMixin } } + String debugDescribeSettings(String prefix) => '${prefix}padding: ${padding}'; } class RenderImage extends RenderBox { @@ -359,6 +363,8 @@ class RenderImage extends RenderBox { if (needsScale) canvas.restore(); } + + String debugDescribeSettings(String prefix) => '${prefix}url: ${src}\n${prefix}dimensions: ${requestedSize}'; } class BorderSide { @@ -417,6 +423,17 @@ class BoxDecoration { final sky.Color backgroundColor; final Border border; + + String toString([String prefix = '']) { + List result = []; + if (backgroundColor != null) + result.add('${prefix}backgroundColor: $backgroundColor'); + if (border != null) + result.add('${prefix}border: $border'); + if (result.isEmpty) + return '${prefix}'; + return result.join('\n'); + } } class RenderDecoratedBox extends RenderProxyBox { @@ -495,6 +512,8 @@ class RenderDecoratedBox extends RenderProxyBox { super.paint(canvas); } + + String debugDescribeSettings(String prefix) => '${prefix}decoration:\n${decoration.toString(prefix + " ")}'; } class RenderTransform extends RenderProxyBox { diff --git a/sdk/lib/framework/rendering/flex.dart b/sdk/lib/framework/rendering/flex.dart index f719dada7c7..189f5619d64 100644 --- a/sdk/lib/framework/rendering/flex.dart +++ b/sdk/lib/framework/rendering/flex.dart @@ -13,6 +13,7 @@ class FlexBoxParentData extends BoxParentData with ContainerParentDataMixin '${super.toString()}; flex=$flex'; } enum FlexDirection { horizontal, vertical } diff --git a/sdk/lib/framework/rendering/object.dart b/sdk/lib/framework/rendering/object.dart index 736d67771c2..46b414f3c14 100644 --- a/sdk/lib/framework/rendering/object.dart +++ b/sdk/lib/framework/rendering/object.dart @@ -16,6 +16,7 @@ class ParentData { // override this in subclasses to merge in data from other into this assert(other.runtimeType == this.runtimeType); } + String toString() => ''; } const kLayoutDirections = 4; @@ -219,6 +220,18 @@ abstract class RenderObject extends AbstractNode { // } // You must not add yourself to /result/ if you return false. + + String toString([String prefix = '']) { + String header = '${runtimeType}\n'; + prefix += ' '; + String settings = '${debugDescribeSettings(prefix)}'; + if (settings != '') + settings += '\n'; + return '${header}${settings}${debugDescribeChildren(prefix)}'; + } + String debugDescribeSettings(String prefix) => '${prefix}parentData: ${parentData}'; + String debugDescribeChildren(String prefix) => ''; + } class HitTestResult { @@ -252,6 +265,7 @@ abstract class RenderObjectWithChildMixin { if (_child != null) _child.detach(); } + String debugDescribeChildren(String prefix) => '${prefix}child: ${child.toString(prefix)}'; } @@ -401,4 +415,18 @@ abstract class ContainerRenderObjectMixin '${prefix}TEXT (${color}): ${text}'; }