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

Unified Diff: sky/examples/fn/widgets/fixedheightscrollable.dart

Issue 993033003: Move example fn widgets into sky/framework/components (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 9 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/examples/fn/widgets/drawerheader.dart ('k') | sky/examples/fn/widgets/floating_action_button.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/examples/fn/widgets/fixedheightscrollable.dart
diff --git a/sky/examples/fn/widgets/fixedheightscrollable.dart b/sky/examples/fn/widgets/fixedheightscrollable.dart
deleted file mode 100644
index 4fee244c178644947c790993f3d3b7428873b4ba..0000000000000000000000000000000000000000
--- a/sky/examples/fn/widgets/fixedheightscrollable.dart
+++ /dev/null
@@ -1,146 +0,0 @@
-part of widgets;
-
-abstract class FixedHeightScrollable extends Component {
-
- // TODO(rafaelw): This component really shouldn't have an opinion
- // about how it is sized. The owning component should decide whether
- // it's explicitly sized or flexible or whatever...
- static Style _style = new Style('''
- overflow: hidden;
- position: relative;
- flex: 1;
- will-change: transform;'''
- );
-
- static Style _scrollAreaStyle = new Style('''
- position:relative;
- will-change: transform;'''
- );
-
- double minOffset;
- double maxOffset;
-
- double _scrollOffset = 0.0;
- FlingCurve _flingCurve;
- int _flingAnimationId;
- double _height = 0.0;
- double _itemHeight;
-
- FixedHeightScrollable({
- Object key,
- this.minOffset,
- this.maxOffset
- }) : super(key: key) {}
-
- List<Node> buildItems(int start, int count);
-
- void didMount() {
- var root = getRoot();
- var item = root.firstChild.firstChild;
- sky.ClientRect scrollRect = root.getBoundingClientRect();
- sky.ClientRect itemRect = item.getBoundingClientRect();
- assert(scrollRect.height > 0);
- assert(itemRect.height > 0);
-
- setState(() {
- _height = scrollRect.height;
- _itemHeight = itemRect.height;
- });
- }
-
- Node build() {
- var itemNumber = 0;
- var drawCount = 1;
- var transformStyle = '';
-
- if (_height > 0.0) {
- drawCount = (_height / _itemHeight).round() + 1;
- double alignmentDelta = -_scrollOffset % _itemHeight;
- if (alignmentDelta != 0.0) {
- alignmentDelta -= _itemHeight;
- }
-
- double drawStart = _scrollOffset + alignmentDelta;
- itemNumber = (drawStart / _itemHeight).floor();
-
- transformStyle =
- 'transform: translateY(${(alignmentDelta).toStringAsFixed(2)}px)';
- }
-
- return new Container(
- style: _style,
- children: [
- new Container(
- style: _scrollAreaStyle,
- inlineStyle: transformStyle,
- children: buildItems(itemNumber, drawCount)
- )
- ]
- )
- ..events.listen('gestureflingstart', _handleFlingStart)
- ..events.listen('gestureflingcancel', _handleFlingCancel)
- ..events.listen('gesturescrollupdate', _handleScrollUpdate)
- ..events.listen('wheel', _handleWheel);
- }
-
- void didUnmount() {
- _stopFling();
- }
-
- bool _scrollBy(double scrollDelta) {
- var newScrollOffset = _scrollOffset + scrollDelta;
- if (minOffset != null && newScrollOffset < minOffset) {
- newScrollOffset = minOffset;
- } else if (maxOffset != null && newScrollOffset > maxOffset) {
- newScrollOffset = maxOffset;
- }
- if (newScrollOffset == _scrollOffset) {
- return false;
- }
-
- setState(() {
- _scrollOffset = newScrollOffset;
- });
- return true;
- }
-
- void _scheduleFlingUpdate() {
- _flingAnimationId = sky.window.requestAnimationFrame(_updateFling);
- }
-
- void _stopFling() {
- if (_flingAnimationId == null) {
- return;
- }
-
- sky.window.cancelAnimationFrame(_flingAnimationId);
- _flingCurve = null;
- _flingAnimationId = null;
- }
-
- void _updateFling(double timeStamp) {
- double scrollDelta = _flingCurve.update(timeStamp);
- if (!_scrollBy(scrollDelta))
- return _stopFling();
- _scheduleFlingUpdate();
- }
-
- void _handleScrollUpdate(sky.GestureEvent event) {
- _scrollBy(-event.dy);
- }
-
- void _handleFlingStart(sky.GestureEvent event) {
- setState(() {
- _flingCurve = new FlingCurve(-event.velocityY, event.timeStamp);
- _scheduleFlingUpdate();
- });
- }
-
- void _handleFlingCancel(sky.GestureEvent event) {
- _stopFling();
- }
-
- void _handleWheel(sky.WheelEvent event) {
- _scrollBy(-event.offsetY);
- }
-}
« no previous file with comments | « sky/examples/fn/widgets/drawerheader.dart ('k') | sky/examples/fn/widgets/floating_action_button.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698