Commit f4869c76 authored by Adam Barth's avatar Adam Barth

onScrollStart shouldn't have an offset

Instead, we pump a onScrollUpdate with the offset if there is an offset.
parent 06efe785
...@@ -14,7 +14,7 @@ enum ScrollState { ...@@ -14,7 +14,7 @@ enum ScrollState {
accepted accepted
} }
typedef void GestureScrollStartCallback(sky.Offset scrollDelta); typedef void GestureScrollStartCallback();
typedef void GestureScrollUpdateCallback(sky.Offset scrollDelta); typedef void GestureScrollUpdateCallback(sky.Offset scrollDelta);
typedef void GestureScrollEndCallback(); typedef void GestureScrollEndCallback();
...@@ -47,7 +47,8 @@ class ScrollGestureRecognizer extends GestureRecognizer { ...@@ -47,7 +47,8 @@ class ScrollGestureRecognizer extends GestureRecognizer {
if (event.type == 'pointermove') { if (event.type == 'pointermove') {
sky.Offset offset = _getScrollOffset(event); sky.Offset offset = _getScrollOffset(event);
if (state == ScrollState.accepted) { if (state == ScrollState.accepted) {
onScrollUpdate(offset); if (onScrollUpdate != null)
onScrollUpdate(offset);
} else { } else {
pendingScrollOffset += offset; pendingScrollOffset += offset;
if (pendingScrollOffset.distance > kTouchSlop) if (pendingScrollOffset.distance > kTouchSlop)
...@@ -62,14 +63,17 @@ class ScrollGestureRecognizer extends GestureRecognizer { ...@@ -62,14 +63,17 @@ class ScrollGestureRecognizer extends GestureRecognizer {
state = ScrollState.accepted; state = ScrollState.accepted;
sky.Offset offset = pendingScrollOffset; sky.Offset offset = pendingScrollOffset;
pendingScrollOffset = null; pendingScrollOffset = null;
onScrollStart(offset); if (onScrollStart != null)
onScrollStart();
if (offset != sky.Offset.zero && onScrollUpdate != null)
onScrollUpdate(offset);
} }
} }
void didStopTrackingLastPointer() { void didStopTrackingLastPointer() {
bool wasAccepted = (state == ScrollState.accepted); bool wasAccepted = (state == ScrollState.accepted);
state = ScrollState.ready; state = ScrollState.ready;
if (wasAccepted) if (wasAccepted && onScrollEnd != null)
onScrollEnd(); onScrollEnd();
} }
......
...@@ -84,8 +84,7 @@ abstract class Scrollable extends StatefulComponent { ...@@ -84,8 +84,7 @@ abstract class Scrollable extends StatefulComponent {
Widget build() { Widget build() {
return new GestureDetector( return new GestureDetector(
onScrollStart: _handleScrollOffset, onScrollUpdate: _handleScrollUpdate,
onScrollUpdate: _handleScrollOffset,
onScrollEnd: _maybeSettleScrollOffset, onScrollEnd: _maybeSettleScrollOffset,
child: new Listener( child: new Listener(
child: buildContent(), child: buildContent(),
...@@ -173,7 +172,7 @@ abstract class Scrollable extends StatefulComponent { ...@@ -173,7 +172,7 @@ abstract class Scrollable extends StatefulComponent {
return EventDisposition.processed; return EventDisposition.processed;
} }
void _handleScrollOffset(Offset offset) { void _handleScrollUpdate(Offset offset) {
scrollBy(scrollDirection == ScrollDirection.horizontal ? offset.dx : offset.dy); scrollBy(scrollDirection == ScrollDirection.horizontal ? offset.dx : offset.dy);
} }
......
...@@ -43,9 +43,9 @@ void main() { ...@@ -43,9 +43,9 @@ void main() {
PointerRouter router = new PointerRouter(); PointerRouter router = new PointerRouter();
ScrollGestureRecognizer scroll = new ScrollGestureRecognizer(router: router); ScrollGestureRecognizer scroll = new ScrollGestureRecognizer(router: router);
sky.Offset startOffset; bool didStartScroll = false;
scroll.onScrollStart = (sky.Offset offset) { scroll.onScrollStart = () {
startOffset = offset; didStartScroll = true;
}; };
sky.Offset updateOffset; sky.Offset updateOffset;
...@@ -59,29 +59,30 @@ void main() { ...@@ -59,29 +59,30 @@ void main() {
}; };
scroll.addPointer(down); scroll.addPointer(down);
expect(startOffset, isNull); expect(didStartScroll, isFalse);
expect(updateOffset, isNull); expect(updateOffset, isNull);
expect(didEndScroll, isFalse); expect(didEndScroll, isFalse);
router.handleEvent(down, null); router.handleEvent(down, null);
expect(startOffset, isNull); expect(didStartScroll, isFalse);
expect(updateOffset, isNull); expect(updateOffset, isNull);
expect(didEndScroll, isFalse); expect(didEndScroll, isFalse);
router.handleEvent(move1, null); router.handleEvent(move1, null);
expect(startOffset, new sky.Offset(10.0, -10.0)); expect(didStartScroll, isTrue);
startOffset = null; didStartScroll = false;
expect(updateOffset, isNull); expect(updateOffset, new sky.Offset(10.0, -10.0));
updateOffset = null;
expect(didEndScroll, isFalse); expect(didEndScroll, isFalse);
router.handleEvent(move2, null); router.handleEvent(move2, null);
expect(startOffset, isNull); expect(didStartScroll, isFalse);
expect(updateOffset, new sky.Offset(0.0, -5.0)); expect(updateOffset, new sky.Offset(0.0, -5.0));
updateOffset = null; updateOffset = null;
expect(didEndScroll, isFalse); expect(didEndScroll, isFalse);
router.handleEvent(up, null); router.handleEvent(up, null);
expect(startOffset, isNull); expect(didStartScroll, isFalse);
expect(updateOffset, isNull); expect(updateOffset, isNull);
expect(didEndScroll, isTrue); expect(didEndScroll, isTrue);
didEndScroll = false; didEndScroll = false;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment