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

Unified Diff: sky/sdk/lib/framework/layout2.dart

Issue 1156013003: Introduce RenderNodeWithChildMixin (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 7 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/fn2.dart ('k') | sky/tests/raw/render_box.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/sdk/lib/framework/layout2.dart
diff --git a/sky/sdk/lib/framework/layout2.dart b/sky/sdk/lib/framework/layout2.dart
index a31c40264ab225f36fc986d13bb2bab92ab37653..f0d0e522fa294d3405d5baa7df0e78ea1f46459a 100644
--- a/sky/sdk/lib/framework/layout2.dart
+++ b/sky/sdk/lib/framework/layout2.dart
@@ -262,6 +262,19 @@ class HitTestResult {
}
}
+abstract class RenderNodeWithChildMixin<ChildType extends RenderNode> {
+ ChildType _child;
+ ChildType get child => _child;
+ void set child (ChildType value) {
+ if (_child != null)
+ dropChild(_child);
+ _child = value;
+ if (_child != null)
+ adoptChild(_child);
+ markNeedsLayout();
+ }
+}
+
// GENERIC MIXIN FOR RENDER NODES THAT TAKE A LIST OF CHILDREN
abstract class ContainerParentDataMixin<ChildType extends RenderNode> {
@@ -536,16 +549,38 @@ class RenderDecoratedBox extends RenderBox {
}
+class RenderDecoratedCircle extends RenderDecoratedBox with RenderNodeWithChildMixin<RenderBox> {
+ RenderDecoratedCircle({
+ BoxDecoration decoration,
+ RenderBox child
+ }) : super(decoration) {
+ this.child = child;
+ }
+
+ void paint(RenderNodeDisplayList canvas) {
+ assert(width != null);
+ assert(height != null);
+
+ if (_decoration == null)
+ return;
+
+ if (_decoration.backgroundColor != null) {
+ sky.Paint paint = new sky.Paint()..color = _decoration.backgroundColor;
+ canvas.drawCircle(new sky.Rect()..setLTRB(0.0, 0.0, width, height), paint);
+ }
+ }
+}
+
// RENDER VIEW LAYOUT MANAGER
-class RenderView extends RenderNode {
+class RenderView extends RenderNode with RenderNodeWithChildMixin<RenderBox> {
RenderView({
- RenderBox root,
+ RenderBox child,
this.timeForRotation: const Duration(microseconds: 83333)
}) {
- this.root = root;
+ this.child = child;
}
double _width;
@@ -557,25 +592,14 @@ class RenderView extends RenderNode {
int get orientation => _orientation;
Duration timeForRotation;
- RenderBox _root;
- RenderBox get root => _root;
- void set root (RenderBox value) {
- if (_root != null)
- dropChild(_root);
- _root = value;
- if (_root != null)
- adoptChild(_root);
- markNeedsLayout();
- }
-
void layout({
double newWidth,
double newHeight,
int newOrientation
}) {
if (newOrientation != orientation) {
- if (orientation != null && root != null)
- root.rotate(oldAngle: orientation, newAngle: newOrientation, time: timeForRotation);
+ if (orientation != null && child != null)
+ child.rotate(oldAngle: orientation, newAngle: newOrientation, time: timeForRotation);
_orientation = newOrientation;
}
if ((newWidth != width) || (newHeight != height)) {
@@ -588,15 +612,15 @@ class RenderView extends RenderNode {
}
void relayout() {
- if (root != null) {
- root.layout(new BoxConstraints(
+ if (child != null) {
+ child.layout(new BoxConstraints(
minWidth: width,
maxWidth: width,
minHeight: height,
maxHeight: height
));
- assert(root.width == width);
- assert(root.height == height);
+ assert(child.width == width);
+ assert(child.height == height);
}
layoutDone();
}
@@ -608,17 +632,17 @@ class RenderView extends RenderNode {
bool hitTest(HitTestResult result, { double x, double y }) {
if (x < 0.0 || x >= width || y < 0.0 || y >= height)
return false;
- if (root != null) {
- if (x >= 0.0 && x < root.width && y >= 0.0 && y < root.height)
- root.hitTest(result, x: x, y: y);
+ if (child != null) {
+ if (x >= 0.0 && x < child.width && y >= 0.0 && y < child.height)
+ child.hitTest(result, x: x, y: y);
}
result.add(this);
return true;
}
void paint(RenderNodeDisplayList canvas) {
- if (root != null)
- canvas.paintChild(root, 0.0, 0.0);
+ if (child != null)
+ canvas.paintChild(child, 0.0, 0.0);
}
void paintFrame() {
« no previous file with comments | « sky/sdk/lib/framework/fn2.dart ('k') | sky/tests/raw/render_box.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698