Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(84)

Side by Side Diff: sky/examples/widgets/sector.dart

Issue 1218593002: Move sky/examples to sky/sdk/lib/example, and code changes to support that change. Fixes T277. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 import 'dart:math' as math;
6
7 import 'package:sky/rendering/box.dart';
8 import 'package:sky/rendering/flex.dart';
9 import 'package:sky/rendering/sky_binding.dart';
10 import 'package:sky/theme/colors.dart' as colors;
11 import 'package:sky/theme/edges.dart';
12 import 'package:sky/theme/theme_data.dart';
13 import 'package:sky/theme/typography.dart' as typography;
14 import 'package:sky/widgets/basic.dart';
15 import 'package:sky/widgets/material.dart';
16 import 'package:sky/widgets/raised_button.dart';
17 import 'package:sky/widgets/scaffold.dart';
18 import 'package:sky/widgets/theme.dart';
19 import 'package:sky/widgets/tool_bar.dart';
20 import 'package:sky/widgets/widget.dart';
21
22 import '../rendering/sector_layout.dart';
23
24 RenderBox initCircle() {
25 return new RenderBoxToRenderSectorAdapter(
26 innerRadius: 25.0,
27 child: new RenderSectorRing(padding: 0.0)
28 );
29 }
30
31 class SectorApp extends App {
32
33 RenderBoxToRenderSectorAdapter sectors = initCircle();
34 math.Random rand = new math.Random(1);
35
36 void addSector() {
37 double deltaTheta;
38 var ring = (sectors.child as RenderSectorRing);
39 SectorDimensions currentSize = ring.getIntrinsicDimensions(const SectorConst raints(), ring.deltaRadius);
40 if (currentSize.deltaTheta >= kTwoPi - (math.PI * 0.2 + 0.05))
41 deltaTheta = kTwoPi - currentSize.deltaTheta;
42 else
43 deltaTheta = math.PI * rand.nextDouble() / 5.0 + 0.05;
44 Color color = new Color(((0xFF << 24) + rand.nextInt(0xFFFFFF)) | 0x808080);
45 ring.add(new RenderSolidColor(color, desiredDeltaTheta: deltaTheta));
46 updateEnabledState();
47 }
48
49 void removeSector() {
50 (sectors.child as RenderSectorRing).remove((sectors.child as RenderSectorRin g).lastChild);
51 updateEnabledState();
52 }
53
54 static RenderBox initSector(Color color) {
55 RenderSectorRing ring = new RenderSectorRing(padding: 1.0);
56 ring.add(new RenderSolidColor(const Color(0xFF909090), desiredDeltaTheta: kT woPi * 0.15));
57 ring.add(new RenderSolidColor(const Color(0xFF909090), desiredDeltaTheta: kT woPi * 0.15));
58 ring.add(new RenderSolidColor(color, desiredDeltaTheta: kTwoPi * 0.2));
59 return new RenderBoxToRenderSectorAdapter(
60 innerRadius: 5.0,
61 child: ring
62 );
63 }
64 RenderBoxToRenderSectorAdapter sectorAddIcon = initSector(const Color(0xFF00DD 00));
65 RenderBoxToRenderSectorAdapter sectorRemoveIcon = initSector(const Color(0xFFD D0000));
66
67 bool enabledAdd = true;
68 bool enabledRemove = false;
69 void updateEnabledState() {
70 setState(() {
71 var ring = (sectors.child as RenderSectorRing);
72 SectorDimensions currentSize = ring.getIntrinsicDimensions(const SectorCon straints(), ring.deltaRadius);
73 enabledAdd = currentSize.deltaTheta < kTwoPi;
74 enabledRemove = ring.firstChild != null;
75 });
76 }
77
78 Widget build() {
79 return new Theme(
80 data: new ThemeData.light(primary: colors.Blue, darkToolbar: true),
81 child: new Scaffold(
82 toolbar: new ToolBar(
83 center: new Text('Sector Layout in a Widget Tree')),
84 body: new Material(
85 edge: MaterialEdge.canvas,
86 child: new Flex([
87 new Container(
88 padding: new EdgeDims.symmetric(horizontal: 8.0, vertical: 25.0) ,
89 child: new Flex([
90 new RaisedButton(
91 enabled: enabledAdd,
92 child: new ShrinkWrapWidth(
93 child: new Flex([
94 new Container(
95 padding: new EdgeDims.all(4.0),
96 margin: new EdgeDims.only(right: 10.0),
97 child: new WidgetToRenderBoxAdapter(sectorAddIcon)
98 ),
99 new Text('ADD SECTOR'),
100 ])
101 ),
102 onPressed: addSector
103 ),
104 new RaisedButton(
105 enabled: enabledRemove,
106 child: new ShrinkWrapWidth(
107 child: new Flex([
108 new Container(
109 padding: new EdgeDims.all(4.0),
110 margin: new EdgeDims.only(right: 10.0),
111 child: new WidgetToRenderBoxAdapter(sectorRemoveIcon )
112 ),
113 new Text('REMOVE SECTOR'),
114 ])
115 ),
116 onPressed: removeSector
117 )
118 ],
119 justifyContent: FlexJustifyContent.spaceAround
120 )
121 ),
122 new Flexible(
123 child: new Container(
124 margin: new EdgeDims.all(8.0),
125 decoration: new BoxDecoration(
126 border: new Border.all(new BorderSide(color: new Color(0xFF0 00000)))
127 ),
128 padding: new EdgeDims.all(8.0),
129 child: new WidgetToRenderBoxAdapter(sectors)
130 )
131 ),
132 ],
133 direction: FlexDirection.vertical,
134 justifyContent: FlexJustifyContent.spaceBetween
135 )
136 )
137 )
138 );
139 }
140 }
141
142 void main() {
143 runApp(new SectorApp());
144 SkyBinding.instance.onFrame = () {
145 // uncomment this for debugging:
146 // SkyBinding.instance.debugDumpRenderTree();
147 };
148 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698