Chromium Code Reviews| Index: sky/examples/widgets/sector.dart |
| diff --git a/sky/examples/widgets/sector.dart b/sky/examples/widgets/sector.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..50ba93405171762e4a1926c1e32b9ab142a27e3d |
| --- /dev/null |
| +++ b/sky/examples/widgets/sector.dart |
| @@ -0,0 +1,145 @@ |
| +// 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:math' as math; |
| + |
| +import 'package:sky/rendering/box.dart'; |
| +import 'package:sky/rendering/flex.dart'; |
| +import 'package:sky/theme2/colors.dart'; |
| +import 'package:sky/theme2/edges.dart'; |
| +import 'package:sky/theme2/typography.dart'; |
| +import 'package:sky/widgets/basic.dart'; |
| +import 'package:sky/widgets/material.dart'; |
| +import 'package:sky/widgets/raised_button.dart'; |
| +import 'package:sky/widgets/scaffold.dart'; |
| +import 'package:sky/widgets/tool_bar.dart'; |
| +import 'package:sky/widgets/ui_node.dart'; |
| + |
| +import '../rendering/sector_layout.dart'; |
| + |
| +RenderBox initCircle() { |
| + return new RenderBoxToRenderSectorAdapter( |
| + innerRadius: 25.0, |
| + child: new RenderSectorRing(padding: 0.0) |
| + ); |
| +} |
| + |
| +class ContainerApp extends App { |
|
abarth-chromium
2015/06/16 02:32:34
s/ContainerApp/SectorApp/
|
| + |
| + RenderBoxToRenderSectorAdapter sectors = initCircle(); |
| + math.Random rand = new math.Random(); |
| + |
| + void addSector() { |
| + double deltaTheta; |
| + var ring = (sectors.child as RenderSectorRing); |
| + SectorDimensions currentSize = ring.getIntrinsicDimensions(const SectorConstraints(), ring.deltaRadius); |
| + if (currentSize.deltaTheta >= kTwoPi - (math.PI * 0.2 + 0.05)) |
| + deltaTheta = kTwoPi - currentSize.deltaTheta; |
| + else |
| + deltaTheta = math.PI * rand.nextDouble() / 5.0 + 0.05; |
| + Color color = new Color(((0xFF << 24) + rand.nextInt(0xFFFFFF)) | 0x808080); |
|
abarth-chromium
2015/06/16 02:32:34
I would have used | rather than +, but it's all th
|
| + ring.add(new RenderSolidColor(color, desiredDeltaTheta: deltaTheta)); |
| + updateEnabledState(); |
| + } |
| + |
| + void removeSector() { |
| + (sectors.child as RenderSectorRing).remove((sectors.child as RenderSectorRing).lastChild); |
| + updateEnabledState(); |
| + } |
| + |
| + static RenderBox initSector(Color color) { |
| + RenderSectorRing ring = new RenderSectorRing(padding: 1.0); |
| + ring.add(new RenderSolidColor(const Color(0xFF909090), desiredDeltaTheta: kTwoPi * 0.15)); |
| + ring.add(new RenderSolidColor(const Color(0xFF909090), desiredDeltaTheta: kTwoPi * 0.15)); |
| + ring.add(new RenderSolidColor(color, desiredDeltaTheta: kTwoPi * 0.2)); |
| + return new RenderBoxToRenderSectorAdapter( |
| + innerRadius: 5.0, |
| + child: ring |
| + ); |
| + } |
| + RenderBoxToRenderSectorAdapter sectorAddIcon = initSector(const Color(0xFF00DD00)); |
| + RenderBoxToRenderSectorAdapter sectorRemoveIcon = initSector(const Color(0xFFDD0000)); |
| + |
| + bool enabledAdd = true; |
| + bool enabledRemove = false; |
| + void updateEnabledState() { |
| + setState(() { |
| + var ring = (sectors.child as RenderSectorRing); |
| + SectorDimensions currentSize = ring.getIntrinsicDimensions(const SectorConstraints(), ring.deltaRadius); |
| + enabledAdd = currentSize.deltaTheta < kTwoPi; |
| + enabledRemove = ring.firstChild != null; |
| + }); |
| + } |
| + |
| + UINode build() { |
| + return new Scaffold( |
| + toolbar: new ToolBar( |
| + center: new Text('Sector Layout in a Widget Tree', style: white.title), |
| + backgroundColor: Blue[500]), |
| + body: new Material( |
| + edge: MaterialEdge.canvas, |
| + child: new Flex([ |
| + new Container( |
| + padding: new EdgeDims.symmetric(horizontal: 8.0, vertical: 25.0), |
| + child: new Flex([ |
| + new RaisedButton( |
| + key: 'add-button', |
| + enabled: enabledAdd, |
| + child: new ShrinkWrapWidth( |
| + child: new Flex([ |
| + new Container( |
| + padding: new EdgeDims.all(4.0), |
| + margin: new EdgeDims.only(right: 10.0), |
| + child: new UINodeToRenderBoxAdapter(sectorAddIcon) |
| + ), |
| + new Text('ADD SECTOR'), |
| + ]) |
| + ), |
| + onPressed: addSector |
| + ), |
| + new RaisedButton( |
| + key: 'remove-button', |
| + enabled: enabledRemove, |
| + child: new ShrinkWrapWidth( |
| + child: new Flex([ |
| + new Container( |
| + padding: new EdgeDims.all(4.0), |
| + margin: new EdgeDims.only(right: 10.0), |
| + child: new UINodeToRenderBoxAdapter(sectorRemoveIcon) |
| + ), |
| + new Text('REMOVE SECTOR'), |
| + ]) |
| + ), |
| + onPressed: removeSector |
| + ) |
| + ], |
| + justifyContent: FlexJustifyContent.spaceAround |
| + ) |
| + ), |
| + new FlexExpandingChild( |
| + new Container( |
| + margin: new EdgeDims.all(8.0), |
| + decoration: new BoxDecoration( |
| + border: new Border.all(new BorderSide(color: new Color(0xFF000000))) |
| + ), |
| + padding: new EdgeDims.all(8.0), |
| + child: new UINodeToRenderBoxAdapter(sectors) |
| + ) |
| + ), |
| + ], |
| + direction: FlexDirection.vertical, |
| + justifyContent: FlexJustifyContent.spaceBetween |
| + ) |
| + ) |
| + ); |
| + } |
| +} |
| + |
| +void main() { |
| + App app = new ContainerApp(); |
| + UINodeAppView.appView.onFrame = () { |
| + // uncomment this for debugging: |
| + // UINodeAppView.appView.debugDumpRenderTree(); |
| + }; |
| +} |