diff --git a/examples/lib/solid_color_box.dart b/examples/lib/solid_color_box.dart index bd5426a6eeba9348ac7094ca62ef1a31b1c27cae..6c598e76926c9219da5c68176305de8e01d7d2e7 100644 --- a/examples/lib/solid_color_box.dart +++ b/examples/lib/solid_color_box.dart @@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:sky'; +import 'dart:sky' as sky; +import 'package:sky/framework/rendering/object.dart'; import 'package:sky/framework/rendering/box.dart'; class RenderSolidColorBox extends RenderDecoratedBox { @@ -41,10 +42,10 @@ class RenderSolidColorBox extends RenderDecoratedBox { size = constraints.constrain(desiredSize); } - void handlePointer(PointerEvent event) { + void handleEvent(sky.Event event, BoxHitTestEntry entry) { if (event.type == 'pointerdown') decoration = new BoxDecoration(backgroundColor: const Color(0xFFFF0000)); else if (event.type == 'pointerup') decoration = new BoxDecoration(backgroundColor: backgroundColor); } -} \ No newline at end of file +} diff --git a/examples/rendering/spinning_flex.dart b/examples/rendering/spinning_flex.dart new file mode 100644 index 0000000000000000000000000000000000000000..b25bae81ef8e85240e24516dea967fd957f23e8a --- /dev/null +++ b/examples/rendering/spinning_flex.dart @@ -0,0 +1,49 @@ +// 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 'dart:math' as math; +import 'package:vector_math/vector_math.dart'; +import 'package:sky/framework/app.dart'; +import 'package:sky/framework/rendering/box.dart'; +import 'package:sky/framework/rendering/flex.dart'; +import 'package:sky/framework/scheduler.dart'; +import '../lib/solid_color_box.dart'; + +AppView app; +double timeBase; +RenderTransform transformBox; + +void main() { + RenderFlex flexRoot = new RenderFlex(direction: FlexDirection.vertical); + + void addFlexChildSolidColor(RenderFlex parent, sky.Color backgroundColor, { int flex: 0 }) { + RenderSolidColorBox child = new RenderSolidColorBox(backgroundColor); + parent.add(child); + child.parentData.flex = flex; + } + + addFlexChildSolidColor(flexRoot, const sky.Color(0xFFFF00FF), flex: 1); + addFlexChildSolidColor(flexRoot, const sky.Color(0xFFFFFF00), flex: 2); + addFlexChildSolidColor(flexRoot, const sky.Color(0xFF00FFFF), flex: 1); + + transformBox = new RenderTransform(child: flexRoot, transform: new Matrix4.identity()); + + RenderPadding root = new RenderPadding(padding: new EdgeDims.all(20.0), child: transformBox); + + app = new AppView(root); + + addPersistentFrameCallback(rotate); +} + +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); +} diff --git a/sdk/lib/framework/rendering/box.dart b/sdk/lib/framework/rendering/box.dart index 6b5d0f0d419cbbfa67b664f69779734f7f36c86f..1a38695ccb6e6b44a0de759b37c9f0029fca347a 100644 --- a/sdk/lib/framework/rendering/box.dart +++ b/sdk/lib/framework/rendering/box.dart @@ -916,7 +916,7 @@ class RenderTransform extends RenderProxyBox { Matrix4 _transform; - void set transform (Matrix4 value) { + void set transform(Matrix4 value) { assert(value != null); if (_transform == value) return; @@ -924,6 +924,11 @@ class RenderTransform extends RenderProxyBox { markNeedsPaint(); } + void setIdentity() { + _transform.setIdentity(); + markNeedsPaint(); + } + void rotateX(double radians) { _transform.rotateX(radians); markNeedsPaint();