Index: sky/sdk/lib/framework/widgets/checkbox.dart |
diff --git a/sky/sdk/lib/framework/widgets/checkbox.dart b/sky/sdk/lib/framework/widgets/checkbox.dart |
deleted file mode 100644 |
index 4f8f99aaab3a5568b2461197622c2164c20f9381..0000000000000000000000000000000000000000 |
--- a/sky/sdk/lib/framework/widgets/checkbox.dart |
+++ /dev/null |
@@ -1,135 +0,0 @@ |
-// 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 'package:sky/framework/theme2/colors.dart' as colors; |
- |
-import '../animation/animated_value.dart'; |
-import '../animation/curves.dart'; |
-import '../rendering/box.dart'; |
-import 'animated_component.dart'; |
-import 'basic.dart'; |
- |
-typedef void ValueChanged(value); |
- |
-const double _kMidpoint = 0.5; |
-const double _kCheckDuration = 200.0; |
-const sky.Color _kUncheckedColor = const sky.Color(0x8A000000); |
-// TODO(jackson): This should change colors with the theme |
-sky.Color _kCheckedColor = colors.Purple[500]; |
-const double _kEdgeSize = 20.0; |
-const double _kEdgeRadius = 1.0; |
- |
-class Checkbox extends AnimatedComponent { |
- |
- Checkbox({ |
- Object key, |
- this.checked, |
- this.onChanged |
- }) : super(key: key) { |
- _checkedAnimation = new AnimatedValue(checked ? 1.0 : 0.0); |
- } |
- |
- bool checked; |
- AnimatedValue _checkedAnimation; |
- ValueChanged onChanged; |
- |
- void syncFields(Checkbox source) { |
- onChanged = source.onChanged; |
- if (checked != source.checked) { |
- checked = source.checked; |
- double targetValue = checked ? 1.0 : 0.0; |
- double difference = (_checkedAnimation.value - targetValue).abs(); |
- if (difference > 0) { |
- double duration = difference * _kCheckDuration; |
- _checkedAnimation.stop(); |
- Curve curve; |
- if (targetValue > _checkedAnimation.value) { |
- curve = easeIn; |
- } else { |
- curve = easeOut; |
- } |
- _checkedAnimation.animateTo(targetValue, duration, curve: curve); |
- } |
- } |
- super.syncFields(source); |
- } |
- |
- void _handleClick(sky.Event e) { |
- onChanged(!checked); |
- } |
- |
- UINode build() { |
- return new EventListenerNode( |
- new Container( |
- margin: const EdgeDims.symmetric(horizontal: 5.0), |
- width: _kEdgeSize + 2.0, |
- height: _kEdgeSize + 2.0, |
- child: new CustomPaint( |
- token: _checkedAnimation.value, |
- callback: (sky.Canvas canvas, Size size) { |
- // Choose a color between grey and the theme color |
- sky.Paint paint = new sky.Paint()..strokeWidth = 2.0 |
- ..color = _kUncheckedColor; |
- |
- // The rrect contracts slightly during the animation |
- double inset = 2.0 - (_checkedAnimation.value - _kMidpoint).abs() * 2.0; |
- sky.Rect rect = new sky.Rect.fromLTRB(inset, inset, _kEdgeSize - inset, _kEdgeSize - inset); |
- sky.RRect rrect = new sky.RRect()..setRectXY(rect, _kEdgeRadius, _kEdgeRadius); |
- |
- |
- // Outline of the empty rrect |
- paint.setStyle(sky.PaintingStyle.stroke); |
- canvas.drawRRect(rrect, paint); |
- |
- // Radial gradient that changes size |
- if (_checkedAnimation.value > 0) { |
- paint.setStyle(sky.PaintingStyle.fill); |
- paint.setShader( |
- new sky.Gradient.radial( |
- new Point(_kEdgeSize / 2.0, _kEdgeSize / 2.0), |
- _kEdgeSize * (_kMidpoint - _checkedAnimation.value) * 8.0, |
- [const sky.Color(0x00000000), _kUncheckedColor], |
- [0.0, 1.0] |
- ) |
- ); |
- canvas.drawRRect(rrect, paint); |
- } |
- |
- if (_checkedAnimation.value > _kMidpoint) { |
- double t = (_checkedAnimation.value - _kMidpoint) / (1.0 - _kMidpoint); |
- |
- // Solid filled rrect |
- paint.setStyle(sky.PaintingStyle.strokeAndFill); |
- paint.color = new Color.fromARGB((t * 255).floor(), |
- _kCheckedColor.red, |
- _kCheckedColor.green, |
- _kCheckedColor.blue); |
- canvas.drawRRect(rrect, paint); |
- |
- // White inner check |
- paint.color = const sky.Color(0xFFFFFFFF); |
- paint.setStyle(sky.PaintingStyle.stroke); |
- sky.Path path = new sky.Path(); |
- sky.Point start = new sky.Point(_kEdgeSize * 0.2, _kEdgeSize * 0.5); |
- sky.Point mid = new sky.Point(_kEdgeSize * 0.4, _kEdgeSize * 0.7); |
- sky.Point end = new sky.Point(_kEdgeSize * 0.8, _kEdgeSize * 0.3); |
- Point lerp(Point p1, Point p2, double t) |
- => new Point(p1.x * (1.0 - t) + p2.x * t, p1.y * (1.0 - t) + p2.y * t); |
- sky.Point drawStart = lerp(start, mid, 1.0 - t); |
- sky.Point drawEnd = lerp(mid, end, t); |
- path.moveTo(drawStart.x, drawStart.y); |
- path.lineTo(mid.x, mid.y); |
- path.lineTo(drawEnd.x, drawEnd.y); |
- canvas.drawPath(path, paint); |
- } |
- } |
- ) |
- ), |
- onGestureTap: _handleClick |
- ); |
- } |
- |
-} |