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); |
- } |
-} |