Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(29)

Unified Diff: sky/sdk/lib/framework/rendering/box.dart

Issue 1179713004: Material and RaisedButton. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sky/sdk/lib/framework/painting/box_painter.dart ('k') | sky/sdk/lib/framework/theme2/colors.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/sdk/lib/framework/rendering/box.dart
diff --git a/sky/sdk/lib/framework/rendering/box.dart b/sky/sdk/lib/framework/rendering/box.dart
index abc6c65e399108590b5862507c5365213fde5863..3d54eae0e6da565fa1986d23a027baab2f4764c0 100644
--- a/sky/sdk/lib/framework/rendering/box.dart
+++ b/sky/sdk/lib/framework/rendering/box.dart
@@ -53,7 +53,8 @@ class BoxConstraints {
this.minWidth: 0.0,
this.maxWidth: double.INFINITY,
this.minHeight: 0.0,
- this.maxHeight: double.INFINITY});
+ this.maxHeight: double.INFINITY
+ });
BoxConstraints.tight(Size size)
: minWidth = size.width,
@@ -79,6 +80,15 @@ class BoxConstraints {
);
}
+ BoxConstraints loosen() {
+ return new BoxConstraints(
+ minWidth: 0.0,
+ maxWidth: maxWidth,
+ minHeight: 0.0,
+ maxHeight: maxHeight
+ );
+ }
+
BoxConstraints apply(BoxConstraints constraints) {
return new BoxConstraints(
minWidth: math.max(minWidth, constraints.minWidth),
@@ -243,6 +253,8 @@ abstract class RenderBox extends RenderObject {
class RenderProxyBox extends RenderBox with RenderObjectWithChildMixin<RenderBox> {
+ // ProxyBox assumes the child will be at 0,0 and will have the same size
+
RenderProxyBox([RenderBox child = null]) {
this.child = child;
}
@@ -503,12 +515,37 @@ class RenderClipOval extends RenderProxyBox {
}
}
-class RenderPadding extends RenderBox with RenderObjectWithChildMixin<RenderBox> {
+abstract class RenderShiftedBox extends RenderBox with RenderObjectWithChildMixin<RenderBox> {
+
+ // Abstract class for one-child-layout render boxes
+
+ RenderShiftedBox(RenderBox child) {
+ this.child = child;
+ }
+
+ void paint(RenderObjectDisplayList canvas) {
+ if (child != null)
+ canvas.paintChild(child, child.parentData.position);
+ }
- RenderPadding({ EdgeDims padding, RenderBox child }) {
+ void hitTestChildren(HitTestResult result, { Point position }) {
+ if (child != null) {
+ assert(child.parentData is BoxParentData);
+ Rect childBounds = new Rect.fromPointAndSize(child.parentData.position, child.size);
+ if (childBounds.contains(position)) {
+ child.hitTest(result, position: new Point(position.x - child.parentData.position.x,
+ position.y - child.parentData.position.y));
+ }
+ }
+ }
+
+}
+
+class RenderPadding extends RenderShiftedBox {
+
+ RenderPadding({ EdgeDims padding, RenderBox child }) : super(child) {
assert(padding != null);
this.padding = padding;
- this.child = child;
}
EdgeDims _padding;
@@ -564,23 +601,79 @@ class RenderPadding extends RenderBox with RenderObjectWithChildMixin<RenderBox>
padding.top + child.size.height + padding.bottom));
}
- void paint(RenderObjectDisplayList canvas) {
+ String debugDescribeSettings(String prefix) => '${super.debugDescribeSettings(prefix)}${prefix}padding: ${padding}\n';
+}
+
+class RenderPositionedBox extends RenderShiftedBox {
+
+ RenderPositionedBox({
+ RenderBox child,
+ double horizontal: 0.5,
+ double vertical: 0.5
+ }) : _horizontal = horizontal,
+ _vertical = vertical,
+ super(child) {
+ assert(horizontal != null);
+ assert(vertical != null);
+ }
+
+ double _horizontal;
+ double get horizontal => _horizontal;
+ void set horizontal (double value) {
+ assert(value != null);
+ if (_horizontal == value)
+ return;
+ _horizontal = value;
+ markNeedsLayout();
+ }
+
+ double _vertical;
+ double get vertical => _vertical;
+ void set vertical (double value) {
+ assert(value != null);
+ if (_vertical == value)
+ return;
+ _vertical = value;
+ markNeedsLayout();
+ }
+
+ double getMinIntrinsicWidth(BoxConstraints constraints) {
if (child != null)
- canvas.paintChild(child, child.parentData.position);
+ return child.getMinIntrinsicWidth(constraints);
+ return super.getMinIntrinsicWidth(constraints);
}
- void hitTestChildren(HitTestResult result, { Point position }) {
+ double getMaxIntrinsicWidth(BoxConstraints constraints) {
+ if (child != null)
+ return child.getMaxIntrinsicWidth(constraints);
+ return super.getMaxIntrinsicWidth(constraints);
+ }
+
+ double getMinIntrinsicHeight(BoxConstraints constraints) {
+ if (child != null)
+ return child.getMinIntrinsicHeight(constraints);
+ return super.getMinIntrinsicHeight(constraints);
+ }
+
+ double getMaxIntrinsicHeight(BoxConstraints constraints) {
+ if (child != null)
+ return child.getMaxIntrinsicHeight(constraints);
+ return super.getMaxIntrinsicHeight(constraints);
+ }
+
+ void performLayout() {
if (child != null) {
+ child.layout(constraints.loosen());
+ size = constraints.constrain(child.size);
assert(child.parentData is BoxParentData);
- Rect childBounds = new Rect.fromPointAndSize(child.parentData.position, child.size);
- if (childBounds.contains(position)) {
- child.hitTest(result, position: new Point(position.x - child.parentData.position.x,
- position.y - child.parentData.position.y));
- }
+ Size delta = size - child.size;
+ child.parentData.position = new Point(delta.width * horizontal, delta.height * vertical);
+ } else {
+ performResize();
}
}
- String debugDescribeSettings(String prefix) => '${super.debugDescribeSettings(prefix)}${prefix}padding: ${padding}\n';
+ String debugDescribeSettings(String prefix) => '${super.debugDescribeSettings(prefix)}${prefix}horizontal: ${horizontal}\n${prefix}vertical: ${vertical}\n';
}
class RenderImage extends RenderBox {
@@ -608,6 +701,8 @@ class RenderImage extends RenderBox {
Size _requestedSize;
Size get requestedSize => _requestedSize;
void set requestedSize (Size value) {
+ if (value == null)
+ value = const Size(null, null);
if (value == _requestedSize)
return;
_requestedSize = value;
« no previous file with comments | « sky/sdk/lib/framework/painting/box_painter.dart ('k') | sky/sdk/lib/framework/theme2/colors.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698