Commit 87e8b162 authored by Collin Jackson's avatar Collin Jackson

WIP Flexbox Layout Manager for Sky framework.

This only handles really basic cases and doesn't understand
justification, wrapping, and so on. Submitting for code
review so I can get some early feedback before I invest
more time into making it correct.

R=ianh@google.com, abarth

Review URL: https://codereview.chromium.org/1151293002
parent 51c670e6
...@@ -7,19 +7,26 @@ import 'dart:sky'; ...@@ -7,19 +7,26 @@ import 'dart:sky';
import 'package:sky/framework/layout2.dart'; import 'package:sky/framework/layout2.dart';
class RenderSolidColor extends RenderDecoratedBox { class RenderSolidColor extends RenderDecoratedBox {
final double desiredHeight;
final double desiredWidth;
final int backgroundColor; final int backgroundColor;
RenderSolidColor(int backgroundColor) RenderSolidColor(int backgroundColor, { double desiredHeight: double.INFINITY,
: super(new BoxDecoration(backgroundColor: backgroundColor)), double desiredWidth: double.INFINITY })
backgroundColor = backgroundColor; : desiredHeight = desiredHeight,
desiredWidth = desiredWidth,
backgroundColor = backgroundColor,
super(new BoxDecoration(backgroundColor: backgroundColor));
BoxDimensions getIntrinsicDimensions(BoxConstraints constraints) { BoxDimensions getIntrinsicDimensions(BoxConstraints constraints) {
return new BoxDimensions.withConstraints(constraints, height: 200.0); return new BoxDimensions.withConstraints(constraints,
height: desiredHeight,
width: desiredWidth);
} }
void layout(BoxConstraints constraints, { RenderNode relayoutSubtreeRoot }) { void layout(BoxConstraints constraints, { RenderNode relayoutSubtreeRoot }) {
width = constraints.constrainWidth(constraints.maxWidth); width = constraints.constrainWidth(desiredWidth);
height = constraints.constrainHeight(200.0); height = constraints.constrainHeight(desiredHeight);
layoutDone(); layoutDone();
} }
...@@ -56,12 +63,42 @@ void main() { ...@@ -56,12 +63,42 @@ void main() {
view.setEventCallback(handleEvent); view.setEventCallback(handleEvent);
view.setBeginFrameCallback(beginFrame); view.setBeginFrameCallback(beginFrame);
var root = new RenderBlock( var root = new RenderFlex(
decoration: new BoxDecoration(backgroundColor: 0xFF00FFFF), direction: FlexDirection.Vertical,
decoration: new BoxDecoration(backgroundColor: 0xFF000000));
void addFlexChild(RenderFlex parent, int backgroundColor, { int flex: 0 }) {
RenderNode child = new RenderSolidColor(backgroundColor);
parent.add(child);
child.parentData.flex = flex;
}
// Yellow bar at top
addFlexChild(root, 0xFFFFFF00, flex: 1);
// Turquoise box
root.add(new RenderSolidColor(0x7700FFFF, desiredHeight: 100.0, desiredWidth: 100.0));
// Green and cyan render block with padding
var renderBlock = new RenderBlock(
decoration: new BoxDecoration(backgroundColor: 0xFFFFFFFF),
padding: const EdgeDims(10.0, 10.0, 10.0, 10.0)); padding: const EdgeDims(10.0, 10.0, 10.0, 10.0));
root.add(new RenderSolidColor(0xFF00FF00)); renderBlock.add(new RenderSolidColor(0xFF00FF00, desiredHeight: 50.0, desiredWidth: 100.0));
root.add(new RenderSolidColor(0xFF0000FF)); renderBlock.add(new RenderSolidColor(0x7700FFFF, desiredHeight: 100.0, desiredWidth: 50.0));
root.add(renderBlock);
var row = new RenderFlex(
direction: FlexDirection.Horizontal,
decoration: new BoxDecoration(backgroundColor: 0xFF333333));
// Purple and blue cells
addFlexChild(row, 0x77FF00FF, flex: 1);
addFlexChild(row, 0xFF0000FF, flex: 2);
root.add(row);
row.parentData.flex = 3;
renderView = new RenderView(root: root); renderView = new RenderView(root: root);
renderView.layout(newWidth: view.width, newHeight: view.height); renderView.layout(newWidth: view.width, newHeight: view.height);
......
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