OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 import 'dart:math' as math; | 5 import 'dart:math' as math; |
6 import 'dart:sky' as sky; | 6 import 'dart:sky' as sky; |
7 | 7 |
8 import 'package:sky/rendering/box.dart'; | 8 import 'package:sky/rendering/box.dart'; |
9 import 'package:sky/rendering/object.dart'; | 9 import 'package:sky/rendering/object.dart'; |
10 import 'package:sky/rendering/sky_binding.dart'; | 10 import 'package:sky/rendering/sky_binding.dart'; |
11 | 11 |
12 const double kTwoPi = 2 * math.PI; | 12 const double kTwoPi = 2 * math.PI; |
13 | 13 |
14 class SectorConstraints { | 14 class SectorConstraints extends Constraints { |
15 const SectorConstraints({ | 15 const SectorConstraints({ |
16 this.minDeltaRadius: 0.0, | 16 this.minDeltaRadius: 0.0, |
17 this.maxDeltaRadius: double.INFINITY, | 17 this.maxDeltaRadius: double.INFINITY, |
18 this.minDeltaTheta: 0.0, | 18 this.minDeltaTheta: 0.0, |
19 this.maxDeltaTheta: kTwoPi | 19 this.maxDeltaTheta: kTwoPi |
20 }); | 20 }); |
21 | 21 |
22 const SectorConstraints.tight({ double deltaRadius: 0.0, double deltaTheta: 0.
0 }) | 22 const SectorConstraints.tight({ double deltaRadius: 0.0, double deltaTheta: 0.
0 }) |
23 : minDeltaRadius = deltaRadius, | 23 : minDeltaRadius = deltaRadius, |
24 maxDeltaRadius = deltaRadius, | 24 maxDeltaRadius = deltaRadius, |
25 minDeltaTheta = deltaTheta, | 25 minDeltaTheta = deltaTheta, |
26 maxDeltaTheta = deltaTheta; | 26 maxDeltaTheta = deltaTheta; |
27 | 27 |
28 final double minDeltaRadius; | 28 final double minDeltaRadius; |
29 final double maxDeltaRadius; | 29 final double maxDeltaRadius; |
30 final double minDeltaTheta; | 30 final double minDeltaTheta; |
31 final double maxDeltaTheta; | 31 final double maxDeltaTheta; |
32 | 32 |
33 double constrainDeltaRadius(double deltaRadius) { | 33 double constrainDeltaRadius(double deltaRadius) { |
34 return clamp(min: minDeltaRadius, max: maxDeltaRadius, value: deltaRadius); | 34 return clamp(min: minDeltaRadius, max: maxDeltaRadius, value: deltaRadius); |
35 } | 35 } |
36 | 36 |
37 double constrainDeltaTheta(double deltaTheta) { | 37 double constrainDeltaTheta(double deltaTheta) { |
38 return clamp(min: minDeltaTheta, max: maxDeltaTheta, value: deltaTheta); | 38 return clamp(min: minDeltaTheta, max: maxDeltaTheta, value: deltaTheta); |
39 } | 39 } |
| 40 |
| 41 bool get isTight => minDeltaTheta >= maxDeltaTheta && minDeltaTheta >= maxDelt
aTheta; |
40 } | 42 } |
41 | 43 |
42 class SectorDimensions { | 44 class SectorDimensions { |
43 const SectorDimensions({ this.deltaRadius: 0.0, this.deltaTheta: 0.0 }); | 45 const SectorDimensions({ this.deltaRadius: 0.0, this.deltaTheta: 0.0 }); |
44 | 46 |
45 factory SectorDimensions.withConstraints( | 47 factory SectorDimensions.withConstraints( |
46 SectorConstraints constraints, | 48 SectorConstraints constraints, |
47 { double deltaRadius: 0.0, double deltaTheta: 0.0 } | 49 { double deltaRadius: 0.0, double deltaTheta: 0.0 } |
48 ) { | 50 ) { |
49 return new SectorDimensions( | 51 return new SectorDimensions( |
(...skipping 15 matching lines...) Expand all Loading... |
65 | 67 |
66 void setParentData(RenderObject child) { | 68 void setParentData(RenderObject child) { |
67 if (child.parentData is! SectorParentData) | 69 if (child.parentData is! SectorParentData) |
68 child.parentData = new SectorParentData(); | 70 child.parentData = new SectorParentData(); |
69 } | 71 } |
70 | 72 |
71 SectorDimensions getIntrinsicDimensions(SectorConstraints constraints, double
radius) { | 73 SectorDimensions getIntrinsicDimensions(SectorConstraints constraints, double
radius) { |
72 return new SectorDimensions.withConstraints(constraints); | 74 return new SectorDimensions.withConstraints(constraints); |
73 } | 75 } |
74 | 76 |
75 SectorConstraints get constraints { SectorConstraints result = super.constrain
ts; return result; } | 77 SectorConstraints get constraints => super.constraints; |
76 void performResize() { | 78 void performResize() { |
77 // default behaviour for subclasses that have sizedByParent = true | 79 // default behaviour for subclasses that have sizedByParent = true |
78 deltaRadius = constraints.constrainDeltaRadius(0.0); | 80 deltaRadius = constraints.constrainDeltaRadius(0.0); |
79 deltaTheta = constraints.constrainDeltaTheta(0.0); | 81 deltaTheta = constraints.constrainDeltaTheta(0.0); |
80 } | 82 } |
81 void performLayout() { | 83 void performLayout() { |
82 // descendants have to either override performLayout() to set both | 84 // descendants have to either override performLayout() to set both |
83 // the dimensions and lay out children, or, set sizedByParent to | 85 // the dimensions and lay out children, or, set sizedByParent to |
84 // true so that performResize()'s logic above does its thing. | 86 // true so that performResize()'s logic above does its thing. |
85 assert(sizedByParent); | 87 assert(sizedByParent); |
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
518 stack.add(new RenderSolidColor(const Color(0xFFFFFF00), desiredDeltaRadius: 20
.0)); | 520 stack.add(new RenderSolidColor(const Color(0xFFFFFF00), desiredDeltaRadius: 20
.0)); |
519 stack.add(new RenderSolidColor(const Color(0xFFFF9000), desiredDeltaRadius: 20
.0)); | 521 stack.add(new RenderSolidColor(const Color(0xFFFF9000), desiredDeltaRadius: 20
.0)); |
520 stack.add(new RenderSolidColor(const Color(0xFF00FF00))); | 522 stack.add(new RenderSolidColor(const Color(0xFF00FF00))); |
521 rootCircle.add(stack); | 523 rootCircle.add(stack); |
522 return new RenderBoxToRenderSectorAdapter(innerRadius: 50.0, child: rootCircle
); | 524 return new RenderBoxToRenderSectorAdapter(innerRadius: 50.0, child: rootCircle
); |
523 } | 525 } |
524 | 526 |
525 void main() { | 527 void main() { |
526 new SkyBinding(root: buildSectorExample()); | 528 new SkyBinding(root: buildSectorExample()); |
527 } | 529 } |
OLD | NEW |