Commit bd9036cd authored by Hixie's avatar Hixie

Port spinning_mixed demo to fn3

parent 33c7820d
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'solid_color_box.dart'; import 'lib/solid_color_box.dart';
void main() { void main() {
var table = new RenderFlex(direction: FlexDirection.vertical); var table = new RenderFlex(direction: FlexDirection.vertical);
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
import 'dart:ui' as ui; import 'dart:ui' as ui;
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'solid_color_box.dart'; import 'lib/solid_color_box.dart';
RenderBox buildFlexExample() { RenderBox buildFlexExample() {
RenderFlex flexRoot = new RenderFlex(direction: FlexDirection.vertical); RenderFlex flexRoot = new RenderFlex(direction: FlexDirection.vertical);
......
...@@ -8,7 +8,7 @@ import 'dart:math' as math; ...@@ -8,7 +8,7 @@ import 'dart:math' as math;
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'solid_color_box.dart'; import 'lib/solid_color_box.dart';
class Touch { class Touch {
final double x; final double x;
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'solid_color_box.dart'; import 'lib/solid_color_box.dart';
const TextStyle style = const TextStyle(color: const Color(0xFF000000)); const TextStyle style = const TextStyle(color: const Color(0xFF000000));
......
...@@ -7,7 +7,7 @@ import 'dart:math' as math; ...@@ -7,7 +7,7 @@ import 'dart:math' as math;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'solid_color_box.dart'; import 'lib/solid_color_box.dart';
Color randomColor() { Color randomColor() {
final List<Color> allColors = [ final List<Color> allColors = [
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'solid_color_box.dart'; import 'lib/solid_color_box.dart';
void main() { void main() {
RenderFlex flexRoot = new RenderFlex(direction: FlexDirection.vertical); RenderFlex flexRoot = new RenderFlex(direction: FlexDirection.vertical);
......
...@@ -7,7 +7,7 @@ import 'dart:ui' as ui; ...@@ -7,7 +7,7 @@ import 'dart:ui' as ui;
import 'package:flutter/animation.dart'; import 'package:flutter/animation.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'solid_color_box.dart'; import 'lib/solid_color_box.dart';
Duration timeBase; Duration timeBase;
RenderTransform transformBox; RenderTransform transformBox;
......
...@@ -8,20 +8,21 @@ import 'package:flutter/animation.dart'; ...@@ -8,20 +8,21 @@ import 'package:flutter/animation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import '../rendering/solid_color_box.dart'; import 'package:flutter_rendering_examples/solid_color_box.dart';
// Solid colour, RenderObject version // Solid colour, RenderObject version
void addFlexChildSolidColor(RenderFlex parent, ui.Color backgroundColor, { int flex: 0 }) { void addFlexChildSolidColor(RenderFlex parent, ui.Color backgroundColor, { int flex: 0 }) {
RenderSolidColorBox child = new RenderSolidColorBox(backgroundColor); RenderSolidColorBox child = new RenderSolidColorBox(backgroundColor);
parent.add(child); parent.add(child);
child.parentData.flex = flex; FlexParentData childParentData = child.parentData;
childParentData.flex = flex;
} }
// Solid colour, Widget version // Solid colour, Widget version
class Rectangle extends Component { class Rectangle extends StatelessComponent {
Rectangle(this.color, { Key key }) : super(key: key); Rectangle(this.color, { Key key }) : super(key: key);
final Color color; final Color color;
Widget build() { Widget build(BuildContext context) {
return new Flexible( return new Flexible(
child: new Container( child: new Container(
decoration: new BoxDecoration(backgroundColor: color) decoration: new BoxDecoration(backgroundColor: color)
...@@ -30,28 +31,42 @@ class Rectangle extends Component { ...@@ -30,28 +31,42 @@ class Rectangle extends Component {
} }
} }
Widget builder() { double value;
return new Container( RenderObjectToWidgetElement<RenderBox> element;
height: 300.0, void attachWidgetTreeToRenderTree(RenderProxyBox container) {
child: new Column([ element = new RenderObjectToWidgetAdapter<RenderBox>(
new Rectangle(const Color(0xFF00FFFF)), container: container,
new Container( child: new Container(
padding: new EdgeDims.all(10.0), height: 300.0,
margin: new EdgeDims.all(10.0), child: new Column(<Widget>[
decoration: new BoxDecoration(backgroundColor: const Color(0xFFCCCCCC)), new Rectangle(const Color(0xFF00FFFF)),
child: new RaisedButton( new Container(
child: new Row([ padding: new EdgeDims.all(10.0),
new NetworkImage(src: "https://www.dartlang.org/logos/dart-logo.png"), margin: new EdgeDims.all(10.0),
new Text('PRESS ME'), decoration: new BoxDecoration(backgroundColor: const Color(0xFFCCCCCC)),
]), child: new Row(<Widget>[
onPressed: () => print("Hello World") new RaisedButton(
) child: new Row(<Widget>[
), new NetworkImage(src: "http://flutter.io/favicon.ico"),
new Rectangle(const Color(0xFFFFFF00)), new Text('PRESS ME'),
], ]
justifyContent: FlexJustifyContent.spaceBetween ),
onPressed: () {
value = value == null ? 0.1 : (value + 0.1) % 1.0;
attachWidgetTreeToRenderTree(container);
}
),
new CircularProgressIndicator(value: value),
],
justifyContent: FlexJustifyContent.spaceAround
)
),
new Rectangle(const Color(0xFFFFFF00)),
],
justifyContent: FlexJustifyContent.spaceBetween
)
) )
); ).attachToRenderTree(element);
} }
Duration timeBase; Duration timeBase;
...@@ -69,16 +84,13 @@ void rotate(Duration timeStamp) { ...@@ -69,16 +84,13 @@ void rotate(Duration timeStamp) {
} }
void main() { void main() {
// Because we're going to use Widgets, we want to initialise its // Because we're going to use Widgets, we want to ensure we're using a
// FlutterBinding, not use the default one. We don't really need to do // WidgetFlutterBinding rather than some other kind of binding (e.g. a
// this, because RenderBoxToWidgetAdapter does it for us, but // straight rendering library FlutterBinding).
// it's good practice in case we happen to not have a WidgetFlutterBinding.ensureInitialized();
// RenderBoxToWidgetAdapter in our tree at startup, or in case we
// want a renderViewOverride.
WidgetFlutterBinding.initWidgetFlutterBinding();
RenderProxyBox proxy = new RenderProxyBox(); RenderProxyBox proxy = new RenderProxyBox();
new RenderBoxToWidgetAdapter(proxy, builder); // adds itself to proxy attachWidgetTreeToRenderTree(proxy);
RenderFlex flexRoot = new RenderFlex(direction: FlexDirection.vertical); RenderFlex flexRoot = new RenderFlex(direction: FlexDirection.vertical);
addFlexChildSolidColor(flexRoot, const ui.Color(0xFFFF00FF), flex: 1); addFlexChildSolidColor(flexRoot, const ui.Color(0xFFFF00FF), flex: 1);
......
...@@ -11,8 +11,6 @@ class WidgetFlutterBinding extends FlutterBinding { ...@@ -11,8 +11,6 @@ class WidgetFlutterBinding extends FlutterBinding {
WidgetFlutterBinding() { WidgetFlutterBinding() {
BuildableElement.scheduleBuildFor = scheduleBuildFor; BuildableElement.scheduleBuildFor = scheduleBuildFor;
_renderViewElement = new RenderObjectToWidgetElement<RenderBox>(describeApp(null));
_renderViewElement.mount(null, null);
} }
/// Ensures that there is a FlutterBinding object instantiated. /// Ensures that there is a FlutterBinding object instantiated.
...@@ -24,18 +22,6 @@ class WidgetFlutterBinding extends FlutterBinding { ...@@ -24,18 +22,6 @@ class WidgetFlutterBinding extends FlutterBinding {
static WidgetFlutterBinding get instance => FlutterBinding.instance; static WidgetFlutterBinding get instance => FlutterBinding.instance;
/// The [Element] that is at the root of the hierarchy (and which wraps the
/// [RenderView] object at the root of the rendering hierarchy).
Element get renderViewElement => _renderViewElement;
Element _renderViewElement;
RenderObjectToWidgetAdapter<RenderBox> describeApp(Widget app) {
return new RenderObjectToWidgetAdapter<RenderBox>(
container: instance.renderView,
child: app
);
}
void beginFrame(Duration timeStamp) { void beginFrame(Duration timeStamp) {
buildDirtyElements(); buildDirtyElements();
super.beginFrame(timeStamp); super.beginFrame(timeStamp);
...@@ -78,15 +64,22 @@ class WidgetFlutterBinding extends FlutterBinding { ...@@ -78,15 +64,22 @@ class WidgetFlutterBinding extends FlutterBinding {
}, building: true); }, building: true);
assert(_dirtyElements.isEmpty); assert(_dirtyElements.isEmpty);
} }
/// The [Element] that is at the root of the hierarchy (and which wraps the
/// [RenderView] object at the root of the rendering hierarchy).
Element get renderViewElement => _renderViewElement;
Element _renderViewElement;
void _runApp(Widget app) {
_renderViewElement = new RenderObjectToWidgetAdapter<RenderBox>(
container: renderView,
child: app
).attachToRenderTree(_renderViewElement);
}
} }
void runApp(Widget app) { void runApp(Widget app) {
WidgetFlutterBinding.ensureInitialized(); WidgetFlutterBinding.ensureInitialized();
BuildableElement.lockState(() { WidgetFlutterBinding.instance._runApp(app);
WidgetFlutterBinding.instance.renderViewElement.update(
WidgetFlutterBinding.instance.describeApp(app)
);
}, building: true);
} }
void debugDumpApp() { void debugDumpApp() {
...@@ -115,6 +108,18 @@ class RenderObjectToWidgetAdapter<T extends RenderObject> extends RenderObjectWi ...@@ -115,6 +108,18 @@ class RenderObjectToWidgetAdapter<T extends RenderObject> extends RenderObjectWi
RenderObjectWithChildMixin<T> createRenderObject() => container; RenderObjectWithChildMixin<T> createRenderObject() => container;
void updateRenderObject(RenderObject renderObject, RenderObjectWidget oldWidget) { } void updateRenderObject(RenderObject renderObject, RenderObjectWidget oldWidget) { }
RenderObjectToWidgetElement<T> attachToRenderTree([RenderObjectToWidgetElement<T> element]) {
BuildableElement.lockState(() {
if (element == null) {
element = createElement();
element.mount(null, null);
} else {
element.update(this);
}
}, building: true);
return element;
}
} }
/// This element class is the instantiation of a [RenderObjectToWidgetAdapter]. /// This element class is the instantiation of a [RenderObjectToWidgetAdapter].
......
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