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

Unified Diff: sky/sdk/lib/widgets/tabs.dart

Issue 1215713009: Scrollable TabBar Version 1 - support for flinging (Closed) Base URL: https://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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/sdk/lib/widgets/tabs.dart
diff --git a/sky/sdk/lib/widgets/tabs.dart b/sky/sdk/lib/widgets/tabs.dart
index 6123888511fc371a0b71dc20618501bd569dcbee..a19344b2a8e466168153e772380ed83d155e5813 100644
--- a/sky/sdk/lib/widgets/tabs.dart
+++ b/sky/sdk/lib/widgets/tabs.dart
@@ -4,6 +4,8 @@
import 'dart:math' as math;
+import 'package:sky/animation/generators.dart';
+import 'package:sky/animation/mechanics.dart';
import 'package:sky/animation/scroll_behavior.dart';
import 'package:sky/painting/text_style.dart';
import 'package:sky/rendering/box.dart';
@@ -29,6 +31,7 @@ const double _kRelativeMaxTabWidth = 56.0;
const EdgeDims _kTabLabelPadding = const EdgeDims.symmetric(horizontal: 12.0);
const TextStyle _kTabTextStyle = const TextStyle(textAlign: TextAlign.center);
const int _kTabIconSize = 24;
+const double _kTabBarScrollFriction = 0.005;
class TabBarParentData extends BoxParentData with
ContainerParentDataMixin<RenderBox> { }
@@ -342,6 +345,27 @@ class Tab extends Component {
}
}
+class TabBarScrollBehavior extends ScrollBehavior {
+ TabBarScrollBehavior({ this.maxScrollOffset: 0.0 });
+
+ double maxScrollOffset;
+
+ Simulation release(Particle particle) {
+ if (particle.velocity == 0.0 || particle.position < 0.0 || particle.position >= maxScrollOffset)
+ return null;
+
+ System system = new ParticleInBoxWithFriction(
+ particle: particle,
+ friction: _kTabBarScrollFriction,
+ box: new ClosedBox(min: 0.0, max: maxScrollOffset));
+ return new Simulation(system, terminationCondition: () => particle.position == 0.0);
+ }
+
+ double applyCurve(double scrollOffset, double scrollDelta) {
+ return (scrollOffset + scrollDelta).clamp(0.0, maxScrollOffset);
+ }
+}
+
class TabBar extends Scrollable {
TabBar({
String key,
@@ -366,8 +390,8 @@ class TabBar extends Scrollable {
scrollTo(0.0);
}
- ScrollBehavior createScrollBehavior() => new BoundedScrollBehavior();
- BoundedScrollBehavior get scrollBehavior => super.scrollBehavior;
+ ScrollBehavior createScrollBehavior() => new TabBarScrollBehavior();
+ TabBarScrollBehavior get scrollBehavior => super.scrollBehavior;
void _handleTap(int tabIndex) {
if (tabIndex != selectedIndex && onChanged != null)
@@ -393,7 +417,7 @@ class TabBar extends Scrollable {
setState(() {
_tabBarSize = tabBarSize;
_tabWidths = tabWidths;
- scrollBehavior.maxOffset =
+ scrollBehavior.maxScrollOffset =
_tabWidths.reduce((sum, width) => sum + width) - _tabBarSize.width;
});
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698