48 Commits

Author SHA1 Message Date
Alexandre Ardhuin
841d5d7bd5
prefer_const_declarations on local variables (#14358) 2018-02-01 07:51:26 +01:00
amirh
3d7a4eed44 Short circuit _checkUp if tap callbacks were triggered by resolve. (#12521) 2017-10-17 10:29:29 -07:00
Ian Hickson
953dabc70b Fix some typos (#12233) 2017-09-24 01:40:42 -07:00
xster
2447f91844 Pass on original pointer event timestamps to drag events (#11988)
* Record original pointer event timestamp

* review

* review

* review
2017-09-19 17:15:31 -07:00
Alexandre Ardhuin
bb4f4070f9 Prefer const constructors (#11853)
* upgrade to linter-0.1.35

* re-enable lint prefer_const_constructors

* address review comments
2017-08-31 08:55:21 +02:00
xster
ca80cdfc59 Accept down event in mono drag gesture velocity calculation (#11777) 2017-08-24 16:35:16 -07:00
xster
c9b0b3bb03 Fix iOS last up event velocity calculation - version 3 (#11571)
* Add synthesized property to pointer events

* test
2017-08-09 17:39:59 -07:00
Ian Hickson
00e135d879 Prevent event dispatch from happening during reassemble. (#11459)
It was previously possible for event dispatch to occurr during the
brief window where the tree had been marked dirty but before it had
been relaid out by reassemble, which would cause assertions to fire if
someone did a hot reload while touching the device.
2017-08-04 12:01:35 -07:00
Jacob Richman
93a98327a8 Add Diagnosticable base class and add documentation. (#11458)
Add Diagnosticable base class and documentation
2017-08-03 09:49:44 -07:00
Ian Hickson
87445e5913 Increase the touch slop. (#11419)
It was 8.0. It's now arbitrarily 18.0.

Changing this required adjusting some tests. Adjusting the tests
required debugging the tests. Debugging the tests required some tools
to help debugging gesture recognizers and gesture arenas, so I added
some. It also required updating some toString() methods which resulted
in some changes to the tree diagnostics logic.

Also I cleaned up some docs while I was at it.
2017-07-27 14:01:06 -07:00
Ian Hickson
f50fe13ff1 Fix flip-flop behaviour with two competing taps (#10151) 2017-05-19 09:25:55 -07:00
Ian Hickson
ce2c834f70 Adjust the tests to handle a higher-DPI test harness. (#10056)
Requires https://github.com/flutter/engine/pull/3688
2017-05-15 16:47:14 -07:00
Ian Hickson
f64bfba860 Tapping a ScrollView during overscroll got it stuck. (#9721)
Fixes https://github.com/flutter/flutter/issues/8476

More detailed list of changes in this patch:

* Replaced the didTouch special logic with more generic logic that
  uses Activities instead. Now instead when you tap down the
  Scrollable calls `hold()` which begins a HoldScrollActivity which is
  a hybrid of DragStartDetails and IdleScrollActivity and can be
  canceled. When you let go, it gets canceled and that goes ballistic.

* Make DragGestureRecognizer more aggressive about grabbing pointers,
  otherwise a second pointer in a situation with competing horizontal
  and vertical recognizers always gets taken by the other one.

* Fixed the _GestureSemantics widget to call the "down" callbacks so
  that it follows the same pattern as "real" interactions.

* Added tests for the above.

* Added a hashCode to ScrollActivity.toString (and subclasses).

* Added a toString to ScrollDragController, and include it in
  DragScrollActivity's toString.

* s/coorindator/coordinator/

* Add a comment in DragStartDetails to distinguish it from the
  otherwise identical DragDownDetails, so we're not tempted to merge
  them.
2017-05-02 16:31:11 -07:00
Ian Hickson
24b40d87d6 Make getVelocity never return null (#9583)
Fixes https://github.com/flutter/flutter/issues/8425
2017-04-25 12:23:43 -07:00
Ian Hickson
bf017b79b3 Move Point to Offset (#9277)
* Manually fix every use of Point.x and Point.y

Some of these were moved to dx/dy, but not all.

* Manually convert uses of the old gradient API

* Remove old reference to Point.

* Mechanical changes

I applied the following at the root of the Flutter repository:

git ls-files -z | xargs -0 sed -i 's/\bPoint[.]origin\b/Offset.zero/g'
git ls-files -z | xargs -0 sed -i 's/\bPoint[.]lerp\b/Offset.lerp/g'
git ls-files -z | xargs -0 sed -i 's/\bnew Point\b/new Offset/g'
git ls-files -z | xargs -0 sed -i 's/\bconst Point\b/const Offset/g'
git ls-files -z | xargs -0 sed -i 's/\bstatic Point /static Offset /g'
git ls-files -z | xargs -0 sed -i 's/\bfinal Point /final Offset /g'
git ls-files -z | xargs -0 sed -i 's/^\( *\)Point /\1Offset /g'
git ls-files -z | xargs -0 sed -i 's/ui[.]Point\b/ui.Offset/g'
git ls-files -z | xargs -0 sed -i 's/(Point\b/(Offset/g'
git ls-files -z | xargs -0 sed -i 's/\([[{,]\) Point\b/\1 Offset/g'
git ls-files -z | xargs -0 sed -i 's/@required Point\b/@required Offset/g'
git ls-files -z | xargs -0 sed -i 's/<Point>/<Offset>/g'
git ls-files -z | xargs -0 sed -i 's/[.]toOffset()//g'
git ls-files -z | xargs -0 sed -i 's/[.]toPoint()//g'
git ls-files -z | xargs -0 sed -i 's/\bshow Point, /show /g'
git ls-files -z | xargs -0 sed -i 's/\bshow Point;/show Offset;/g'

* Mechanical changes - dartdocs

I applied the following at the root of the Flutter repository:

git ls-files -z | xargs -0 sed -i 's/\ba \[Point\]/an [Offset]/g'
git ls-files -z | xargs -0 sed -i 's/\[Point\]/[Offset]/g'

* Further improvements and a test

* Fix minor errors from rebasing...

* Roll engine
2017-04-12 15:06:12 -07:00
Adam Barth
f9ae22677a Improve cooperation between scale and drag gestures (#9298)
Now the scale gesture will accept if its focal point moves more than the pan
slop. This change lets it compete with a drag gesture (e.g., a containing scrol
view) in the same way that the pan gesture does.

Fixes #8735
2017-04-07 17:00:32 -07:00
Alexandre Ardhuin
8bcf302e23 use conditional assignment (#9252) 2017-04-07 21:41:17 +02:00
Alexandre Ardhuin
2166ea5b7f apply partially the upcoming unnecessary_lambdas (#8810) 2017-03-15 23:09:58 +01:00
Chris Bracken
46291903e0 Declare locals final where not reassigned (tests) (#8566) 2017-03-03 17:43:22 -08:00
Hans Muller
60847a1ded Restore velocity tracker sample window duration (#7510) 2017-01-17 15:44:09 -08:00
Adam Barth
2b742289d4 Fix several minor bugs and add many tests (#7506)
* MultiTapGestureRecognizer previously would assert if there was no
   competition.
 * GestureArenaTeam would always select the first recongizer as the
   winner even if a later recognizer actually accepted the pointer
   sequence.
 * debugPrintStack would fail a type check if maxFrames was non-null.
 * FractionalOffset.lerp would throw a null-pointer exception if its
   second argument was null.

Also, add a number of tests for previously untested lines of code.
2017-01-17 11:00:10 -08:00
Adam Barth
5a2bf18488 Improve test coverage and fix bugs (#7410)
This patch improves test coverage for a number of files that had low
coverage. This patch also fixes a few minor bugs found by these tests.
2017-01-10 10:15:33 -08:00
Ian Hickson
11d1d54c8a Changes to the drag gesture detectors and the velocity tracker (#7363)
- more dartdocs for the drag typedefs

- more toStrings to aid debugging

- require the position for DragUpdateDetails since we were omitting it
  in some places

- add the primaryVelocity to DragEndDetails so that consumers don't
  have to themselves track the axis in question

- fix the velocity tracker so that it doesn't walk the null data.
  Previously, near time t=0 (which pretty much only matters in tests,
  but it does matter there) we would walk the velocity data and then
  also walk missing data, treating it as Point.zero with t=0.

- simplify some of the velocity tracker; e.g. instead of trying (and
  failing?) to clear the velocity tracker when the pointer stalls,
  just drop the data before a stall during the velocity estimation
  (where we redundantly had another bigger horizon anyway).
2017-01-05 16:19:14 -08:00
Alexandre Ardhuin
c8447c91a9 prefer_const_constructor in packages/flutter/test (#7181) 2016-12-09 15:20:27 -08:00
Adam Barth
a4a783b64f Add support for pointer hover (#6884) 2016-11-15 21:13:37 -08:00
Jason Simmons
b41645cc17 Catch and log any exceptions thrown by an app's gesture recognizer callbacks (#6542)
If a recognizer is interrupted by an exception from a callback, it could be
left in an inconsistent state and be unable to process future events
2016-10-28 14:37:17 -07:00
Adam Barth
034d2fcd5d Ensure delayed multidrag timer is stopped (#6340)
Previously we were relying on the gesture arena to call us back to
cancel our timer. However, in the case where we've already been
accepted, asking the gesture arena to reject us doesn't lead to a
callback and we fail to stop the timer (and hence trigger an assert).

Fixes #6156
2016-10-15 13:02:38 -07:00
Hans Muller
e2ff169d5b Have the scale gesture callback uses details objects (#6204) 2016-10-04 12:44:36 -07:00
Hans Muller
596637ade4 Added scale-to-zoom gesture support to the Gallery grid demo (#6185) 2016-10-03 16:08:15 -07:00
Adam Barth
c9eda86b0e Switch to PointerData API (#6131)
Now dart:ui does the decoding of the pointer data itself, which means we don't
need to do it in the framework.
2016-09-29 21:25:20 -07:00
James Robinson
a95c9fdb58 Isolate imports of generated Dart code from generated path (#5960)
This rewrites imports of various mojom.dart files from the Flutter
engine repo to instead import normal-looking dart files from the
(new) flutter_services package. This package handles exporting the
correct symbols from generated code wherever that may live.

Includes an engine roll to 3551e7a48e2e336777b15c7637af92fd7605b6c5
which contains the new flutter_services package.
2016-09-21 14:00:29 -07:00
Adam Barth
a60fefc131 Improve test coverage (#5473)
These tests should hit some previously untested lines.
2016-08-17 18:18:07 -07:00
Adam Barth
bb0c41f2a6 Improve test coverage for gestures.dart (#4773)
This patch adds tests for some code paths we weren't hitting before and removes
some dead code that couldn't be tested because it was unreachable.
2016-06-27 14:42:41 -07:00
Adam Barth
2af668f832 Change how navigator prevents redundant operations (#4769)
* Change how navigator prevents redundant operations

Instead of requiring transactions, we now cancel all active pointers that are
interacting with the navigator and absorb future pointers until we get a chance
to build. This approach isn't perfect (e.g., events that trigger off the
cancelled pointers could still interact with the navigator), but it should be
better than the current transaction-based approach.

Fixes #4716

* Remove openTransaction

* test

* fixup
2016-06-27 13:07:47 -07:00
Adam Barth
2d4acb8041 Convert drag gestures to use details objects (#4343)
Previously we supplied individual parameters to the various drag and pan
callbacks. However, that approach isn't extensible because each new
parameter is a breaking change to the API.

This patch makes a one-time breaking change to the API to provide a
"details" object that we can extend over time as we need to expose more
information. The first planned extension is adding enough information to
accurately produce an overscroll glow on Android.
2016-06-02 23:45:49 -07:00
Adam Barth
0c0a866c79 Add the ability to create global pointer routes (#4239)
We'll use this functionality to implement some subtle behaviors for tooltips.
2016-05-27 12:42:12 -07:00
Ian Hickson
3252701753 Make it possible to run tests live on a device (#3936)
This makes it possible to substitute 'flutter run' for 'flutter test'
and actually watch a test run on a device.

For any test that depends on flutter_test:

1. Remove any import of 'package:test/test.dart'.

2. Replace `testWidgets('...', (WidgetTester tester) {`
      with `testWidgets('...', (WidgetTester tester) async {`

3. Add an "await" in front of calls to any of the following:
    * tap()
    * tapAt()
    * fling()
    * flingFrom()
    * scroll()
    * scrollAt()
    * pump()
    * pumpWidget()

4. Replace any calls to `tester.flushMicrotasks()` with calls to
   `await tester.idle()`.

There's a guarding API that you can use, if you have particularly
complicated tests, to get better error messages. Search for
TestAsyncUtils.
2016-05-16 12:53:13 -07:00
Adam Barth
51b1550df7 Delay win-by-default in gesture arena (#3552)
Wait until the end of the microtask to tell gesture recognizers that
they've won in the gesture arena. This lets recognizers dispose reject
themselves at arbitrary times without triggering gestures in awkward
call stacks.

Fixes #3183
2016-04-26 14:52:31 -07:00
Ian Hickson
e968d91ca4 Rename binding abstract classes (#3482)
The old names were getting silly and started stepping on valuable namespace.

The new names are consistent and clear.
2016-04-21 17:18:46 -07:00
Ian Hickson
e41c1c0b06 Split services/ into services/ and foundation/ (#3350)
We're getting back to the point where we have a bunch of foundation APIs
and it's getting confusing having them mixed with services/.
2016-04-15 13:18:29 -07:00
Jason Simmons
0f70464e1d Treat pointer cancel events similarly to pointer up events (#3242) 2016-04-12 11:17:43 -07:00
Hixie
797e27edd3 Add @override annotations to flutter framework 2016-03-14 14:02:26 -07:00
Adam Barth
44c4e930d1 [rename fixit] GestureArena -> GestureArenaManager
Also, change the keys to be explicitly pointer ids.

Fixes #202
2016-03-12 11:13:02 -08:00
Hixie
c7339de6bc Enable always_declare_return_types lint
And fix a zillion omissions this uncovered.
2016-03-09 17:57:39 -08:00
Adam Barth
4b1a9ff14c Remove PointerRouter and GestureArena arguments
There's no reason to make clients supply a PointerRounter and a
GestureArena when constructing gesture recognizers. These objects are
statics and the gesture recognizers can just grab them directly.

Also, remove the callback constructor arguments. Almost no code used
them. Instead, people seem to prefer using the `..` operator to set
callbacks on the recognizers. Removing the arguments removes a bunch of
boilerplate.
2016-02-24 22:23:00 -08:00
Adam Barth
4fb47600e4 Add a Velocity class to be explicit about units
We were using an Offset, which represented pixels/second, but it wasn't
clear to clients whether that was pixels/ms. Now we use a Velocity class
that is explict about the units.

Fixes #1510
Fixes #785
2016-02-13 22:59:09 -08:00
Adam Barth
07a9cc758a DoubleTap gesture asserts when rejected
The pointer router was using an iteration pattern that always delivers
handleEvent calls even if you remove a route during the iteration.
That's awkward to program against and causes trouble for the double-tap
gesture.

This patch switches PointerRouter to using a re-entrant iteration
pattern that supports removing routes (but not adding routes) during the
iteration.
2016-01-10 23:12:37 -08:00
Ian Hickson
7151fdd054 Move flutter tests from packages/unit to packages/flutter/test 2015-12-16 08:00:57 -08:00