Index: sky/sdk/lib/framework/widgets/popup_menu.dart |
diff --git a/sky/sdk/lib/framework/widgets/popup_menu.dart b/sky/sdk/lib/framework/widgets/popup_menu.dart |
deleted file mode 100644 |
index caf0c8e2ffb45b478c6e948b3a8ff7b64f3cf1d5..0000000000000000000000000000000000000000 |
--- a/sky/sdk/lib/framework/widgets/popup_menu.dart |
+++ /dev/null |
@@ -1,118 +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:async'; |
-import 'dart:math' as math; |
-import 'dart:sky' as sky; |
- |
-import '../animation/animated_value.dart'; |
-import '../painting/box_painter.dart'; |
-import '../theme2/colors.dart'; |
-import '../theme2/shadows.dart'; |
-import 'animated_component.dart'; |
-import 'popup_menu_item.dart'; |
-import 'basic.dart'; |
- |
-const double _kMenuOpenDuration = 300.0; |
-const double _kMenuCloseDuration = 200.0; |
-const double _kMenuCloseDelay = 100.0; |
- |
-enum MenuState { hidden, opening, open, closing } |
- |
-class PopupMenuController { |
- AnimatedValue position = new AnimatedValue(0.0); |
- MenuState _state = MenuState.hidden; |
- MenuState get state => _state; |
- |
- bool get canReact => (_state == MenuState.opening) || (_state == MenuState.open); |
- |
- open() async { |
- if (_state != MenuState.hidden) |
- return; |
- _state = MenuState.opening; |
- if (await position.animateTo(1.0, _kMenuOpenDuration) == 1.0) |
- _state = MenuState.open; |
- } |
- |
- Future _closeState; |
- close() async { |
- var result = new Completer(); |
- _closeState = result.future; |
- if ((_state == MenuState.opening) || (_state == MenuState.open)) { |
- _state = MenuState.closing; |
- await position.animateTo(0.0, _kMenuCloseDuration, initialDelay: _kMenuCloseDelay); |
- _state = MenuState.hidden; |
- _closeState = null; |
- result.complete(); |
- return result.future; |
- } |
- assert(_closeState != null); |
- return _closeState; |
- } |
-} |
- |
-class PopupMenu extends AnimatedComponent { |
- |
- PopupMenu({ Object key, this.controller, this.items, this.level }) |
- : super(key: key) { |
- _painter = new BoxPainter(new BoxDecoration( |
- backgroundColor: Grey[50], |
- borderRadius: 2.0, |
- boxShadow: shadows[level])); |
- |
- animate(controller.position, (double value) { |
- _position = value; |
- }); |
- } |
- |
- PopupMenuController controller; |
- List<List<UINode>> items; |
- int level; |
- |
- void syncFields(PopupMenu source) { |
- controller = source.controller; |
- items = source.items; |
- level = source.level; |
- _painter = source._painter; |
- super.syncFields(source); |
- } |
- |
- double _position; |
- BoxPainter _painter; |
- |
- double _opacityFor(int i) { |
- if (_position == null || _position == 1.0) |
- return 1.0; |
- double unit = 1.0 / items.length; |
- double duration = 1.5 * unit; |
- double start = i * unit; |
- return math.max(0.0, math.min(1.0, (_position - start) / duration)); |
- } |
- |
- UINode build() { |
- int i = 0; |
- List<UINode> children = new List.from(items.map((List<UINode> item) { |
- double opacity = _opacityFor(i); |
- return new PopupMenuItem(key: i++, children: item, opacity: opacity); |
- })); |
- |
- return new Opacity( |
- opacity: math.min(1.0, _position * 3.0), |
- child: new ShrinkWrapWidth( |
- child: new CustomPaint( |
- callback: (sky.Canvas canvas, Size size) { |
- double width = math.min(size.width, size.width * (0.5 + _position * 2.0)); |
- double height = math.min(size.height, size.height * _position * 1.5); |
- _painter.paint(canvas, new Rect.fromLTRB(size.width - width, 0.0, width, height)); |
- }, |
- child: new Container( |
- padding: const EdgeDims.all(8.0), |
- child: new Block(children) |
- ) |
- ) |
- ) |
- ); |
- } |
- |
-} |