| Index: sky/examples/widgets/spinning_mixed.dart
|
| diff --git a/sky/examples/widgets/spinning_mixed.dart b/sky/examples/widgets/spinning_mixed.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..407fbde30e9cf1895c8b789f3eaa46ebcf217aec
|
| --- /dev/null
|
| +++ b/sky/examples/widgets/spinning_mixed.dart
|
| @@ -0,0 +1,91 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +import 'dart:sky' as sky;
|
| +
|
| +import 'package:sky/framework/rendering/box.dart';
|
| +import 'package:sky/framework/rendering/flex.dart';
|
| +import 'package:sky/framework/scheduler.dart';
|
| +import 'package:sky/framework/widgets/ui_node.dart';
|
| +import 'package:sky/framework/widgets/wrappers.dart';
|
| +import 'package:vector_math/vector_math.dart';
|
| +
|
| +import '../lib/solid_color_box.dart';
|
| +
|
| +// Solid colour, RenderObject version
|
| +void addFlexChildSolidColor(RenderFlex parent, sky.Color backgroundColor, { int flex: 0 }) {
|
| + RenderSolidColorBox child = new RenderSolidColorBox(backgroundColor);
|
| + parent.add(child);
|
| + child.parentData.flex = flex;
|
| +}
|
| +
|
| +// Solid colour, Widget version
|
| +class Rectangle extends Component {
|
| + Rectangle(this.color, { Object key }) : super(key: key);
|
| + final Color color;
|
| + UINode build() {
|
| + return new FlexExpandingChild(
|
| + new Container(
|
| + decoration: new BoxDecoration(backgroundColor: color)
|
| + )
|
| + );
|
| + }
|
| +}
|
| +
|
| +UINode builder() {
|
| + return new Flex([
|
| + new Rectangle(const Color(0xFF00FFFF), key: 'a'),
|
| + new Container(
|
| + padding: new EdgeDims.all(10.0),
|
| + margin: new EdgeDims.all(10.0),
|
| + decoration: new BoxDecoration(backgroundColor: const Color(0xFFCCCCCC)),
|
| + child: new Image(src: "https://www.dartlang.org/logos/dart-logo.png",
|
| + size: new Size(300.0, 300.0),
|
| + key: 1
|
| + )
|
| + ),
|
| + new Rectangle(const Color(0xFFFFFF00), key: 'b'),
|
| + ],
|
| + direction: FlexDirection.vertical,
|
| + justifyContent: FlexJustifyContent.spaceBetween
|
| + );
|
| +}
|
| +
|
| +double timeBase;
|
| +RenderTransform transformBox;
|
| +
|
| +void rotate(double timeStamp) {
|
| + if (timeBase == null)
|
| + timeBase = timeStamp;
|
| + double delta = (timeStamp - timeBase) / 1000; // radians
|
| +
|
| + transformBox.setIdentity();
|
| + transformBox.translate(transformBox.size.width / 2.0, transformBox.size.height / 2.0);
|
| + transformBox.rotateZ(delta);
|
| + transformBox.translate(-transformBox.size.width / 2.0, -transformBox.size.height / 2.0);
|
| +}
|
| +
|
| +void main() {
|
| + RenderFlex flexRoot = new RenderFlex(direction: FlexDirection.vertical);
|
| +
|
| + RenderProxyBox proxy = new RenderProxyBox();
|
| + new RenderObjectToUINodeAdapter(proxy, builder); // adds itself to proxy
|
| +
|
| + addFlexChildSolidColor(flexRoot, const sky.Color(0xFFFF00FF), flex: 1);
|
| + flexRoot.add(proxy);
|
| + addFlexChildSolidColor(flexRoot, const sky.Color(0xFF0000FF), flex: 1);
|
| +
|
| + transformBox = new RenderTransform(child: flexRoot, transform: new Matrix4.identity());
|
| + RenderPadding root = new RenderPadding(padding: new EdgeDims.all(20.0), child: transformBox);
|
| +
|
| + // Because we're going to use UINodes, we want to initialise its
|
| + // AppView, not use the default one. We don't really need to do
|
| + // this, because RenderObjectToUINodeAdapter does it for us, but
|
| + // it's good practice in case we happen to not have a
|
| + // RenderObjectToUINodeAdapter in our tree at startup.
|
| + UINodeAppView.initUINodeAppView();
|
| + UINodeAppView.appView.root = root;
|
| +
|
| + addPersistentFrameCallback(rotate);
|
| +}
|
|
|