spinning_flex.dart 1.6 KB
Newer Older
1 2 3 4
// 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.

5
import 'dart:ui' as ui;
6

7
import 'package:flutter/rendering.dart';
8

9
import 'lib/solid_color_box.dart';
10

11
Duration timeBase;
12 13 14 15 16
RenderTransform transformBox;

void main() {
  RenderFlex flexRoot = new RenderFlex(direction: FlexDirection.vertical);

17
  void addFlexChildSolidColor(RenderFlex parent, ui.Color backgroundColor, { int flex: 0 }) {
18 19
    RenderSolidColorBox child = new RenderSolidColorBox(backgroundColor);
    parent.add(child);
20 21
    final FlexParentData childParentData = child.parentData;
    childParentData.flex = flex;
22 23
  }

24 25 26
  addFlexChildSolidColor(flexRoot, const ui.Color(0xFFFF00FF), flex: 1);
  addFlexChildSolidColor(flexRoot, const ui.Color(0xFFFFFF00), flex: 2);
  addFlexChildSolidColor(flexRoot, const ui.Color(0xFF00FFFF), flex: 1);
27 28 29 30 31

  transformBox = new RenderTransform(child: flexRoot, transform: new Matrix4.identity());

  RenderPadding root = new RenderPadding(padding: new EdgeDims.all(20.0), child: transformBox);

Ian Hickson's avatar
Ian Hickson committed
32 33
  new RenderingFlutterBinding(root: root)
    ..addPersistentFrameCallback(rotate);
34 35
}

36
void rotate(Duration timeStamp) {
37 38
  if (timeBase == null)
    timeBase = timeStamp;
39
  double delta = (timeStamp - timeBase).inMicroseconds.toDouble() / Duration.MICROSECONDS_PER_SECOND; // radians
40 41 42 43 44 45

  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);
}