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

Unified Diff: sky/sdk/lib/framework/widgets/drawer.dart

Issue 1177383006: Rename all the things (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: fix imports Created 5 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sky/sdk/lib/framework/widgets/checkbox.dart ('k') | sky/sdk/lib/framework/widgets/drawer_header.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/sdk/lib/framework/widgets/drawer.dart
diff --git a/sky/sdk/lib/framework/widgets/drawer.dart b/sky/sdk/lib/framework/widgets/drawer.dart
deleted file mode 100644
index 19faed8c010cd9f69a7d52cd41009602e06a6dd9..0000000000000000000000000000000000000000
--- a/sky/sdk/lib/framework/widgets/drawer.dart
+++ /dev/null
@@ -1,166 +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:math' as math;
-import 'dart:sky' as sky;
-
-import 'package:vector_math/vector_math.dart';
-
-import '../animation/animated_value.dart';
-import '../animation/curves.dart';
-import '../theme2/colors.dart';
-import '../theme2/shadows.dart';
-import 'animated_component.dart';
-import 'basic.dart';
-
-// TODO(eseidel): Draw width should vary based on device size:
-// http://www.google.com/design/spec/layout/structure.html#structure-side-nav
-
-// Mobile:
-// Width = Screen width − 56 dp
-// Maximum width: 320dp
-// Maximum width applies only when using a left nav. When using a right nav,
-// the panel can cover the full width of the screen.
-
-// Desktop/Tablet:
-// Maximum width for a left nav is 400dp.
-// The right nav can vary depending on content.
-
-const double _kWidth = 304.0;
-const double _kMinFlingVelocity = 0.4;
-const double _kBaseSettleDurationMS = 246.0;
-const double _kMaxSettleDurationMS = 600.0;
-const Curve _kAnimationCurve = parabolicRise;
-
-typedef void DrawerStatusChangeHandler (bool showing);
-
-class DrawerController {
-
- DrawerController(this.onStatusChange) {
- position = new AnimatedValue(-_kWidth, onChange: _checkValue);
- }
- final DrawerStatusChangeHandler onStatusChange;
- AnimatedValue position;
-
- bool _oldClosedState = true;
- void _checkValue() {
- var newClosedState = isClosed;
- if (onStatusChange != null && _oldClosedState != newClosedState) {
- onStatusChange(!newClosedState);
- _oldClosedState = newClosedState;
- }
- }
-
- bool get isClosed => position.value == -_kWidth;
- bool get _isMostlyClosed => position.value <= -_kWidth / 2;
- void toggle() => _isMostlyClosed ? _open() : _close();
-
- void handleMaskTap(_) => _close();
- void handlePointerDown(_) => position.stop();
-
- void handlePointerMove(sky.PointerEvent event) {
- if (position.isAnimating)
- return;
- position.value = math.min(0.0, math.max(position.value + event.dx, -_kWidth));
- }
-
- void handlePointerUp(_) {
- if (!position.isAnimating)
- _settle();
- }
-
- void handlePointerCancel(_) {
- if (!position.isAnimating)
- _settle();
- }
-
- void _open() => _animateToPosition(0.0);
-
- void _close() => _animateToPosition(-_kWidth);
-
- void _settle() => _isMostlyClosed ? _close() : _open();
-
- void _animateToPosition(double targetPosition) {
- double distance = (targetPosition - position.value).abs();
- if (distance != 0) {
- double targetDuration = distance / _kWidth * _kBaseSettleDurationMS;
- double duration = math.min(targetDuration, _kMaxSettleDurationMS);
- position.animateTo(targetPosition, duration, curve: _kAnimationCurve);
- }
- }
-
- void handleFlingStart(event) {
- double direction = event.velocityX.sign;
- double velocityX = event.velocityX.abs() / 1000;
- if (velocityX < _kMinFlingVelocity)
- return;
-
- double targetPosition = direction < 0.0 ? -_kWidth : 0.0;
- double distance = (targetPosition - position.value).abs();
- double duration = distance / velocityX;
-
- if (distance > 0)
- position.animateTo(targetPosition, duration, curve: linear);
- }
-
-}
-
-class Drawer extends AnimatedComponent {
-
- Drawer({
- Object key,
- this.controller,
- this.children,
- this.level: 0
- }) : super(key: key) {
- animate(controller.position, (double value) {
- _position = value;
- });
- }
-
- List<UINode> children;
- int level;
- DrawerController controller;
-
- void syncFields(Drawer source) {
- children = source.children;
- level = source.level;
- controller = source.controller;
- super.syncFields(source);
- }
-
- double _position;
-
- UINode build() {
- Matrix4 transform = new Matrix4.identity();
- transform.translate(_position);
-
- double scaler = _position / _kWidth + 1;
- Color maskColor = new Color.fromARGB((0x7F * scaler).floor(), 0, 0, 0);
-
- var mask = new EventListenerNode(
- new Container(decoration: new BoxDecoration(backgroundColor: maskColor)),
- onGestureTap: controller.handleMaskTap,
- onGestureFlingStart: controller.handleFlingStart
- );
-
- Container content = new Container(
- decoration: new BoxDecoration(
- backgroundColor: Grey[50],
- boxShadow: shadows[level]),
- width: _kWidth,
- transform: transform,
- child: new Block(children)
- );
-
- return new EventListenerNode(
- new Stack([ mask, content ]),
- onPointerDown: controller.handlePointerDown,
- onPointerMove: controller.handlePointerMove,
- onPointerUp: controller.handlePointerUp,
- onPointerCancel: controller.handlePointerCancel
- );
- }
-
-}
« no previous file with comments | « sky/sdk/lib/framework/widgets/checkbox.dart ('k') | sky/sdk/lib/framework/widgets/drawer_header.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698