Chromium Code Reviews| Index: sky/sdk/lib/framework/fn2.dart |
| diff --git a/sky/sdk/lib/framework/fn2.dart b/sky/sdk/lib/framework/fn2.dart |
| index e4fbb47c708b8281ed84acec14e150541ba0773b..d1f66af23f4da7a43803207fed3b71cfa5c69dac 100644 |
| --- a/sky/sdk/lib/framework/fn2.dart |
| +++ b/sky/sdk/lib/framework/fn2.dart |
| @@ -327,6 +327,74 @@ abstract class RenderNodeWrapper extends UINode { |
| } |
| } |
| +abstract class OneChildRenderNodeWrapper extends RenderNodeWrapper { |
| + final UINode child; |
| + |
| + OneChildRenderNodeWrapper({ this.child, Object key }) : super(key: key); |
| + |
| + void insert(RenderNodeWrapper child, dynamic slot) { |
| + assert(slot == null); |
| + root.child = child.root; |
| + } |
| + |
| + void syncRenderNode(RenderNodeWrapper old) { |
| + super.syncRenderNode(old); |
| + UINode oldChild = old == null ? null : (old as OneChildRenderNodeWrapper).child; |
| + syncChild(child, oldChild, null); |
| + } |
| + |
| + void _remove() { |
| + assert(child != null); |
| + removeChild(child); |
| + super._remove(); |
| + } |
| +} |
| + |
| +class Padding extends OneChildRenderNodeWrapper { |
| + RenderPadding root; |
| + final EdgeDims padding; |
| + |
| + Padding({ this.padding, UINode child, Object key }) |
| + : super(child: child, key: key); |
| + |
| + RenderPadding createNode() => new RenderPadding(padding: padding); |
| + |
| + void syncRenderNode(Padding old) { |
| + super.syncRenderNode(old); |
| + root.padding = padding; |
| + } |
| +} |
| + |
| +class DecoratedBox extends OneChildRenderNodeWrapper { |
| + RenderDecoratedBox root; |
| + final BoxDecoration decoration; |
| + |
| + DecoratedBox({ this.decoration, UINode child, Object key }) |
| + : super(child: child, key: key); |
| + |
| + RenderDecoratedBox createNode() => new RenderDecoratedBox(decoration: decoration); |
| + |
| + void syncRenderNode(DecoratedBox old) { |
| + super.syncRenderNode(old); |
| + root.decoration = decoration; |
| + } |
| +} |
| + |
| +class SizedBox extends OneChildRenderNodeWrapper { |
| + RenderSizedBox root; |
| + final sky.Size desiredSize; |
| + |
| + SizedBox({ this.desiredSize, UINode child, Object key }) |
| + : super(child: child, key: key); |
| + |
| + RenderSizedBox createNode() => new RenderSizedBox(desiredSize: desiredSize); |
| + |
| + void syncRenderNode(DecoratedBox old) { |
| + super.syncRenderNode(old); |
| + root.desiredSize = desiredSize; |
| + } |
| +} |
| + |
|
Hixie
2015/06/02 21:52:21
Man, this could really benefit from macros.
|
| final List<UINode> _emptyList = new List<UINode>(); |
| abstract class OneChildListRenderNodeWrapper extends RenderNodeWrapper { |
| @@ -780,6 +848,41 @@ abstract class Component extends UINode { |
| UINode build(); |
| } |
| +class Container extends Component { |
| + final UINode child; |
| + final EdgeDims margin; |
| + final BoxDecoration decoration; |
| + final sky.Size desiredSize; |
| + final EdgeDims padding; |
| + |
| + Container({ |
| + Object key, |
| + this.child, |
| + this.margin, |
| + this.decoration, |
| + this.desiredSize, |
| + this.padding |
| + }) : super(key: key); |
| + |
| + UINode build() { |
| + UINode current = child; |
| + |
| + if (padding != null) |
| + current = new Padding(padding: padding, child: current); |
| + |
| + if (decoration != null) |
| + current = new DecoratedBox(decoration: decoration, child: current); |
| + |
| + if (desiredSize != null) |
| + current = new SizedBox(desiredSize: desiredSize, child: current); |
| + |
| + if (margin != null) |
| + current = new Padding(padding: margin, child: current); |
| + |
| + return current; |
| + } |
| +} |
| + |
| class _AppView extends AppView { |
| _AppView() : super(null); |