diff --git a/examples/mine_digger/lib/main.dart b/examples/mine_digger/lib/main.dart index 6e04a8d8e2a97cf094a3d4d231f5c2b103b53ba0..6feb708cb25088a96b0ed312fccb50d80306444d 100644 --- a/examples/mine_digger/lib/main.dart +++ b/examples/mine_digger/lib/main.dart @@ -84,8 +84,8 @@ class MineDiggerState extends State<MineDigger> { } } - PointerEventListener _pointerDownHandlerFor(int posX, int posY) { - return (PointerInputEvent event) { + PointerDownEventListener _pointerDownHandlerFor(int posX, int posY) { + return (PointerDownEvent event) { if (event.buttons == 1) { probe(posX, posY); } else if (event.buttons == 2) { @@ -190,7 +190,7 @@ class MineDiggerState extends State<MineDigger> { ); } - void handleToolbarPointerDown(PointerInputEvent event) { + void handleToolbarPointerDown(PointerDownEvent event) { setState(() { resetGame(); }); diff --git a/examples/rendering/lib/sector_layout.dart b/examples/rendering/lib/sector_layout.dart index 326b60e6482aba277d6965dc12f48a8d6675465d..c0b3bf204a190c64928d9d244f96a74287fa81fa 100644 --- a/examples/rendering/lib/sector_layout.dart +++ b/examples/rendering/lib/sector_layout.dart @@ -518,10 +518,11 @@ class RenderSolidColor extends RenderDecoratedSector { deltaTheta = constraints.constrainDeltaTheta(desiredDeltaTheta); } - void handleEvent(InputEvent event, HitTestEntry entry) { - if (event.type == 'pointerdown') + void handleEvent(PointerEvent event, HitTestEntry entry) { + if (event is PointerDownEvent) { decoration = new BoxDecoration(backgroundColor: const Color(0xFFFF0000)); - else if (event.type == 'pointerup') + } else if (event is PointerUpEvent) { decoration = new BoxDecoration(backgroundColor: backgroundColor); + } } } diff --git a/examples/rendering/lib/solid_color_box.dart b/examples/rendering/lib/solid_color_box.dart index 31928d821cc6409ef71eee195199529b82179ba1..d4dbcf098eeafea359949f57a78809a56ebff902 100644 --- a/examples/rendering/lib/solid_color_box.dart +++ b/examples/rendering/lib/solid_color_box.dart @@ -41,10 +41,11 @@ class RenderSolidColorBox extends RenderDecoratedBox { size = constraints.constrain(desiredSize); } - void handleEvent(InputEvent event, BoxHitTestEntry entry) { - if (event.type == 'pointerdown') + void handleEvent(PointerEvent event, BoxHitTestEntry entry) { + if (event is PointerDownEvent) { decoration = new BoxDecoration(backgroundColor: const Color(0xFFFF0000)); - else if (event.type == 'pointerup') + } else if (event is PointerUpEvent) { decoration = new BoxDecoration(backgroundColor: backgroundColor); + } } } diff --git a/examples/rendering/touch_demo.dart b/examples/rendering/touch_demo.dart index 25e3d878a0b4c555f1843bb8cc44734b26a88b67..029d88dc1079cfd2783de356b4cae0d2d74a0a7d 100644 --- a/examples/rendering/touch_demo.dart +++ b/examples/rendering/touch_demo.dart @@ -23,8 +23,8 @@ class Dot { Dot({ Color color }) : _paint = new Paint()..color = color; - void update(PointerInputEvent event) { - position = new Point(event.x, event.y); + void update(PointerEvent event) { + position = event.position; radius = 5 + (95 * event.pressure); } @@ -36,25 +36,20 @@ class Dot { class RenderTouchDemo extends RenderBox { final Map<int, Dot> dots = <int, Dot>{}; - void handleEvent(InputEvent event, BoxHitTestEntry entry) { - if (event is PointerInputEvent) { - switch (event.type) { - case 'pointerdown': - Color color = kColors[event.pointer.remainder(kColors.length)]; - dots[event.pointer] = new Dot(color: color)..update(event); - break; - case 'pointerup': - dots.remove(event.pointer); - break; - case 'pointercancel': - dots.clear(); - break; - case 'pointermove': - dots[event.pointer].update(event); - break; - } - markNeedsPaint(); + void handleEvent(PointerEvent event, BoxHitTestEntry entry) { + if (event is PointerDownEvent) { + Color color = kColors[event.pointer.remainder(kColors.length)]; + dots[event.pointer] = new Dot(color: color)..update(event); + } else if (event is PointerUpEvent) { + dots.remove(event.pointer); + } else if (event is PointerCancelEvent) { + dots.clear(); + } else if (event is PointerMoveEvent) { + dots[event.pointer].update(event); + } else { + return; } + markNeedsPaint(); } void performLayout() { diff --git a/examples/widgets/overlay_geometry.dart b/examples/widgets/overlay_geometry.dart index d20386dbb4e02af826322207d2c6b34ba931f666..4bfb84813ae31b3d95bf0eddd4d111a077fe25e9 100644 --- a/examples/widgets/overlay_geometry.dart +++ b/examples/widgets/overlay_geometry.dart @@ -4,6 +4,7 @@ import 'dart:ui' as ui; +import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; @@ -121,9 +122,9 @@ class OverlayGeometryAppState extends State<OverlayGeometryApp> { }); } - void handlePointerDown(GlobalKey target, PointerInputEvent event) { + void handlePointerDown(GlobalKey target, PointerDownEvent event) { setState(() { - markers[MarkerType.touch] = new Point(event.x, event.y); + markers[MarkerType.touch] = event.position; final RenderBox box = target.currentContext.findRenderObject(); markers[MarkerType.topLeft] = box.localToGlobal(new Point(0.0, 0.0)); final Size size = box.size; @@ -139,7 +140,7 @@ class OverlayGeometryAppState extends State<OverlayGeometryApp> { CardModel cardModel = cardModels[index]; return new Listener( key: cardModel.key, - onPointerDown: (PointerInputEvent e) { return handlePointerDown(cardModel.targetKey, e); }, + onPointerDown: (PointerDownEvent event) { return handlePointerDown(cardModel.targetKey, event); }, child: new Card( key: cardModel.targetKey, color: cardModel.color, diff --git a/packages/flutter/lib/src/gestures/drag.dart b/packages/flutter/lib/src/gestures/drag.dart index 285d0680917e8df275e062968d3538f8c9350ee7..f47c7786abc7f2948427dfe8a33d2ab935884299 100644 --- a/packages/flutter/lib/src/gestures/drag.dart +++ b/packages/flutter/lib/src/gestures/drag.dart @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:ui' as ui; - import 'arena.dart'; import 'recognizer.dart'; import 'constants.dart'; @@ -16,21 +14,22 @@ enum DragState { accepted } -typedef void GestureDragStartCallback(ui.Point globalPosition); +typedef void GestureDragStartCallback(Point globalPosition); typedef void GestureDragUpdateCallback(double delta); -typedef void GestureDragEndCallback(ui.Offset velocity); +typedef void GestureDragEndCallback(Offset velocity); -typedef void GesturePanStartCallback(ui.Point globalPosition); -typedef void GesturePanUpdateCallback(ui.Offset delta); -typedef void GesturePanEndCallback(ui.Offset velocity); +typedef void GesturePanStartCallback(Point globalPosition); +typedef void GesturePanUpdateCallback(Offset delta); +typedef void GesturePanEndCallback(Offset velocity); typedef void _GesturePolymorphicUpdateCallback<T>(T delta); -bool _isFlingGesture(GestureVelocity velocity) { - double velocitySquared = velocity.x * velocity.x + velocity.y * velocity.y; - return velocity.isValid && - velocitySquared > kMinFlingVelocity * kMinFlingVelocity && - velocitySquared < kMaxFlingVelocity * kMaxFlingVelocity; +bool _isFlingGesture(Offset velocity) { + if (velocity == null) + return false; + double velocitySquared = velocity.dx * velocity.dx + velocity.dy * velocity.dy; + return velocitySquared > kMinFlingVelocity * kMinFlingVelocity + && velocitySquared < kMaxFlingVelocity * kMaxFlingVelocity; } abstract class _DragGestureRecognizer<T extends dynamic> extends OneSequenceGestureRecognizer { @@ -42,16 +41,16 @@ abstract class _DragGestureRecognizer<T extends dynamic> extends OneSequenceGest GestureDragEndCallback onEnd; DragState _state = DragState.ready; - ui.Point _initialPosition; + Point _initialPosition; T _pendingDragDelta; T get _initialPendingDragDelta; - T _getDragDelta(PointerInputEvent event); + T _getDragDelta(PointerEvent event); bool get _hasSufficientPendingDragDeltaToAccept; Map<int, VelocityTracker> _velocityTrackers = new Map<int, VelocityTracker>(); - void addPointer(PointerInputEvent event) { + void addPointer(PointerEvent event) { startTrackingPointer(event.pointer); _velocityTrackers[event.pointer] = new VelocityTracker(); if (_state == DragState.ready) { @@ -61,12 +60,12 @@ abstract class _DragGestureRecognizer<T extends dynamic> extends OneSequenceGest } } - void handleEvent(PointerInputEvent event) { + void handleEvent(PointerEvent event) { assert(_state != DragState.ready); - if (event.type == 'pointermove') { + if (event is PointerMoveEvent) { VelocityTracker tracker = _velocityTrackers[event.pointer]; assert(tracker != null); - tracker.addPosition(event.timeStamp, event.x, event.y); + tracker.addPosition(event.timeStamp, event.position); T delta = _getDragDelta(event); if (_state == DragState.accepted) { if (onUpdate != null) @@ -104,11 +103,10 @@ abstract class _DragGestureRecognizer<T extends dynamic> extends OneSequenceGest VelocityTracker tracker = _velocityTrackers[pointer]; assert(tracker != null); - GestureVelocity gestureVelocity = tracker.getVelocity(); - ui.Offset velocity = ui.Offset.zero; - if (_isFlingGesture(gestureVelocity)) - velocity = new ui.Offset(gestureVelocity.x, gestureVelocity.y); - onEnd(velocity); + Offset velocity = tracker.getVelocity(); + if (velocity != null && _isFlingGesture(velocity)) + onEnd(velocity); + onEnd(Offset.zero); } _velocityTrackers.clear(); } @@ -128,7 +126,7 @@ class VerticalDragGestureRecognizer extends _DragGestureRecognizer<double> { }) : super(router: router, onStart: onStart, onUpdate: onUpdate, onEnd: onEnd); double get _initialPendingDragDelta => 0.0; - double _getDragDelta(PointerInputEvent event) => event.dy; + double _getDragDelta(PointerEvent event) => event.delta.dy; bool get _hasSufficientPendingDragDeltaToAccept => _pendingDragDelta.abs() > kTouchSlop; } @@ -141,11 +139,11 @@ class HorizontalDragGestureRecognizer extends _DragGestureRecognizer<double> { }) : super(router: router, onStart: onStart, onUpdate: onUpdate, onEnd: onEnd); double get _initialPendingDragDelta => 0.0; - double _getDragDelta(PointerInputEvent event) => event.dx; + double _getDragDelta(PointerEvent event) => event.delta.dx; bool get _hasSufficientPendingDragDeltaToAccept => _pendingDragDelta.abs() > kTouchSlop; } -class PanGestureRecognizer extends _DragGestureRecognizer<ui.Offset> { +class PanGestureRecognizer extends _DragGestureRecognizer<Offset> { PanGestureRecognizer({ PointerRouter router, GesturePanStartCallback onStart, @@ -153,8 +151,8 @@ class PanGestureRecognizer extends _DragGestureRecognizer<ui.Offset> { GesturePanEndCallback onEnd }) : super(router: router, onStart: onStart, onUpdate: onUpdate, onEnd: onEnd); - ui.Offset get _initialPendingDragDelta => ui.Offset.zero; - ui.Offset _getDragDelta(PointerInputEvent event) => new ui.Offset(event.dx, event.dy); + Offset get _initialPendingDragDelta => Offset.zero; + Offset _getDragDelta(PointerEvent event) => event.delta; bool get _hasSufficientPendingDragDeltaToAccept { return _pendingDragDelta.distance > kPanSlop; } diff --git a/packages/flutter/lib/src/gestures/events.dart b/packages/flutter/lib/src/gestures/events.dart index a49119ff83c92fdc10c6dd1e9425ce6c12da6200..d101139f74eeb05a6f1efdeb842222ec81d8a91e 100644 --- a/packages/flutter/lib/src/gestures/events.dart +++ b/packages/flutter/lib/src/gestures/events.dart @@ -2,38 +2,37 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:ui' as ui; +import 'dart:ui' show Point, Offset; -export 'dart:ui' show Point; +export 'dart:ui' show Point, Offset; -/// Base class for input events. -class InputEvent { - const InputEvent({ this.type, this.timeStamp: const Duration() }); - final String type; - final Duration timeStamp; -} +enum PointerDeviceKind { touch, stylus, invertedStylus, mouse } -/// Input event representing a touch or button. -class PointerInputEvent extends InputEvent { +const int primaryMouseButton = 0x01; +const int secondaryMouseButton = 0x02; +const int primaryStylusButton = 0x02; +const int middleMouseButton = 0x04; +const int secondaryStylusButton = 0x04; +const int backMouseButton = 0x08; +const int forwardMouseButton = 0x10; +int nthMouseButton(int number) => primaryMouseButton << (number - 1); +int nthStylusButton(int number) => primaryStylusButton << (number - 1); - const PointerInputEvent({ - String type, - Duration timeStamp: const Duration(), +/// Base class for touch, stylus, or mouse events. +abstract class PointerEvent { + const PointerEvent({ + this.timeStamp: Duration.ZERO, this.pointer: 0, - this.kind, - this.x: 0.0, - this.y: 0.0, - this.dx: 0.0, - this.dy: 0.0, + this.kind: PointerDeviceKind.touch, + this.position: Point.origin, + this.delta: Offset.zero, this.buttons: 0, this.down: false, - this.primary: false, this.obscured: false, - this.pressure: 0.0, - this.pressureMin: 0.0, - this.pressureMax: 0.0, + this.pressure: 1.0, + this.pressureMin: 1.0, + this.pressureMax: 1.0, this.distance: 0.0, - this.distanceMin: 0.0, this.distanceMax: 0.0, this.radiusMajor: 0.0, this.radiusMinor: 0.0, @@ -41,58 +40,357 @@ class PointerInputEvent extends InputEvent { this.radiusMax: 0.0, this.orientation: 0.0, this.tilt: 0.0 - }) : super(type: type, timeStamp: timeStamp); + }); + /// Time of event dispatch, relative to an arbitrary timeline. + final Duration timeStamp; + + /// Unique identifier for the pointer, not reused. final int pointer; - final String kind; - final double x; - final double y; - final double dx; - final double dy; + + /// The kind of input device for which the event was generated. + final PointerDeviceKind kind; + + /// Coordinate of the position of the pointer, in logical pixels in the global + /// coordinate space. + final Point position; + + /// Distance in logical pixels that the pointer moved since the last + /// PointerMoveEvent. Always 0.0 for down, up, and cancel events. + final Offset delta; + + /// Bit field using the *Button constants (primaryMouseButton, + /// secondaryStylusButton, etc). For example, if this has the value 6 and the + /// [kind] is [PointerDeviceKind.invertedStylus], then this indicates an + /// upside-down stylus with both its primary and secondary buttons pressed. final int buttons; + + // Set if the pointer is currently down. For touch and stylus pointers, this + // means the object (finger, pen) is in contact with the input surface. For + // mice, it means a button is pressed. final bool down; - final bool primary; + + // Set if an application from a different security domain is in any way + // obscuring this application's window. (Aspirational; not currently + // implemented.) final bool obscured; + + /// The pressure of the touch as a number ranging from 0.0, indicating a touch + /// with no discernible pressure, to 1.0, indicating a touch with "normal" + /// pressure, and possibly beyond, indicating a stronger touch. For devices + /// that do not detect pressure (e.g. mice), returns 1.0. final double pressure; + + /// The minimum value that [pressure] can return for this pointer. For devices + /// that do not detect pressure (e.g. mice), returns 1.0. This will always be + /// a number less than or equal to 1.0. final double pressureMin; + + /// The maximum value that [pressure] can return for this pointer. For devices + /// that do not detect pressure (e.g. mice), returns 1.0. This will always be + /// a greater than or equal to 1.0. final double pressureMax; + + /// The distance of the detected object from the input surface (e.g. the + /// distance of a stylus or finger from a touch screen), in arbitrary units on + /// an arbitrary (not necessarily linear) scale. If the pointer is down, this + /// is 0.0 by definition. final double distance; - final double distanceMin; + + /// The minimum value that a distance can return for this pointer (always 0.0). + final double distanceMin = 0.0; + + /// The maximum value that a distance can return for this pointer. If this + /// input device cannot detect "hover touch" input events, then this will be + /// 0.0. final double distanceMax; + + /// The radius of the contact ellipse along the major axis, in logical pixels. final double radiusMajor; + + /// The radius of the contact ellipse along the minor axis, in logical pixels. final double radiusMinor; + + /// The minimum value that could be reported for radiusMajor and radiusMinor + /// for this pointer, in logical pixels. final double radiusMin; + + /// The minimum value that could be reported for radiusMajor and radiusMinor + /// for this pointer, in logical pixels. final double radiusMax; + + /// For PointerDeviceKind.touch events: + /// + /// The angle of the contact ellipse, in radius in the range: + /// + /// -pi/2 < orientation <= pi/2 + /// + /// ...giving the angle of the major axis of the ellipse with the y-axis + /// (negative angles indicating an orientation along the top-left / + /// bottom-right diagonal, positive angles indicating an orientation along the + /// top-right / bottom-left diagonal, and zero indicating an orientation + /// parallel with the y-axis). + /// + /// For PointerDeviceKind.stylus and PointerDeviceKind.invertedStylus events: + /// + /// The angle of the stylus, in radians in the range: + /// + /// -pi < orientation <= pi + /// + /// ...giving the angle of the axis of the stylus projected onto the input + /// surface, relative to the positive y-axis of that surface (thus 0.0 + /// indicates the stylus, if projected onto that surface, would go from the + /// contact point vertically up in the positive y-axis direction, pi would + /// indicate that the stylus would go down in the negative y-axis direction; + /// pi/4 would indicate that the stylus goes up and to the right, -pi/2 would + /// indicate that the stylus goes to the left, etc). final double orientation; - final double tilt; - ui.Point get position => new ui.Point(x, y); + /// For PointerDeviceKind.stylus and PointerDeviceKind.invertedStylus events: + /// + /// The angle of the stylus, in radians in the range: + /// + /// 0 <= tilt <= pi/2 + /// + /// ...giving the angle of the axis of the stylus, relative to the axis + /// perpendicular to the input surface (thus 0.0 indicates the stylus is + /// orthogonal to the plane of the input surface, while pi/2 indicates that + /// the stylus is flat on that surface). + final double tilt; - String toString() => 'PointerInputEvent(x: $x, y:$y)'; + String toString() => '$runtimeType($position)'; String toStringFull() { - return "PointerInputEvent(" + - "pointer: $pointer, " + - "kind: $kind, " + - "x: $x, " + - "y: $y, " + - "dx: $dx, " + - "dy: $dy, " + - "buttons: $buttons, " + - "down: $down, " + - "primary: $primary, " + - "obscured: $obscured, " + - "pressure: $pressure, " + - "pressureMin: $pressureMin, " + - "pressureMax: $pressureMax, " + - "distance: $distance, " + - "distanceMin: $distanceMin, " + - "distanceMax: $distanceMax, " + - "radiusMajor: $radiusMajor, " + - "radiusMinor: $radiusMinor, " + - "radiusMin: $radiusMin, " + - "radiusMax: $radiusMax, " + - "orientation: $orientation, " + - "tilt: $tilt)"; + return '$runtimeType(' + 'timeStamp: $timeStamp, ' + 'pointer: $pointer, ' + 'kind: $kind, ' + 'position: $position, ' + 'delta: $delta, ' + 'buttons: $buttons, ' + 'down: $down, ' + 'obscured: $obscured, ' + 'pressure: $pressure, ' + 'pressureMin: $pressureMin, ' + 'pressureMax: $pressureMax, ' + 'distance: $distance, ' + 'distanceMin: $distanceMin, ' + 'distanceMax: $distanceMax, ' + 'radiusMajor: $radiusMajor, ' + 'radiusMinor: $radiusMinor, ' + 'radiusMin: $radiusMin, ' + 'radiusMax: $radiusMax, ' + 'orientation: $orientation, ' + 'tilt: $tilt' + ')'; } } + +class PointerAddedEvent extends PointerEvent { + const PointerAddedEvent({ + Duration timeStamp: Duration.ZERO, + int pointer: 0, + PointerDeviceKind kind: PointerDeviceKind.touch, + Point position: Point.origin, + bool obscured: false, + double pressureMin: 0.0, + double pressureMax: 0.0, + double distance: 0.0, + double distanceMax: 0.0, + double radiusMin: 0.0, + double radiusMax: 0.0, + double orientation: 0.0, + double tilt: 0.0 + }) : super( + timeStamp: timeStamp, + pointer: pointer, + kind: kind, + position: position, + obscured: obscured, + pressureMin: pressureMin, + pressureMax: pressureMax, + distance: distance, + distanceMax: distanceMax, + radiusMin: radiusMin, + radiusMax: radiusMax, + orientation: orientation, + tilt: tilt + ); +} + +class PointerRemovedEvent extends PointerEvent { + const PointerRemovedEvent({ + Duration timeStamp: Duration.ZERO, + int pointer: 0, + PointerDeviceKind kind: PointerDeviceKind.touch, + bool obscured: false, + double pressureMin: 0.0, + double pressureMax: 0.0, + double distanceMax: 0.0, + double radiusMin: 0.0, + double radiusMax: 0.0 + }) : super( + timeStamp: timeStamp, + pointer: pointer, + kind: kind, + position: null, + obscured: obscured, + pressureMin: pressureMin, + pressureMax: pressureMax, + distanceMax: distanceMax, + radiusMin: radiusMin, + radiusMax: radiusMax + ); +} + +class PointerDownEvent extends PointerEvent { + const PointerDownEvent({ + Duration timeStamp: Duration.ZERO, + int pointer: 0, + PointerDeviceKind kind: PointerDeviceKind.touch, + Point position: Point.origin, + int buttons: 0, + bool obscured: false, + double pressure: 0.0, + double pressureMin: 0.0, + double pressureMax: 0.0, + double distanceMax: 0.0, + double radiusMajor: 0.0, + double radiusMinor: 0.0, + double radiusMin: 0.0, + double radiusMax: 0.0, + double orientation: 0.0, + double tilt: 0.0 + }) : super( + timeStamp: timeStamp, + pointer: pointer, + kind: kind, + position: position, + buttons: buttons, + down: true, + obscured: obscured, + pressure: pressure, + pressureMin: pressureMin, + pressureMax: pressureMax, + distance: 0.0, + distanceMax: distanceMax, + radiusMajor: radiusMajor, + radiusMinor: radiusMinor, + radiusMin: radiusMin, + radiusMax: radiusMax, + orientation: orientation, + tilt: tilt + ); +} + +class PointerMoveEvent extends PointerEvent { + const PointerMoveEvent({ + Duration timeStamp: Duration.ZERO, + int pointer: 0, + PointerDeviceKind kind: PointerDeviceKind.touch, + Point position: Point.origin, + Offset delta: Offset.zero, + int buttons: 0, + bool down: false, + bool obscured: false, + double pressure: 0.0, + double pressureMin: 0.0, + double pressureMax: 0.0, + double distance: 0.0, + double distanceMax: 0.0, + double radiusMajor: 0.0, + double radiusMinor: 0.0, + double radiusMin: 0.0, + double radiusMax: 0.0, + double orientation: 0.0, + double tilt: 0.0 + }) : super( + timeStamp: timeStamp, + pointer: pointer, + kind: kind, + position: position, + delta: delta, + buttons: buttons, + down: down, + obscured: obscured, + pressure: pressure, + pressureMin: pressureMin, + pressureMax: pressureMax, + distance: distance, + distanceMax: distanceMax, + radiusMajor: radiusMajor, + radiusMinor: radiusMinor, + radiusMin: radiusMin, + radiusMax: radiusMax, + orientation: orientation, + tilt: tilt + ); +} + +class PointerUpEvent extends PointerEvent { + const PointerUpEvent({ + Duration timeStamp: Duration.ZERO, + int pointer: 0, + PointerDeviceKind kind: PointerDeviceKind.touch, + Point position: Point.origin, + int buttons: 0, + bool obscured: false, + double pressureMin: 0.0, + double pressureMax: 0.0, + double distance: 0.0, + double distanceMax: 0.0, + double radiusMin: 0.0, + double radiusMax: 0.0, + double orientation: 0.0, + double tilt: 0.0 + }) : super( + timeStamp: timeStamp, + pointer: pointer, + kind: kind, + position: position, + buttons: buttons, + obscured: obscured, + pressureMin: pressureMin, + pressureMax: pressureMax, + distance: distance, + distanceMax: distanceMax, + radiusMin: radiusMin, + radiusMax: radiusMax, + orientation: orientation, + tilt: tilt + ); +} + +class PointerCancelEvent extends PointerEvent { + const PointerCancelEvent({ + Duration timeStamp: Duration.ZERO, + int pointer: 0, + PointerDeviceKind kind: PointerDeviceKind.touch, + Point position: Point.origin, + int buttons: 0, + bool obscured: false, + double pressureMin: 0.0, + double pressureMax: 0.0, + double distance: 0.0, + double distanceMax: 0.0, + double radiusMin: 0.0, + double radiusMax: 0.0, + double orientation: 0.0, + double tilt: 0.0 + }) : super( + timeStamp: timeStamp, + pointer: pointer, + kind: kind, + position: position, + buttons: buttons, + obscured: obscured, + pressureMin: pressureMin, + pressureMax: pressureMax, + distance: distance, + distanceMax: distanceMax, + radiusMin: radiusMin, + radiusMax: radiusMax, + orientation: orientation, + tilt: tilt + ); +} diff --git a/packages/flutter/lib/src/gestures/long_press.dart b/packages/flutter/lib/src/gestures/long_press.dart index 07b16e69701829868cfd3d88577eac5197e5452f..4832e6d8f1f261e8e884a31f72fc39ae3be1f295 100644 --- a/packages/flutter/lib/src/gestures/long_press.dart +++ b/packages/flutter/lib/src/gestures/long_press.dart @@ -18,11 +18,12 @@ class LongPressGestureRecognizer extends PrimaryPointerGestureRecognizer { void didExceedDeadline() { resolve(GestureDisposition.accepted); - onLongPress(); + if (onLongPress != null) + onLongPress(); } - void handlePrimaryPointer(PointerInputEvent event) { - if (event.type == 'pointerup') + void handlePrimaryPointer(PointerEvent event) { + if (event is PointerUpEvent) resolve(GestureDisposition.rejected); } } diff --git a/packages/flutter/lib/src/gestures/lsq_solver.dart b/packages/flutter/lib/src/gestures/lsq_solver.dart index 6aa73d4bfc8f292f9dfdc31645c2e507fb3a6f7a..f60ec5d5f6da71b19338cee5565c76fb2232def5 100644 --- a/packages/flutter/lib/src/gestures/lsq_solver.dart +++ b/packages/flutter/lib/src/gestures/lsq_solver.dart @@ -15,16 +15,22 @@ class _Vector { _Vector.fromVOL(List<double> values, int offset, int length) : _offset = offset, _length = length, _elements = values; + final int _offset; + int get length => _length; + final int _length; + + final List<double> _elements; - operator [](int i) => _elements[i + _offset]; - operator []=(int i, double value) => _elements[i + _offset] = value; + double operator [](int i) => _elements[i + _offset]; + void operator []=(int i, double value) { + _elements[i + _offset] = value; + } - operator *(_Vector a) { + double operator *(_Vector a) { double result = 0.0; - for (int i = 0; i < _length; i++) { + for (int i = 0; i < _length; i += 1) result += this[i] * a[i]; - } return result; } @@ -39,10 +45,6 @@ class _Vector { } return result; } - - final int _offset; - final int _length; - final List<double> _elements; } class _Matrix { @@ -51,6 +53,10 @@ class _Matrix { _columns = cols, _elements = new Float64List(rows * cols); + final int _rows; + final int _columns; + final List<double> _elements; + double get(int row, int col) => _elements[row * _columns + col]; void set(int row, int col, double value) { _elements[row * _columns + col] = value; @@ -75,10 +81,6 @@ class _Matrix { } return result; } - - final int _rows; - final int _columns; - final List<double> _elements; } class PolynomialFit { @@ -110,11 +112,10 @@ class LeastSquaresSolver { // Expand the X vector to a matrix A, pre-multiplied by the weights. _Matrix a = new _Matrix(n, m); - for (int h = 0; h < m; h++) { + for (int h = 0; h < m; h += 1) { a.set(0, h, w[h]); - for (int i = 1; i < n; i++) { + for (int i = 1; i < n; i += 1) a.set(i, h, a.get(i - 1, h) * x[h]); - } } // Apply the Gram-Schmidt process to A to obtain its QR decomposition. @@ -123,15 +124,13 @@ class LeastSquaresSolver { _Matrix q = new _Matrix(n, m); // Upper triangular matrix, row-major order. _Matrix r = new _Matrix(n, n); - for (int j = 0; j < n; j++) { - for (int h = 0; h < m; h++) { + for (int j = 0; j < n; j += 1) { + for (int h = 0; h < m; h += 1) q.set(j, h, a.get(j, h)); - } - for (int i = 0; i < j; i++) { + for (int i = 0; i < j; i += 1) { double dot = q.getRow(j) * q.getRow(i); - for (int h = 0; h < m; h++) { + for (int h = 0; h < m; h += 1) q.set(j, h, q.get(j, h) - dot * q.get(i, h)); - } } double norm = q.getRow(j).norm(); @@ -141,56 +140,50 @@ class LeastSquaresSolver { } double inverseNorm = 1.0 / norm; - for (int h = 0; h < m; h++) { + for (int h = 0; h < m; h += 1) q.set(j, h, q.get(j, h) * inverseNorm); - } - for (int i = 0; i < n; i++) { + for (int i = 0; i < n; i += 1) r.set(j, i, i < j ? 0.0 : q.getRow(j) * a.getRow(i)); - } } // Solve R B = Qt W Y to find B. This is easy because R is upper triangular. // We just work from bottom-right to top-left calculating B's coefficients. _Vector wy = new _Vector(m); - for (int h = 0; h < m; h++) { + for (int h = 0; h < m; h += 1) wy[h] = y[h] * w[h]; - } - for (int i = n; i-- != 0;) { + for (int i = n - 1; i >= 0; i -= 1) { result.coefficients[i] = q.getRow(i) * wy; - for (int j = n - 1; j > i; j--) { + for (int j = n - 1; j > i; j -= 1) result.coefficients[i] -= r.get(i, j) * result.coefficients[j]; - } result.coefficients[i] /= r.get(i, i); } // Calculate the coefficient of determination (confidence) as: - // 1 - (sumSquaredError / sumSquaredTotal) - // where sumSquaredError is the residual sum of squares (variance of the + // 1 - (sumSquaredError / sumSquaredTotal) + // ...where sumSquaredError is the residual sum of squares (variance of the // error), and sumSquaredTotal is the total sum of squares (variance of the // data) where each has been weighted. double yMean = 0.0; - for (int h = 0; h < m; h++) { + for (int h = 0; h < m; h += 1) yMean += y[h]; - } yMean /= m; double sumSquaredError = 0.0; double sumSquaredTotal = 0.0; - for (int h = 0; h < m; h++) { - double err = y[h] - result.coefficients[0]; + for (int h = 0; h < m; h += 1) { double term = 1.0; - for (int i = 1; i < n; i++) { + double err = y[h] - result.coefficients[0]; + for (int i = 1; i < n; i += 1) { term *= x[h]; err -= term * result.coefficients[i]; } sumSquaredError += w[h] * w[h] * err * err; - double v = y[h] - yMean; + final double v = y[h] - yMean; sumSquaredTotal += w[h] * w[h] * v * v; } - result.confidence = sumSquaredTotal > 0.000001 ? - 1.0 - (sumSquaredError / sumSquaredTotal) : - 1.0; + result.confidence = sumSquaredTotal <= 0.000001 ? 1.0 : + 1.0 - (sumSquaredError / sumSquaredTotal); return result; } diff --git a/packages/flutter/lib/src/gestures/multitap.dart b/packages/flutter/lib/src/gestures/multitap.dart index ed9fdd137459735fffa4488dce92c5e6ea660cbb..282ffbd63b0792ad1c50e8e56841edebe27d9255 100644 --- a/packages/flutter/lib/src/gestures/multitap.dart +++ b/packages/flutter/lib/src/gestures/multitap.dart @@ -22,11 +22,9 @@ typedef void GestureMultiTapCancelCallback(int pointer); /// larger gesture. class _TapTracker { - _TapTracker({ PointerInputEvent event, this.entry }) + _TapTracker({ PointerDownEvent event, this.entry }) : pointer = event.pointer, - _initialPosition = event.position { - assert(event.type == 'pointerdown'); - } + _initialPosition = event.position; final int pointer; final GestureArenaEntry entry; @@ -48,7 +46,7 @@ class _TapTracker { } } - bool isWithinTolerance(PointerInputEvent event, double tolerance) { + bool isWithinTolerance(PointerEvent event, double tolerance) { Offset offset = event.position - _initialPosition; return offset.distance <= tolerance; } @@ -92,7 +90,7 @@ class DoubleTapGestureRecognizer extends GestureRecognizer { _TapTracker _firstTap; final Map<int, _TapTracker> _trackers = new Map<int, _TapTracker>(); - void addPointer(PointerInputEvent event) { + void addPointer(PointerEvent event) { // Ignore out-of-bounds second taps if (_firstTap != null && !_firstTap.isWithinTolerance(event, kDoubleTapSlop)) @@ -106,23 +104,19 @@ class DoubleTapGestureRecognizer extends GestureRecognizer { tracker.startTrackingPointer(_router, handleEvent); } - void handleEvent(PointerInputEvent event) { + void handleEvent(PointerEvent event) { _TapTracker tracker = _trackers[event.pointer]; assert(tracker != null); - switch (event.type) { - case 'pointerup': - if (_firstTap == null) - _registerFirstTap(tracker); - else - _registerSecondTap(tracker); - break; - case 'pointermove': - if (!tracker.isWithinTolerance(event, kDoubleTapTouchSlop)) - _reject(tracker); - break; - case 'pointercancel': + if (event is PointerUpEvent) { + if (_firstTap == null) + _registerFirstTap(tracker); + else + _registerSecondTap(tracker); + } else if (event is PointerMoveEvent) { + if (!tracker.isWithinTolerance(event, kDoubleTapTouchSlop)) _reject(tracker); - break; + } else if (event is PointerCancelEvent) { + _reject(tracker); } } @@ -228,7 +222,7 @@ class _TapGesture extends _TapTracker { _TapGesture({ MultiTapGestureRecognizer gestureRecognizer, - PointerInputEvent event, + PointerEvent event, Duration longTapDelay }) : gestureRecognizer = gestureRecognizer, _lastPosition = event.position, @@ -250,16 +244,16 @@ class _TapGesture extends _TapTracker { Point _lastPosition; Point _finalPosition; - void handleEvent(PointerInputEvent event) { + void handleEvent(PointerEvent event) { assert(event.pointer == pointer); - if (event.type == 'pointermove') { + if (event is PointerMoveEvent) { if (!isWithinTolerance(event, kTouchSlop)) cancel(); else _lastPosition = event.position; - } else if (event.type == 'pointercancel') { + } else if (event is PointerCancelEvent) { cancel(); - } else if (event.type == 'pointerup') { + } else if (event is PointerUpEvent) { stopTrackingPointer(gestureRecognizer.router, handleEvent); _finalPosition = event.position; _check(); @@ -326,7 +320,7 @@ class MultiTapGestureRecognizer extends GestureRecognizer { final Map<int, _TapGesture> _gestureMap = new Map<int, _TapGesture>(); - void addPointer(PointerInputEvent event) { + void addPointer(PointerEvent event) { assert(!_gestureMap.containsKey(event.pointer)); _gestureMap[event.pointer] = new _TapGesture( gestureRecognizer: this, diff --git a/packages/flutter/lib/src/gestures/pointer_router.dart b/packages/flutter/lib/src/gestures/pointer_router.dart index 4e8ab17d8275afe4965f6afa2a4ef6e2b35ccd49..23da474cf2b99debe9b6eeb2a7d68bd1fabae54b 100644 --- a/packages/flutter/lib/src/gestures/pointer_router.dart +++ b/packages/flutter/lib/src/gestures/pointer_router.dart @@ -4,16 +4,16 @@ import 'events.dart'; -/// A callback that receives a [PointerInputEvent] -typedef void PointerRoute(PointerInputEvent event); +/// A callback that receives a [PointerEvent] +typedef void PointerRoute(PointerEvent event); -/// A routing table for [PointerInputEvent] events. +/// A routing table for [PointerEvent] events. class PointerRouter { final Map<int, List<PointerRoute>> _routeMap = new Map<int, List<PointerRoute>>(); - /// Adds a route to the routing table + /// Adds a route to the routing table. /// - /// Whenever this object routes a [PointerInputEvent] corresponding to + /// Whenever this object routes a [PointerEvent] corresponding to /// pointer, call route. void addRoute(int pointer, PointerRoute route) { List<PointerRoute> routes = _routeMap.putIfAbsent(pointer, () => new List<PointerRoute>()); @@ -21,9 +21,9 @@ class PointerRouter { routes.add(route); } - /// Removes a route from the routing table + /// Removes a route from the routing table. /// - /// No longer call route when routing a [PointerInputEvent] corresponding to + /// No longer call route when routing a [PointerEvent] corresponding to /// pointer. Requires that this route was previously added to the router. void removeRoute(int pointer, PointerRoute route) { assert(_routeMap.containsKey(pointer)); @@ -37,7 +37,7 @@ class PointerRouter { /// Call the routes registed for this pointer event. /// /// Calls the routes in the order in which they were added to the route. - void route(PointerInputEvent event) { + void route(PointerEvent event) { List<PointerRoute> routes = _routeMap[event.pointer]; if (routes == null) return; diff --git a/packages/flutter/lib/src/gestures/recognizer.dart b/packages/flutter/lib/src/gestures/recognizer.dart index bfa1c6fb518619b449c8a49666f9891a25a6dd87..28893fa414ee14d0f915d1bc20368af03e507a4c 100644 --- a/packages/flutter/lib/src/gestures/recognizer.dart +++ b/packages/flutter/lib/src/gestures/recognizer.dart @@ -18,7 +18,7 @@ abstract class GestureRecognizer extends GestureArenaMember { /// considered for this gesture. (It's the GestureRecognizer's responsibility /// to then add itself to the global pointer router to receive subsequent /// events for this pointer.) - void addPointer(PointerInputEvent event); + void addPointer(PointerDownEvent event); /// Release any resources used by the object. Called when the object is no /// longer needed (e.g. a gesture recogniser is being unregistered from a @@ -34,10 +34,10 @@ abstract class OneSequenceGestureRecognizer extends GestureRecognizer { PointerRouter _router; - final List<GestureArenaEntry> _entries = new List<GestureArenaEntry>(); + final List<GestureArenaEntry> _entries = <GestureArenaEntry>[]; final Set<int> _trackedPointers = new Set<int>(); - void handleEvent(PointerInputEvent event); + void handleEvent(PointerEvent event); void acceptGesture(int pointer) { } void rejectGesture(int pointer) { } void didStopTrackingLastPointer(int pointer); @@ -71,8 +71,8 @@ abstract class OneSequenceGestureRecognizer extends GestureRecognizer { didStopTrackingLastPointer(pointer); } - void stopTrackingIfPointerNoLongerDown(PointerInputEvent event) { - if (event.type == 'pointerup' || event.type == 'pointercancel') + void stopTrackingIfPointerNoLongerDown(PointerEvent event) { + if (event is PointerUpEvent || event is PointerCancelEvent) stopTrackingPointer(event.pointer); } @@ -95,7 +95,7 @@ abstract class PrimaryPointerGestureRecognizer extends OneSequenceGestureRecogni Point initialPosition; Timer _timer; - void addPointer(PointerInputEvent event) { + void addPointer(PointerDownEvent event) { startTrackingPointer(event.pointer); if (state == GestureRecognizerState.ready) { state = GestureRecognizerState.possible; @@ -106,11 +106,11 @@ abstract class PrimaryPointerGestureRecognizer extends OneSequenceGestureRecogni } } - void handleEvent(PointerInputEvent event) { + void handleEvent(PointerEvent event) { assert(state != GestureRecognizerState.ready); if (state == GestureRecognizerState.possible && event.pointer == primaryPointer) { // TODO(abarth): Maybe factor the slop handling out into a separate class? - if (event.type == 'pointermove' && _getDistance(event) > kTouchSlop) { + if (event is PointerMoveEvent && _getDistance(event) > kTouchSlop) { resolve(GestureDisposition.rejected); stopTrackingPointer(primaryPointer); } else { @@ -121,7 +121,7 @@ abstract class PrimaryPointerGestureRecognizer extends OneSequenceGestureRecogni } /// Override to provide behavior for the primary pointer when the gesture is still possible. - void handlePrimaryPointer(PointerInputEvent event); + void handlePrimaryPointer(PointerEvent event); /// Override to be notified with [deadline] is exceeded. /// @@ -154,7 +154,7 @@ abstract class PrimaryPointerGestureRecognizer extends OneSequenceGestureRecogni } } - double _getDistance(PointerInputEvent event) { + double _getDistance(PointerEvent event) { Offset offset = event.position - initialPosition; return offset.distance; } diff --git a/packages/flutter/lib/src/gestures/scale.dart b/packages/flutter/lib/src/gestures/scale.dart index f79629d78edbbb45e915331a7712980db5277a51..45b96b8285a0c3d1405cb8c50f51c0552cdc0e30 100644 --- a/packages/flutter/lib/src/gestures/scale.dart +++ b/packages/flutter/lib/src/gestures/scale.dart @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:ui' as ui; - import 'arena.dart'; import 'recognizer.dart'; import 'constants.dart'; @@ -16,8 +14,8 @@ enum ScaleState { started } -typedef void GestureScaleStartCallback(ui.Point focalPoint); -typedef void GestureScaleUpdateCallback(double scale, ui.Point focalPoint); +typedef void GestureScaleStartCallback(Point focalPoint); +typedef void GestureScaleUpdateCallback(double scale, Point focalPoint); typedef void GestureScaleEndCallback(); class ScaleGestureRecognizer extends OneSequenceGestureRecognizer { @@ -32,35 +30,31 @@ class ScaleGestureRecognizer extends OneSequenceGestureRecognizer { double _initialSpan; double _currentSpan; - Map<int, ui.Point> _pointerLocations; + Map<int, Point> _pointerLocations; double get _scaleFactor => _initialSpan > 0.0 ? _currentSpan / _initialSpan : 1.0; - void addPointer(PointerInputEvent event) { + void addPointer(PointerEvent event) { startTrackingPointer(event.pointer); if (_state == ScaleState.ready) { _state = ScaleState.possible; _initialSpan = 0.0; _currentSpan = 0.0; - _pointerLocations = new Map<int, ui.Point>(); + _pointerLocations = new Map<int, Point>(); } } - void handleEvent(PointerInputEvent event) { + void handleEvent(PointerEvent event) { assert(_state != ScaleState.ready); bool configChanged = false; - switch(event.type) { - case 'pointerup': - configChanged = true; - _pointerLocations.remove(event.pointer); - break; - case 'pointerdown': - configChanged = true; - _pointerLocations[event.pointer] = new ui.Point(event.x, event.y); - break; - case 'pointermove': - _pointerLocations[event.pointer] = new ui.Point(event.x, event.y); - break; + if (event is PointerMoveEvent) { + _pointerLocations[event.pointer] = event.position; + } else if (event is PointerDownEvent) { + configChanged = true; + _pointerLocations[event.pointer] = event.position; + } else if (event is PointerUpEvent) { + configChanged = true; + _pointerLocations.remove(event.pointer); } _update(configChanged); @@ -72,10 +66,10 @@ class ScaleGestureRecognizer extends OneSequenceGestureRecognizer { int count = _pointerLocations.keys.length; // Compute the focal point - ui.Point focalPoint = ui.Point.origin; + Point focalPoint = Point.origin; for (int pointer in _pointerLocations.keys) focalPoint += _pointerLocations[pointer].toOffset(); - focalPoint = new ui.Point(focalPoint.x / count, focalPoint.y / count); + focalPoint = new Point(focalPoint.x / count, focalPoint.y / count); // Span is the average deviation from focal point double totalDeviation = 0.0; diff --git a/packages/flutter/lib/src/gestures/tap.dart b/packages/flutter/lib/src/gestures/tap.dart index a63bfb5cf36bd15314724e42d2f52be5ca92c2cc..bd3a6a50373ddb94fa5f0349ccb92a1c26c5dafc 100644 --- a/packages/flutter/lib/src/gestures/tap.dart +++ b/packages/flutter/lib/src/gestures/tap.dart @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:ui' show Point, Offset; - import 'arena.dart'; import 'constants.dart'; import 'events.dart'; @@ -36,8 +34,8 @@ class TapGestureRecognizer extends PrimaryPointerGestureRecognizer { bool _wonArena = false; Point _finalPosition; - void handlePrimaryPointer(PointerInputEvent event) { - if (event.type == 'pointerup') { + void handlePrimaryPointer(PointerEvent event) { + if (event is PointerUpEvent) { _finalPosition = event.position; _checkUp(); } diff --git a/packages/flutter/lib/src/gestures/velocity_tracker.dart b/packages/flutter/lib/src/gestures/velocity_tracker.dart index 5c2555be1d718089d3c2c71ab7723e74f5cc3089..42d6d12d77af019a1975799d0284d36cabab2e4e 100644 --- a/packages/flutter/lib/src/gestures/velocity_tracker.dart +++ b/packages/flutter/lib/src/gestures/velocity_tracker.dart @@ -2,17 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:ui' as ui; +import 'dart:ui' show Point, Offset; import 'lsq_solver.dart'; -class GestureVelocity { - GestureVelocity({ this.isValid: false, this.x: 0.0, this.y : 0.0 }); - - final bool isValid; - final double x; - final double y; -} +export 'dart:ui' show Point, Offset; class _Estimator { int degree; @@ -22,17 +16,16 @@ class _Estimator { double confidence; String toString() { - String result = "Estimator(degree: " + degree.toString(); - result += ", time: " + time.toString(); - result += ", confidence: " + confidence.toString(); - result += ", xCoefficients: " + xCoefficients.toString(); - result += ", yCoefficients: " + yCoefficients.toString(); - return result; + return 'Estimator(degree: $degree, ' + 'time: $time, ' + 'confidence: $confidence, ' + 'xCoefficients: $xCoefficients, ' + 'yCoefficients: $yCoefficients)'; } } abstract class _VelocityTrackerStrategy { - void addMovement(Duration timeStamp, double x, double y); + void addMovement(Duration timeStamp, Point position); bool getEstimator(_Estimator estimator); void clear(); } @@ -45,28 +38,46 @@ enum _Weighting { } class _Movement { - Duration eventTime = const Duration(); - ui.Point position = ui.Point.origin; + Duration eventTime = Duration.ZERO; + Point position = Point.origin; } +typedef double _WeightChooser(int index); + class _LeastSquaresVelocityTrackerStrategy extends _VelocityTrackerStrategy { static const int kHistorySize = 20; static const int kHorizonMilliseconds = 100; - _LeastSquaresVelocityTrackerStrategy(this.degree, this.weighting) - : _index = 0, _movements = new List<_Movement>(kHistorySize); + _LeastSquaresVelocityTrackerStrategy(this.degree, _Weighting weighting) + : _index = 0, _movements = new List<_Movement>(kHistorySize) { + switch (weighting) { + case _Weighting.weightingNone: + _chooseWeight = null; + break; + case _Weighting.weightingDelta: + _chooseWeight = _weightDelta; + break; + case _Weighting.weightingCentral: + _chooseWeight = _weightCentral; + break; + case _Weighting.weightingRecent: + _chooseWeight = _weightRecent; + break; + } + } final int degree; - final _Weighting weighting; final List<_Movement> _movements; + _WeightChooser _chooseWeight; int _index; - void addMovement(Duration timeStamp, double x, double y) { - if (++_index == kHistorySize) + void addMovement(Duration timeStamp, Point position) { + _index += 1; + if (_index == kHistorySize) _index = 0; _Movement movement = _getMovement(_index); movement.eventTime = timeStamp; - movement.position = new ui.Point(x, y); + movement.position = position; } bool getEstimator(_Estimator estimator) { @@ -85,16 +96,18 @@ class _LeastSquaresVelocityTrackerStrategy extends _VelocityTrackerStrategy { if (age > kHorizonMilliseconds) break; - ui.Point position = movement.position; + Point position = movement.position; x.add(position.x); y.add(position.y); - w.add(_chooseWeight(index)); + w.add(_chooseWeight != null ? _chooseWeight(index) : 1.0); time.add(-age); index = (index == 0 ? kHistorySize : index) - 1; - } while (++m < kHistorySize); - if (m == 0) - return false; // no data + m += 1; + } while (m < kHistorySize); + + if (m == 0) // because we broke out of the loop above after age > kHorizonMilliseconds + return false; // no data // Calculate a least squares polynomial fit. int n = degree; @@ -120,8 +133,8 @@ class _LeastSquaresVelocityTrackerStrategy extends _VelocityTrackerStrategy { // No velocity data available for this pointer, but we do have its current // position. - estimator.xCoefficients = [ x[0] ]; - estimator.yCoefficients = [ y[0] ]; + estimator.xCoefficients = <double>[ x[0] ]; + estimator.yCoefficients = <double>[ y[0] ]; estimator.time = newestMovement.eventTime; estimator.degree = 0; estimator.confidence = 1.0; @@ -132,71 +145,61 @@ class _LeastSquaresVelocityTrackerStrategy extends _VelocityTrackerStrategy { _index = -1; } - double _chooseWeight(int index) { - switch (weighting) { - case _Weighting.weightingDelta: - // Weight points based on how much time elapsed between them and the next - // point so that points that "cover" a shorter time span are weighed less. - // delta 0ms: 0.5 - // delta 10ms: 1.0 - if (index == _index) { - return 1.0; - } - int nextIndex = (index + 1) % kHistorySize; - int deltaMilliseconds = (_movements[nextIndex].eventTime - _movements[index].eventTime).inMilliseconds; - if (deltaMilliseconds < 0) - return 0.5; - if (deltaMilliseconds < 10) - return 0.5 + deltaMilliseconds * 0.05; - - return 1.0; - - case _Weighting.weightingCentral: - // Weight points based on their age, weighing very recent and very old - // points less. - // age 0ms: 0.5 - // age 10ms: 1.0 - // age 50ms: 1.0 - // age 60ms: 0.5 - int ageMilliseconds = (_movements[_index].eventTime - _movements[index].eventTime).inMilliseconds; - if (ageMilliseconds < 0) - return 0.5; - if (ageMilliseconds < 10) - return 0.5 + ageMilliseconds * 0.05; - if (ageMilliseconds < 50) - return 1.0; - if (ageMilliseconds < 60) - return 0.5 + (60 - ageMilliseconds) * 0.05; - - return 0.5; + double _weightDelta(int index) { + // Weight points based on how much time elapsed between them and the next + // point so that points that "cover" a shorter time span are weighed less. + // delta 0ms: 0.5 + // delta 10ms: 1.0 + if (index == _index) + return 1.0; + int nextIndex = (index + 1) % kHistorySize; + int deltaMilliseconds = (_movements[nextIndex].eventTime - _movements[index].eventTime).inMilliseconds; + if (deltaMilliseconds < 0) + return 0.5; + if (deltaMilliseconds < 10) + return 0.5 + deltaMilliseconds * 0.05; + return 1.0; + } - case _Weighting.weightingRecent: - // Weight points based on their age, weighing older points less. - // age 0ms: 1.0 - // age 50ms: 1.0 - // age 100ms: 0.5 - int ageMilliseconds = (_movements[_index].eventTime - _movements[index].eventTime).inMilliseconds; - if (ageMilliseconds < 50) { - return 1.0; - } - if (ageMilliseconds < 100) { - return 0.5 + (100 - ageMilliseconds) * 0.01; - } - return 0.5; + double _weightCentral(int index) { + // Weight points based on their age, weighing very recent and very old + // points less. + // age 0ms: 0.5 + // age 10ms: 1.0 + // age 50ms: 1.0 + // age 60ms: 0.5 + int ageMilliseconds = (_movements[_index].eventTime - _movements[index].eventTime).inMilliseconds; + if (ageMilliseconds < 0) + return 0.5; + if (ageMilliseconds < 10) + return 0.5 + ageMilliseconds * 0.05; + if (ageMilliseconds < 50) + return 1.0; + if (ageMilliseconds < 60) + return 0.5 + (60 - ageMilliseconds) * 0.05; + return 0.5; + } - case _Weighting.weightingNone: - default: - return 1.0; - } + double _weightRecent(int index) { + // Weight points based on their age, weighing older points less. + // age 0ms: 1.0 + // age 50ms: 1.0 + // age 100ms: 0.5 + int ageMilliseconds = (_movements[_index].eventTime - _movements[index].eventTime).inMilliseconds; + if (ageMilliseconds < 50) + return 1.0; + if (ageMilliseconds < 100) + return 0.5 + (100 - ageMilliseconds) * 0.01; + return 0.5; } _Movement _getMovement(int i) { - _Movement result = _movements[i]; - if (result == null) { - result = new _Movement(); - _movements[i] = result; - } - return result; + _Movement result = _movements[i]; + if (result == null) { + result = new _Movement(); + _movements[i] = result; + } + return result; } } @@ -209,24 +212,22 @@ class VelocityTracker { Duration _lastTimeStamp = const Duration(); _VelocityTrackerStrategy _strategy; - void addPosition(Duration timeStamp, double x, double y) { + void addPosition(Duration timeStamp, Point position) { if ((timeStamp - _lastTimeStamp).inMilliseconds >= kAssumePointerMoveStoppedTimeMs) _strategy.clear(); _lastTimeStamp = timeStamp; - _strategy.addMovement(timeStamp, x, y); + _strategy.addMovement(timeStamp, position); } - GestureVelocity getVelocity() { + Offset getVelocity() { _Estimator estimator = new _Estimator(); if (_strategy.getEstimator(estimator) && estimator.degree >= 1) { - // convert from pixels/ms to pixels/s - return new GestureVelocity( - isValid: true, - x: estimator.xCoefficients[1] * 1000, - y: estimator.yCoefficients[1] * 1000 + return new Offset( // convert from pixels/ms to pixels/s + estimator.xCoefficients[1] * 1000, + estimator.yCoefficients[1] * 1000 ); } - return new GestureVelocity(isValid: false, x: 0.0, y: 0.0); + return null; } static _VelocityTrackerStrategy _createStrategy() { diff --git a/packages/flutter/lib/src/material/slider.dart b/packages/flutter/lib/src/material/slider.dart index 9090195c1e3e9698860fd660f85dc77b6ac2e3b9..08c4e360691141816fd3974dc6fe506fb9b4f811 100644 --- a/packages/flutter/lib/src/material/slider.dart +++ b/packages/flutter/lib/src/material/slider.dart @@ -148,8 +148,8 @@ class _RenderSlider extends RenderConstrainedBox { bool hitTestSelf(Point position) => true; - void handleEvent(InputEvent event, BoxHitTestEntry entry) { - if (event.type == 'pointerdown' && onChanged != null) + void handleEvent(PointerEvent event, BoxHitTestEntry entry) { + if (event is PointerDownEvent && onChanged != null) _drag.addPointer(event); } diff --git a/packages/flutter/lib/src/material/switch.dart b/packages/flutter/lib/src/material/switch.dart index fccf4dfc7e90649e2fd47eacf847a442f0ef74f6..6f3a43b3feffc4b2e417657129c9b1c879e542bf 100644 --- a/packages/flutter/lib/src/material/switch.dart +++ b/packages/flutter/lib/src/material/switch.dart @@ -164,8 +164,8 @@ class _RenderSwitch extends RenderToggleable { reaction.reverse(); } - void handleEvent(InputEvent event, BoxHitTestEntry entry) { - if (event.type == 'pointerdown' && onChanged != null) + void handleEvent(PointerEvent event, BoxHitTestEntry entry) { + if (event is PointerDownEvent && onChanged != null) _drag.addPointer(event); super.handleEvent(event, entry); } diff --git a/packages/flutter/lib/src/material/toggleable.dart b/packages/flutter/lib/src/material/toggleable.dart index cf0e635256d1d5fcb2057622483ec0ded65c8f30..4c829a93ba1cec99aaee8218fef7ceec176fb2f3 100644 --- a/packages/flutter/lib/src/material/toggleable.dart +++ b/packages/flutter/lib/src/material/toggleable.dart @@ -122,8 +122,8 @@ abstract class RenderToggleable extends RenderConstrainedBox { bool hitTestSelf(Point position) => true; - void handleEvent(InputEvent event, BoxHitTestEntry entry) { - if (event.type == 'pointerdown' && isInteractive) + void handleEvent(PointerEvent event, BoxHitTestEntry entry) { + if (event is PointerDownEvent && isInteractive) _tap.addPointer(event); } diff --git a/packages/flutter/lib/src/rendering/binding.dart b/packages/flutter/lib/src/rendering/binding.dart index 5d85db0d6728f359be058e949d77221c3cae6049..158ac28d2f6d62cb109195ed1eaa9ab93e95ede8 100644 --- a/packages/flutter/lib/src/rendering/binding.dart +++ b/packages/flutter/lib/src/rendering/binding.dart @@ -7,8 +7,8 @@ import 'dart:ui' as ui; import 'package:flutter/gestures.dart'; import 'package:flutter/scheduler.dart'; -import 'package:mojo/bindings.dart' as bindings; -import 'package:mojo/core.dart' as core; +import 'package:mojo/bindings.dart' as mojo_bindings; +import 'package:mojo/core.dart' as mojo_core; import 'package:sky_services/pointer/pointer.mojom.dart'; import 'box.dart'; @@ -17,119 +17,180 @@ import 'hit_test.dart'; import 'object.dart'; import 'view.dart'; -typedef void EventListener(InputEvent event); typedef void MetricListener(Size size); -int _hammingWeight(int value) { - if (value == 0) - return 0; - int weight = 0; - for (int i = 0; i < value.bitLength; ++i) { - if (value & (1 << i) != 0) - ++weight; +class _PointerState { + _PointerState(this.lastPosition); + + int get pointer => _pointer; // the identifier used in PointerEvent objects + int _pointer; + static int _pointerCount = 0; + void startNewPointer() { + _pointerCount += 1; + _pointer = _pointerCount; + } + + bool get down => _down; + bool _down = false; + void setDown() { + assert(!_down); + _down = true; + } + void setUp() { + assert(_down); + _down = false; } - return weight; -} -/// State used in converting PointerPackets to PointerInputEvents -class _PointerState { - _PointerState({ this.pointer, this.lastPosition }); - int pointer; Point lastPosition; } class _PointerEventConverter { - // Map actual input pointer value to a unique value - // Since events are serialized we can just use a counter - static Map<int, _PointerState> _stateForPointer = new Map<int, _PointerState>(); - static int _pointerCount = 0; - - static List<PointerInputEvent> convertPointerPacket(PointerPacket packet) { - return packet.pointers.map(_convertPointer).toList(); - } - - static PointerInputEvent _convertPointer(Pointer pointer) { - Point position = new Point(pointer.x, pointer.y); - - _PointerState state = _stateForPointer[pointer.pointer]; - double dx = 0.0; - double dy = 0.0; - String eventType; - switch (pointer.type) { - case PointerType.DOWN: - eventType = 'pointerdown'; - if (state == null) { - state = new _PointerState(lastPosition: position); - _stateForPointer[pointer.pointer] = state; - } - state.pointer = _pointerCount; - _pointerCount++; - break; - case PointerType.MOVE: - eventType = 'pointermove'; - // state == null means the pointer is hovering - if (state != null) { - dx = position.x - state.lastPosition.x; - dy = position.y - state.lastPosition.y; + // map from platform pointer identifiers to PointerEvent pointer identifiers + static Map<int, _PointerState> _pointers = <int, _PointerState>{}; + + static Iterable<PointerEvent> expand(Iterable<Pointer> packet) sync* { + for (Pointer datum in packet) { + Point position = new Point(datum.x, datum.y); + Duration timeStamp = new Duration(microseconds: datum.timeStamp); + assert(_pointerKindMap.containsKey(datum.kind)); + PointerDeviceKind kind = _pointerKindMap[datum.kind]; + switch (datum.type) { + case PointerType.DOWN: + _PointerState state = _pointers.putIfAbsent( + datum.pointer, + () => new _PointerState(position) + ); + state.startNewPointer(); + state.setDown(); + yield new PointerAddedEvent( + timeStamp: timeStamp, + pointer: state.pointer, + kind: kind, + position: position, + obscured: datum.obscured, + pressureMin: datum.pressureMin, + pressureMax: datum.pressureMax, + distance: datum.distance, + distanceMax: datum.distanceMax, + radiusMin: datum.radiusMin, + radiusMax: datum.radiusMax, + orientation: datum.orientation, + tilt: datum.tilt + ); + yield new PointerDownEvent( + timeStamp: timeStamp, + pointer: state.pointer, + kind: kind, + position: position, + obscured: datum.obscured, + pressure: datum.pressure, + pressureMin: datum.pressureMin, + pressureMax: datum.pressureMax, + distanceMax: datum.distanceMax, + radiusMajor: datum.radiusMajor, + radiusMinor: datum.radiusMajor, + radiusMin: datum.radiusMin, + radiusMax: datum.radiusMax, + orientation: datum.orientation, + tilt: datum.tilt + ); + break; + case PointerType.MOVE: + _PointerState state = _pointers[datum.pointer]; + // If the service starts supporting hover pointers, then it must + // also start sending us ADDED and REMOVED data points. + // In the meantime, we only support "down" moves. + // See also: https://github.com/flutter/flutter/issues/720 + assert(state != null); + assert(state.down); + Offset offset = position - state.lastPosition; state.lastPosition = position; - } - break; - case PointerType.UP: - case PointerType.CANCEL: - eventType = (pointer.type == PointerType.UP) ? 'pointerup' : 'pointercancel'; - // state == null indicates spurious events - if (state != null) { - // Only remove the pointer state when the last button has been released. - if (_hammingWeight(pointer.buttons) <= 1) - _stateForPointer.remove(pointer.pointer); - } - break; + yield new PointerMoveEvent( + timeStamp: timeStamp, + pointer: state.pointer, + kind: kind, + position: position, + delta: offset, + down: state.down, + obscured: datum.obscured, + pressure: datum.pressure, + pressureMin: datum.pressureMin, + pressureMax: datum.pressureMax, + distance: datum.distance, + distanceMax: datum.distanceMax, + radiusMajor: datum.radiusMajor, + radiusMinor: datum.radiusMajor, + radiusMin: datum.radiusMin, + radiusMax: datum.radiusMax, + orientation: datum.orientation, + tilt: datum.tilt + ); + break; + case PointerType.UP: + case PointerType.CANCEL: + _PointerState state = _pointers[datum.pointer]; + assert(state != null); + assert(position == state.lastPosition); + state.setUp(); + if (datum.type == PointerType.UP) { + yield new PointerUpEvent( + timeStamp: timeStamp, + pointer: state.pointer, + kind: kind, + position: position, + obscured: datum.obscured, + pressureMax: datum.pressureMax, + distance: datum.distance, + distanceMax: datum.distanceMax, + radiusMin: datum.radiusMin, + radiusMax: datum.radiusMax, + orientation: datum.orientation, + tilt: datum.tilt + ); + } else { + yield new PointerCancelEvent( + timeStamp: timeStamp, + pointer: state.pointer, + kind: kind, + position: position, + obscured: datum.obscured, + pressureMin: datum.pressureMin, + pressureMax: datum.pressureMax, + distance: datum.distance, + distanceMax: datum.distanceMax, + radiusMin: datum.radiusMin, + radiusMax: datum.radiusMax, + orientation: datum.orientation, + tilt: datum.tilt + ); + } + yield new PointerRemovedEvent( + timeStamp: timeStamp, + pointer: state.pointer, + kind: kind, + obscured: datum.obscured, + pressureMin: datum.pressureMin, + pressureMax: datum.pressureMax, + distanceMax: datum.distanceMax, + radiusMin: datum.radiusMin, + radiusMax: datum.radiusMax + ); + _pointers.remove(datum.pointer); + break; + default: + // TODO(ianh): once https://github.com/flutter/flutter/issues/720 is + // done, add real support for PointerAddedEvent and PointerRemovedEvent + assert(false); + } } - - int pointerIndex = (state == null) ? pointer.pointer : state.pointer; - - return new PointerInputEvent( - type: eventType, - timeStamp: new Duration(microseconds: pointer.timeStamp), - pointer: pointerIndex, - kind: _mapPointerKindToString(pointer.kind), - x: pointer.x, - y: pointer.y, - dx: dx, - dy: dy, - buttons: pointer.buttons, - down: pointer.down, - primary: pointer.primary, - obscured: pointer.obscured, - pressure: pointer.pressure, - pressureMin: pointer.pressureMin, - pressureMax: pointer.pressureMax, - distance: pointer.distance, - distanceMin: pointer.distanceMin, - distanceMax: pointer.distanceMax, - radiusMajor: pointer.radiusMajor, - radiusMinor: pointer.radiusMinor, - radiusMin: pointer.radiusMin, - radiusMax: pointer.radiusMax, - orientation: pointer.orientation, - tilt: pointer.tilt - ); } - static String _mapPointerKindToString(PointerKind kind) { - switch (kind) { - case PointerKind.TOUCH: - return 'touch'; - case PointerKind.MOUSE: - return 'mouse'; - case PointerKind.STYLUS: - return 'stylus'; - case PointerKind.INVERTED_STYLUS: - return 'invertedStylus'; - } - assert(false); - return ''; - } + static const Map<PointerKind, PointerDeviceKind> _pointerKindMap = const <PointerKind, PointerDeviceKind>{ + PointerKind.TOUCH: PointerDeviceKind.touch, + PointerKind.MOUSE: PointerDeviceKind.mouse, + PointerKind.STYLUS: PointerDeviceKind.stylus, + PointerKind.INVERTED_STYLUS: PointerDeviceKind.invertedStylus, + }; } class BindingObserver { @@ -202,53 +263,40 @@ class FlutterBinding extends HitTestTarget { } void _handlePointerPacket(ByteData serializedPacket) { - bindings.Message message = new bindings.Message( - serializedPacket, - <core.MojoHandle>[], - serializedPacket.lengthInBytes, - 0); - PointerPacket packet = PointerPacket.deserialize(message); - for (PointerInputEvent event in _PointerEventConverter.convertPointerPacket(packet)) { - _handlePointerInputEvent(event); - } + final mojo_bindings.Message message = new mojo_bindings.Message( + serializedPacket, + <mojo_core.MojoHandle>[], + serializedPacket.lengthInBytes, + 0 + ); + final PointerPacket packet = PointerPacket.deserialize(message); + for (PointerEvent event in _PointerEventConverter.expand(packet.pointers)) + _handlePointerEvent(event); } /// A router that routes all pointer events received from the engine final PointerRouter pointerRouter = new PointerRouter(); /// State for all pointers which are currently down. - /// We do not track the state of hovering pointers because we need - /// to hit-test them on each movement. - Map<int, HitTestResult> _resultForPointer = new Map<int, HitTestResult>(); - - void _handlePointerInputEvent(PointerInputEvent event) { - HitTestResult result = _resultForPointer[event.pointer]; - switch (event.type) { - case 'pointerdown': - if (result == null) { - result = hitTest(new Point(event.x, event.y)); - _resultForPointer[event.pointer] = result; - } - break; - case 'pointermove': - if (result == null) { - // The pointer is hovering, ignore it for now since we don't - // know what to do with it yet. - return; - } - break; - case 'pointerup': - case 'pointercancel': - if (result == null) { - // This seems to be a spurious event. Ignore it. - return; - } - // Only remove the hit test result when the last button has been released. - if (_hammingWeight(event.buttons) <= 1) - _resultForPointer.remove(event.pointer); - break; + /// The state of hovering pointers is not tracked because that would require + /// hit-testing on every fram.e + Map<int, HitTestResult> _hitTests = <int, HitTestResult>{}; + + void _handlePointerEvent(PointerEvent event) { + if (event is PointerDownEvent) { + assert(!_hitTests.containsKey(event.pointer)); + _hitTests[event.pointer] = hitTest(event.position); + } else if (event is! PointerUpEvent) { + assert(event.down == _hitTests.containsKey(event.pointer)); + if (!event.down) + return; // we currently ignore add, remove, and hover move events + } + assert(_hitTests[event.pointer] != null); + dispatchEvent(event, _hitTests[event.pointer]); + if (event is PointerUpEvent) { + assert(_hitTests.containsKey(event.pointer)); + _hitTests.remove(event.pointer); } - dispatchEvent(event, result); } /// Determine which [HitTestTarget] objects are located at a given position @@ -260,20 +308,18 @@ class FlutterBinding extends HitTestTarget { } /// Dispatch the given event to the path of the given hit test result - void dispatchEvent(InputEvent event, HitTestResult result) { + void dispatchEvent(PointerEvent event, HitTestResult result) { assert(result != null); for (HitTestEntry entry in result.path) entry.target.handleEvent(event, entry); } - void handleEvent(InputEvent e, HitTestEntry entry) { - if (e is PointerInputEvent) { - PointerInputEvent event = e; - pointerRouter.route(event); - if (event.type == 'pointerdown') - GestureArena.instance.close(event.pointer); - else if (event.type == 'pointerup') - GestureArena.instance.sweep(event.pointer); + void handleEvent(PointerEvent event, HitTestEntry entry) { + pointerRouter.route(event); + if (event is PointerDownEvent) { + GestureArena.instance.close(event.pointer); + } else if (event is PointerUpEvent) { + GestureArena.instance.sweep(event.pointer); } } } diff --git a/packages/flutter/lib/src/rendering/box.dart b/packages/flutter/lib/src/rendering/box.dart index 0af049c108d53c0be3862fd84018428a7c6e5690..372b1231a523a0b9d49e84d2383fdba9ee443e1a 100644 --- a/packages/flutter/lib/src/rendering/box.dart +++ b/packages/flutter/lib/src/rendering/box.dart @@ -636,14 +636,15 @@ abstract class RenderBox extends RenderObject { Rect get paintBounds => Point.origin & size; int _debugActivePointers = 0; - void handleEvent(InputEvent event, HitTestEntry entry) { + void handleEvent(PointerEvent event, HitTestEntry entry) { super.handleEvent(event, entry); assert(() { if (debugPaintPointersEnabled) { - if (event.type == 'pointerdown') + if (event is PointerDownEvent) { _debugActivePointers += 1; - if (event.type == 'pointerup' || event.type == 'pointercancel') + } else if (event is PointerUpEvent || event is PointerCancelEvent) { _debugActivePointers -= 1; + } markNeedsPaint(); } return true; diff --git a/packages/flutter/lib/src/rendering/hit_test.dart b/packages/flutter/lib/src/rendering/hit_test.dart index 5230983a4375e6e2b5cc7d31d164745f5530fb28..88aef26a3cb1968d1b8c5b5af5456b91d04770a1 100644 --- a/packages/flutter/lib/src/rendering/hit_test.dart +++ b/packages/flutter/lib/src/rendering/hit_test.dart @@ -7,7 +7,7 @@ import 'package:flutter/gestures.dart'; /// An object that can handle events. abstract class HitTestTarget { /// Override this function to receive events. - void handleEvent(InputEvent event, HitTestEntry entry); + void handleEvent(PointerEvent event, HitTestEntry entry); } /// Data collected during a hit test about a specific [HitTestTarget]. diff --git a/packages/flutter/lib/src/rendering/object.dart b/packages/flutter/lib/src/rendering/object.dart index cbcec3728c6c4c89e6c73ec57ccb9f3659afb269..9a229c7c42c69add9893a8e7140055407102ec36 100644 --- a/packages/flutter/lib/src/rendering/object.dart +++ b/packages/flutter/lib/src/rendering/object.dart @@ -1045,8 +1045,8 @@ abstract class RenderObject extends AbstractNode implements HitTestTarget { // EVENTS - /// Override this function to handle events that hit this render object - void handleEvent(InputEvent event, HitTestEntry entry) { } + /// Override this function to handle pointer events that hit this render object. + void handleEvent(PointerEvent event, HitTestEntry entry) { } // HIT TESTING diff --git a/packages/flutter/lib/src/rendering/proxy_box.dart b/packages/flutter/lib/src/rendering/proxy_box.dart index cb87e58c6d3a2945b742368458619e7d9299e84b..20209d78aeb8c427a08c000da7ef70cd8df9e477 100644 --- a/packages/flutter/lib/src/rendering/proxy_box.dart +++ b/packages/flutter/lib/src/rendering/proxy_box.dart @@ -1072,7 +1072,10 @@ class RenderCustomPaint extends RenderProxyBox { } } -typedef void PointerEventListener(PointerInputEvent event); +typedef void PointerDownEventListener(PointerDownEvent event); +typedef void PointerMoveEventListener(PointerMoveEvent event); +typedef void PointerUpEventListener(PointerUpEvent event); +typedef void PointerCancelEventListener(PointerCancelEvent event); enum HitTestBehavior { deferToChild, @@ -1091,10 +1094,10 @@ class RenderPointerListener extends RenderProxyBox { RenderBox child }) : super(child); - PointerEventListener onPointerDown; - PointerEventListener onPointerMove; - PointerEventListener onPointerUp; - PointerEventListener onPointerCancel; + PointerDownEventListener onPointerDown; + PointerMoveEventListener onPointerMove; + PointerUpEventListener onPointerUp; + PointerCancelEventListener onPointerCancel; HitTestBehavior behavior; bool hitTest(HitTestResult result, { Point position }) { @@ -1110,14 +1113,14 @@ class RenderPointerListener extends RenderProxyBox { bool hitTestSelf(Point position) => behavior == HitTestBehavior.opaque; - void handleEvent(InputEvent event, HitTestEntry entry) { - if (onPointerDown != null && event.type == 'pointerdown') + void handleEvent(PointerEvent event, HitTestEntry entry) { + if (onPointerDown != null && event is PointerDownEvent) return onPointerDown(event); - if (onPointerMove != null && event.type == 'pointermove') + if (onPointerMove != null && event == PointerMoveEvent) return onPointerMove(event); - if (onPointerUp != null && event.type == 'pointerup') + if (onPointerUp != null && event == PointerUpEvent) return onPointerUp(event); - if (onPointerCancel != null && event.type == 'pointercancel') + if (onPointerCancel != null && event == PointerCancelEvent) return onPointerCancel(event); } diff --git a/packages/flutter/lib/src/widgets/basic.dart b/packages/flutter/lib/src/widgets/basic.dart index ee46a0e60ff212f97cf6f75457866d671d666876..d4f047e9cf15164adba800fc722d3c0e8b5129b3 100644 --- a/packages/flutter/lib/src/widgets/basic.dart +++ b/packages/flutter/lib/src/widgets/basic.dart @@ -1299,10 +1299,10 @@ class Listener extends OneChildRenderObjectWidget { assert(behavior != null); } - final PointerEventListener onPointerDown; - final PointerEventListener onPointerMove; - final PointerEventListener onPointerUp; - final PointerEventListener onPointerCancel; + final PointerDownEventListener onPointerDown; + final PointerMoveEventListener onPointerMove; + final PointerUpEventListener onPointerUp; + final PointerCancelEventListener onPointerCancel; final HitTestBehavior behavior; RenderPointerListener createRenderObject() => new RenderPointerListener( diff --git a/packages/flutter/lib/src/widgets/drag_target.dart b/packages/flutter/lib/src/widgets/drag_target.dart index 817b7bf3e9ab04e973a1b7cb48fe9ca9aabc6fae..6c9e56e915cdaffad41c41d552bbb1dcf7d9aed4 100644 --- a/packages/flutter/lib/src/widgets/drag_target.dart +++ b/packages/flutter/lib/src/widgets/drag_target.dart @@ -135,7 +135,7 @@ class _DraggableState<T> extends State<DraggableBase<T>> implements GestureArena GestureRecognizer _recognizer; Map<int, GestureArenaEntry> _activePointers = <int, GestureArenaEntry>{}; - void _routePointer(PointerInputEvent event) { + void _routePointer(PointerEvent event) { _activePointers[event.pointer] = GestureArena.instance.add(event.pointer, this); _recognizer.addPointer(event); } @@ -284,18 +284,14 @@ class _DragAvatar<T> { Offset _lastOffset; OverlayEntry _entry; - void handleEvent(PointerInputEvent event) { - switch(event.type) { - case 'pointerup': - update(event.position); - finish(_DragEndKind.dropped); - break; - case 'pointercancel': - finish(_DragEndKind.canceled); - break; - case 'pointermove': - update(event.position); - break; + void handleEvent(PointerEvent event) { + if (event is PointerUpEvent) { + update(event.position); + finish(_DragEndKind.dropped); + } else if (event is PointerCancelEvent) { + finish(_DragEndKind.canceled); + } else if (event is PointerMoveEvent) { + update(event.position); } } diff --git a/packages/flutter/lib/src/widgets/event_recorder.dart b/packages/flutter/lib/src/widgets/event_recorder.dart index c5f82a2d3a9df7b9689b0b2d879318d92ccb436a..f22404318361a84342f61afbcab18d3a8f9d92f3 100644 --- a/packages/flutter/lib/src/widgets/event_recorder.dart +++ b/packages/flutter/lib/src/widgets/event_recorder.dart @@ -3,7 +3,6 @@ // found in the LICENSE file. import 'package:flutter/gestures.dart'; -import 'package:flutter/rendering.dart'; import 'basic.dart'; import 'framework.dart'; @@ -13,7 +12,7 @@ enum EventRecorderMode { record } -typedef void EventsReadyCallback(List<PointerInputEvent> events); +typedef void EventsReadyCallback(Iterable<PointerEvent> events); /// EventRecorder is a utility widget that allows input events occurring /// on the child to be recorded. The widget is initially in the "stop" state @@ -38,11 +37,7 @@ class EventRecorder extends StatefulComponent { class _EventRecorderState extends State<EventRecorder> { - List<PointerInputEvent> _events = new List<PointerInputEvent>(); - - void initState() { - super.initState(); - } + final List<PointerEvent> _events = <PointerEvent>[]; void didUpdateConfig(EventRecorder oldConfig) { if (oldConfig.mode == EventRecorderMode.record && @@ -52,10 +47,9 @@ class _EventRecorderState extends State<EventRecorder> { } } - void _recordEvent(PointerInputEvent event) { - if (config.mode == EventRecorderMode.record) { + void _recordEvent(PointerEvent event) { + if (config.mode == EventRecorderMode.record) _events.add(event); - } } Widget build(BuildContext context) { diff --git a/packages/flutter/lib/src/widgets/gesture_detector.dart b/packages/flutter/lib/src/widgets/gesture_detector.dart index e034096596429968b17702129f92be7b9f0c0907..ffef817e0767528d343039d92f503eb97efbb8df 100644 --- a/packages/flutter/lib/src/widgets/gesture_detector.dart +++ b/packages/flutter/lib/src/widgets/gesture_detector.dart @@ -210,7 +210,7 @@ class _GestureDetectorState extends State<GestureDetector> { return null; } - void _handlePointerDown(PointerInputEvent event) { + void _handlePointerDown(PointerDownEvent event) { if (_tap != null) _tap.addPointer(event); if (_doubleTap != null) diff --git a/packages/flutter_test/lib/src/test_pointer.dart b/packages/flutter_test/lib/src/test_pointer.dart index 49ed7679863219bb646409032eb69e857eb60267..ae254b4a0ed71221dc689d1031686da588728d90 100644 --- a/packages/flutter_test/lib/src/test_pointer.dart +++ b/packages/flutter_test/lib/src/test_pointer.dart @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:ui' as ui; - import 'package:flutter/gestures.dart'; export 'dart:ui' show Point; @@ -13,57 +11,48 @@ class TestPointer { int pointer; bool isDown = false; - ui.Point location; + Point location; - PointerInputEvent down(ui.Point newLocation, { Duration timeStamp: const Duration() }) { + PointerDownEvent down(Point newLocation, { Duration timeStamp: const Duration() }) { assert(!isDown); isDown = true; location = newLocation; - return new PointerInputEvent( - type: 'pointerdown', + return new PointerDownEvent( + timeStamp: timeStamp, pointer: pointer, - x: location.x, - y: location.y, - timeStamp: timeStamp + position: location ); } - PointerInputEvent move(ui.Point newLocation, { Duration timeStamp: const Duration() }) { + PointerMoveEvent move(Point newLocation, { Duration timeStamp: const Duration() }) { assert(isDown); - ui.Offset delta = newLocation - location; + Offset delta = newLocation - location; location = newLocation; - return new PointerInputEvent( - type: 'pointermove', + return new PointerMoveEvent( + timeStamp: timeStamp, pointer: pointer, - x: newLocation.x, - y: newLocation.y, - dx: delta.dx, - dy: delta.dy, - timeStamp: timeStamp + position: newLocation, + delta: delta ); } - PointerInputEvent up({ Duration timeStamp: const Duration() }) { + PointerUpEvent up({ Duration timeStamp: const Duration() }) { assert(isDown); isDown = false; - return new PointerInputEvent( - type: 'pointerup', + return new PointerUpEvent( + timeStamp: timeStamp, pointer: pointer, - x: location.x, - y: location.y, - timeStamp: timeStamp + position: location ); } - PointerInputEvent cancel({ Duration timeStamp: const Duration() }) { + PointerCancelEvent cancel({ Duration timeStamp: const Duration() }) { assert(isDown); isDown = false; - return new PointerInputEvent( - type: 'pointercancel', + return new PointerCancelEvent( + timeStamp: timeStamp, pointer: pointer, - x: location.x, - y: location.y, - timeStamp: timeStamp + position: location ); } diff --git a/packages/flutter_test/lib/src/widget_tester.dart b/packages/flutter_test/lib/src/widget_tester.dart index 9baceaa94b651c1d77790ba04823b2bb0b5d53ee..612a94400bf333960c25a8f0dac859cc32e9644b 100644 --- a/packages/flutter_test/lib/src/widget_tester.dart +++ b/packages/flutter_test/lib/src/widget_tester.dart @@ -174,13 +174,13 @@ class WidgetTester { _dispatchEvent(p.up(), result); } - void dispatchEvent(InputEvent event, Point location) { + void dispatchEvent(PointerEvent event, Point location) { _dispatchEvent(event, _hitTest(location)); } HitTestResult _hitTest(Point location) => WidgetFlutterBinding.instance.hitTest(location); - void _dispatchEvent(InputEvent event, HitTestResult result) { + void _dispatchEvent(PointerEvent event, HitTestResult result) { WidgetFlutterBinding.instance.dispatchEvent(event, result); } diff --git a/packages/unit/benchmark/README.md b/packages/unit/benchmark/README.md index c1346785f48a2f71596cf863b07fc87ce5748b2c..f676a21e04f97ab9a6d6a739e44c02dfb3e2ac45 100644 --- a/packages/unit/benchmark/README.md +++ b/packages/unit/benchmark/README.md @@ -1,16 +1,18 @@ # Benchmarks -This directory (and its sub-directories) contain benchmarks for Flutter. -The reporting format for benchmarks is not standardized yet, so benchmarks -here are typically run by hand. To run a benchmark: +This directory (and its sub-directories) contain benchmarks for +Flutter. The reporting format for benchmarks is not standardized yet, +so benchmarks here are typically run by hand. To run a benchmark: 1. Build `sky_shell` for Linux Release using the instructions in the [Engine repository](https://github.com/flutter/engine). 2. Run `pub get` in the `packages/unit` directory. -3. Run the benchmark: +3. Run the benchmarks by running the following command from the root + of the flutter repository (replacing `stocks/layout_bench.dart` + with the path to whichever benchmark you want to run): ``` -/path/to/engine/src/out/Release/sky_shell packages/unit/benchmark/stocks/layout_bench.dart --package-root=packages/unit/package +/path/to/engine/src/out/Release/sky_shell packages/unit/benchmark/stocks/layout_bench.dart --package-root=packages/unit/packages ``` diff --git a/packages/unit/benchmark/gestures/velocity_tracker_bench.dart b/packages/unit/benchmark/gestures/velocity_tracker_bench.dart index 94c6a15ca3850e61de3cf6f49c39259acea5f216..e190c44b644da1eba9f8e824c1288cb1df8d0989 100644 --- a/packages/unit/benchmark/gestures/velocity_tracker_bench.dart +++ b/packages/unit/benchmark/gestures/velocity_tracker_bench.dart @@ -1,3 +1,7 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + import 'package:flutter/gestures.dart'; import 'package:test/test.dart'; import 'velocity_tracker_data.dart'; @@ -7,36 +11,16 @@ const int kBatchSize = 1000; const int kBatchOffset = 50; const int kNumMarks = 130; -List<PointerInputEvent> _eventFromMap(List<Map> intermediate) { - List<PointerInputEvent> events = new List<PointerInputEvent>(); - for (Map entry in intermediate) - events.add(_eventFor(entry)); - return events; -} - -PointerInputEvent _eventFor(Map entry) { - PointerInputEvent result = new PointerInputEvent( - type: entry['type'], - timeStamp: entry['timeStamp'], - pointer: entry['pointer'], - x: entry['x'], - y: entry['y'] - ); - return result; -} - void main() { - List<PointerInputEvent> events = _eventFromMap(velocityEventData); - test('Dart velocity tracker performance', () { VelocityTracker tracker = new VelocityTracker(); Stopwatch watch = new Stopwatch(); watch.start(); for (int i = 0; i < kNumIters; i++) { - for (PointerInputEvent event in events) { - if (event.type == 'pointerdown' || event.type == 'pointermove') - tracker.addPosition(event.timeStamp, event.x, event.y); - if (event.type == 'pointerup') + for (PointerEvent event in velocityEventData) { + if (event is PointerDownEvent || event is PointerMoveEvent) + tracker.addPosition(event.timeStamp, event.position); + if (event is PointerUpEvent) tracker.getVelocity(); } } diff --git a/packages/unit/benchmark/gestures/velocity_tracker_data.dart b/packages/unit/benchmark/gestures/velocity_tracker_data.dart index baa6c14166f9e5f92c8fa1a3115a609c55524820..9b5618565056776aa162a81a1b00ada433e1b6c3 100644 --- a/packages/unit/benchmark/gestures/velocity_tracker_data.dart +++ b/packages/unit/benchmark/gestures/velocity_tracker_data.dart @@ -1,2144 +1,1534 @@ -final List<Map> velocityEventData = [ - { - "type":"pointerdown", - "timeStamp":216690896.0, - "pointer":1, - "x":270.0, - "y":538.2857055664062 - }, - { - "type":"pointermove", - "timeStamp":216690906.0, - "pointer":1, - "x":270.0, - "y":538.2857055664062 - }, - { - "type":"pointermove", - "timeStamp":216690951.0, - "pointer":1, - "x":270.0, - "y":530.8571166992188 - }, - { - "type":"pointermove", - "timeStamp":216690959.0, - "pointer":1, - "x":270.0, - "y":526.8571166992188 - }, - { - "type":"pointermove", - "timeStamp":216690967.0, - "pointer":1, - "x":270.0, - "y":521.4285888671875 - }, - { - "type":"pointermove", - "timeStamp":216690975.0, - "pointer":1, - "x":270.0, - "y":515.4285888671875 - }, - { - "type":"pointermove", - "timeStamp":216690983.0, - "pointer":1, - "x":270.0, - "y":506.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216690991.0, - "pointer":1, - "x":268.8571472167969, - "y":496.0 - }, - { - "type":"pointermove", - "timeStamp":216690998.0, - "pointer":1, - "x":267.4285583496094, - "y":483.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216691006.0, - "pointer":1, - "x":266.28570556640625, - "y":469.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216691014.0, - "pointer":1, - "x":265.4285583496094, - "y":456.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216691021.0, - "pointer":1, - "x":264.28570556640625, - "y":443.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216691029.0, - "pointer":1, - "x":264.0, - "y":431.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216691036.0, - "pointer":1, - "x":263.4285583496094, - "y":421.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216691044.0, - "pointer":1, - "x":263.4285583496094, - "y":412.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216691052.0, - "pointer":1, - "x":263.4285583496094, - "y":404.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216691060.0, - "pointer":1, - "x":263.4285583496094, - "y":396.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216691068.0, - "pointer":1, - "x":264.5714416503906, - "y":390.0 - }, - { - "type":"pointermove", - "timeStamp":216691075.0, - "pointer":1, - "x":265.1428527832031, - "y":384.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216691083.0, - "pointer":1, - "x":266.0, - "y":380.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216691091.0, - "pointer":1, - "x":266.5714416503906, - "y":376.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216691098.0, - "pointer":1, - "x":267.1428527832031, - "y":373.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216691106.0, - "pointer":1, - "x":267.71429443359375, - "y":370.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216691114.0, - "pointer":1, - "x":268.28570556640625, - "y":367.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216691121.0, - "pointer":1, - "x":268.5714416503906, - "y":366.0 - }, - { - "type":"pointermove", - "timeStamp":216691130.0, - "pointer":1, - "x":268.8571472167969, - "y":364.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216691137.0, - "pointer":1, - "x":269.1428527832031, - "y":363.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216691145.0, - "pointer":1, - "x":269.1428527832031, - "y":362.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216691153.0, - "pointer":1, - "x":269.4285583496094, - "y":362.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216691168.0, - "pointer":1, - "x":268.5714416503906, - "y":365.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216691176.0, - "pointer":1, - "x":267.1428527832031, - "y":370.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216691183.0, - "pointer":1, - "x":265.4285583496094, - "y":376.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216691191.0, - "pointer":1, - "x":263.1428527832031, - "y":385.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216691199.0, - "pointer":1, - "x":261.4285583496094, - "y":396.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216691207.0, - "pointer":1, - "x":259.71429443359375, - "y":408.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216691215.0, - "pointer":1, - "x":258.28570556640625, - "y":419.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216691222.0, - "pointer":1, - "x":257.4285583496094, - "y":428.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216691230.0, - "pointer":1, - "x":256.28570556640625, - "y":436.0 - }, - { - "type":"pointermove", - "timeStamp":216691238.0, - "pointer":1, - "x":255.7142791748047, - "y":442.0 - }, - { - "type":"pointermove", - "timeStamp":216691245.0, - "pointer":1, - "x":255.14285278320312, - "y":447.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216691253.0, - "pointer":1, - "x":254.85714721679688, - "y":453.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216691261.0, - "pointer":1, - "x":254.57142639160156, - "y":458.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216691268.0, - "pointer":1, - "x":254.2857208251953, - "y":463.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216691276.0, - "pointer":1, - "x":254.2857208251953, - "y":470.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216691284.0, - "pointer":1, - "x":254.2857208251953, - "y":477.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216691292.0, - "pointer":1, - "x":255.7142791748047, - "y":487.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216691300.0, - "pointer":1, - "x":256.8571472167969, - "y":498.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216691307.0, - "pointer":1, - "x":258.28570556640625, - "y":507.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216691315.0, - "pointer":1, - "x":259.4285583496094, - "y":516.0 - }, - { - "type":"pointermove", - "timeStamp":216691323.0, - "pointer":1, - "x":260.28570556640625, - "y":521.7142944335938 - }, - { - "type":"pointerup", - "timeStamp":216691338.0, - "pointer":1, - "x":260.28570556640625, - "y":521.7142944335938 - }, - { - "type":"pointerdown", - "timeStamp":216691573.0, - "pointer":2, - "x":266.0, - "y":327.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216691588.0, - "pointer":2, - "x":266.0, - "y":327.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216691626.0, - "pointer":2, - "x":261.1428527832031, - "y":337.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216691634.0, - "pointer":2, - "x":258.28570556640625, - "y":343.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216691642.0, - "pointer":2, - "x":254.57142639160156, - "y":354.0 - }, - { - "type":"pointermove", - "timeStamp":216691650.0, - "pointer":2, - "x":250.2857208251953, - "y":368.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216691657.0, - "pointer":2, - "x":247.42857360839844, - "y":382.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216691665.0, - "pointer":2, - "x":245.14285278320312, - "y":397.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216691673.0, - "pointer":2, - "x":243.14285278320312, - "y":411.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216691680.0, - "pointer":2, - "x":242.2857208251953, - "y":426.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216691688.0, - "pointer":2, - "x":241.7142791748047, - "y":440.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216691696.0, - "pointer":2, - "x":241.7142791748047, - "y":454.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216691703.0, - "pointer":2, - "x":242.57142639160156, - "y":467.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216691712.0, - "pointer":2, - "x":243.42857360839844, - "y":477.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216691720.0, - "pointer":2, - "x":244.85714721679688, - "y":485.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216691727.0, - "pointer":2, - "x":246.2857208251953, - "y":493.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216691735.0, - "pointer":2, - "x":248.0, - "y":499.71429443359375 - }, - { - "type":"pointerup", - "timeStamp":216691750.0, - "pointer":2, - "x":248.0, - "y":499.71429443359375 - }, - { - "type":"pointerdown", - "timeStamp":216692255.0, - "pointer":3, - "x":249.42857360839844, - "y":351.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216692270.0, - "pointer":3, - "x":249.42857360839844, - "y":351.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216692309.0, - "pointer":3, - "x":246.2857208251953, - "y":361.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216692317.0, - "pointer":3, - "x":244.0, - "y":368.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216692325.0, - "pointer":3, - "x":241.42857360839844, - "y":377.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216692333.0, - "pointer":3, - "x":237.7142791748047, - "y":391.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216692340.0, - "pointer":3, - "x":235.14285278320312, - "y":406.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216692348.0, - "pointer":3, - "x":232.57142639160156, - "y":421.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216692356.0, - "pointer":3, - "x":230.2857208251953, - "y":436.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216692363.0, - "pointer":3, - "x":228.2857208251953, - "y":451.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216692371.0, - "pointer":3, - "x":227.42857360839844, - "y":466.0 - }, - { - "type":"pointermove", - "timeStamp":216692378.0, - "pointer":3, - "x":226.2857208251953, - "y":479.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216692387.0, - "pointer":3, - "x":225.7142791748047, - "y":491.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216692395.0, - "pointer":3, - "x":225.14285278320312, - "y":501.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216692402.0, - "pointer":3, - "x":224.85714721679688, - "y":509.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216692410.0, - "pointer":3, - "x":224.57142639160156, - "y":514.8571166992188 - }, - { - "type":"pointermove", - "timeStamp":216692418.0, - "pointer":3, - "x":224.2857208251953, - "y":519.4285888671875 - }, - { - "type":"pointermove", - "timeStamp":216692425.0, - "pointer":3, - "x":224.0, - "y":523.4285888671875 - }, - { - "type":"pointermove", - "timeStamp":216692433.0, - "pointer":3, - "x":224.0, - "y":527.1428833007812 - }, - { - "type":"pointermove", - "timeStamp":216692441.0, - "pointer":3, - "x":224.0, - "y":530.5714111328125 - }, - { - "type":"pointermove", - "timeStamp":216692448.0, - "pointer":3, - "x":224.0, - "y":533.1428833007812 - }, - { - "type":"pointermove", - "timeStamp":216692456.0, - "pointer":3, - "x":224.0, - "y":535.4285888671875 - }, - { - "type":"pointermove", - "timeStamp":216692464.0, - "pointer":3, - "x":223.7142791748047, - "y":536.8571166992188 - }, - { - "type":"pointermove", - "timeStamp":216692472.0, - "pointer":3, - "x":223.7142791748047, - "y":538.2857055664062 - }, - { - "type":"pointerup", - "timeStamp":216692487.0, - "pointer":3, - "x":223.7142791748047, - "y":538.2857055664062 - }, - { - "type":"pointerdown", - "timeStamp":216692678.0, - "pointer":4, - "x":221.42857360839844, - "y":526.2857055664062 - }, - { - "type":"pointermove", - "timeStamp":216692701.0, - "pointer":4, - "x":220.57142639160156, - "y":514.8571166992188 - }, - { - "type":"pointermove", - "timeStamp":216692708.0, - "pointer":4, - "x":220.2857208251953, - "y":508.0 - }, - { - "type":"pointermove", - "timeStamp":216692716.0, - "pointer":4, - "x":220.2857208251953, - "y":498.0 - }, - { - "type":"pointermove", - "timeStamp":216692724.0, - "pointer":4, - "x":221.14285278320312, - "y":484.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216692732.0, - "pointer":4, - "x":221.7142791748047, - "y":469.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216692740.0, - "pointer":4, - "x":223.42857360839844, - "y":453.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216692748.0, - "pointer":4, - "x":225.7142791748047, - "y":436.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216692755.0, - "pointer":4, - "x":229.14285278320312, - "y":418.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216692763.0, - "pointer":4, - "x":232.85714721679688, - "y":400.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216692770.0, - "pointer":4, - "x":236.85714721679688, - "y":382.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216692778.0, - "pointer":4, - "x":241.14285278320312, - "y":366.0 - }, - { - "type":"pointermove", - "timeStamp":216692786.0, - "pointer":4, - "x":244.85714721679688, - "y":350.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216692793.0, - "pointer":4, - "x":249.14285278320312, - "y":335.4285583496094 - }, - { - "type":"pointerup", - "timeStamp":216692809.0, - "pointer":4, - "x":249.14285278320312, - "y":335.4285583496094 - }, - { - "type":"pointerdown", - "timeStamp":216693222.0, - "pointer":5, - "x":224.0, - "y":545.4285888671875 - }, - { - "type":"pointermove", - "timeStamp":216693245.0, - "pointer":5, - "x":224.0, - "y":545.4285888671875 - }, - { - "type":"pointermove", - "timeStamp":216693275.0, - "pointer":5, - "x":222.85714721679688, - "y":535.1428833007812 - }, - { - "type":"pointermove", - "timeStamp":216693284.0, - "pointer":5, - "x":222.85714721679688, - "y":528.8571166992188 - }, - { - "type":"pointermove", - "timeStamp":216693291.0, - "pointer":5, - "x":222.2857208251953, - "y":518.5714111328125 - }, - { - "type":"pointermove", - "timeStamp":216693299.0, - "pointer":5, - "x":222.0, - "y":503.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216693307.0, - "pointer":5, - "x":222.0, - "y":485.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216693314.0, - "pointer":5, - "x":221.7142791748047, - "y":464.0 - }, - { - "type":"pointermove", - "timeStamp":216693322.0, - "pointer":5, - "x":222.2857208251953, - "y":440.28570556640625 - }, - { - "type":"pointerup", - "timeStamp":216693337.0, - "pointer":5, - "x":222.2857208251953, - "y":440.28570556640625 - }, - { - "type":"pointerdown", - "timeStamp":216693985.0, - "pointer":6, - "x":208.0, - "y":544.0 - }, - { - "type":"pointermove", - "timeStamp":216694047.0, - "pointer":6, - "x":208.57142639160156, - "y":532.2857055664062 - }, - { - "type":"pointermove", - "timeStamp":216694054.0, - "pointer":6, - "x":208.85714721679688, - "y":525.7142944335938 - }, - { - "type":"pointermove", - "timeStamp":216694062.0, - "pointer":6, - "x":208.85714721679688, - "y":515.1428833007812 - }, - { - "type":"pointermove", - "timeStamp":216694070.0, - "pointer":6, - "x":208.0, - "y":501.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694077.0, - "pointer":6, - "x":207.42857360839844, - "y":487.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216694085.0, - "pointer":6, - "x":206.57142639160156, - "y":472.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216694092.0, - "pointer":6, - "x":206.57142639160156, - "y":458.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216694100.0, - "pointer":6, - "x":206.57142639160156, - "y":446.0 - }, - { - "type":"pointermove", - "timeStamp":216694108.0, - "pointer":6, - "x":206.57142639160156, - "y":434.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694116.0, - "pointer":6, - "x":207.14285278320312, - "y":423.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216694124.0, - "pointer":6, - "x":208.57142639160156, - "y":412.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216694131.0, - "pointer":6, - "x":209.7142791748047, - "y":402.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694139.0, - "pointer":6, - "x":211.7142791748047, - "y":393.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216694147.0, - "pointer":6, - "x":213.42857360839844, - "y":385.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216694154.0, - "pointer":6, - "x":215.42857360839844, - "y":378.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694162.0, - "pointer":6, - "x":217.42857360839844, - "y":371.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216694169.0, - "pointer":6, - "x":219.42857360839844, - "y":366.0 - }, - { - "type":"pointermove", - "timeStamp":216694177.0, - "pointer":6, - "x":221.42857360839844, - "y":360.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216694185.0, - "pointer":6, - "x":223.42857360839844, - "y":356.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216694193.0, - "pointer":6, - "x":225.14285278320312, - "y":352.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694201.0, - "pointer":6, - "x":226.85714721679688, - "y":348.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216694209.0, - "pointer":6, - "x":228.2857208251953, - "y":346.0 - }, - { - "type":"pointermove", - "timeStamp":216694216.0, - "pointer":6, - "x":229.14285278320312, - "y":343.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216694224.0, - "pointer":6, - "x":230.0, - "y":342.0 - }, - { - "type":"pointermove", - "timeStamp":216694232.0, - "pointer":6, - "x":230.57142639160156, - "y":340.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216694239.0, - "pointer":6, - "x":230.85714721679688, - "y":339.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216694247.0, - "pointer":6, - "x":230.85714721679688, - "y":339.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694262.0, - "pointer":6, - "x":230.2857208251953, - "y":342.0 - }, - { - "type":"pointermove", - "timeStamp":216694270.0, - "pointer":6, - "x":228.85714721679688, - "y":346.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694278.0, - "pointer":6, - "x":227.14285278320312, - "y":352.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216694286.0, - "pointer":6, - "x":225.42857360839844, - "y":359.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694294.0, - "pointer":6, - "x":223.7142791748047, - "y":367.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216694301.0, - "pointer":6, - "x":222.57142639160156, - "y":376.0 - }, - { - "type":"pointermove", - "timeStamp":216694309.0, - "pointer":6, - "x":221.42857360839844, - "y":384.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694317.0, - "pointer":6, - "x":220.85714721679688, - "y":392.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694324.0, - "pointer":6, - "x":220.0, - "y":400.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216694332.0, - "pointer":6, - "x":219.14285278320312, - "y":409.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216694339.0, - "pointer":6, - "x":218.85714721679688, - "y":419.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216694348.0, - "pointer":6, - "x":218.2857208251953, - "y":428.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216694356.0, - "pointer":6, - "x":218.2857208251953, - "y":438.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216694363.0, - "pointer":6, - "x":218.2857208251953, - "y":447.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216694371.0, - "pointer":6, - "x":218.2857208251953, - "y":455.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216694379.0, - "pointer":6, - "x":219.14285278320312, - "y":462.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216694386.0, - "pointer":6, - "x":220.0, - "y":469.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694394.0, - "pointer":6, - "x":221.14285278320312, - "y":475.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694401.0, - "pointer":6, - "x":222.0, - "y":480.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216694409.0, - "pointer":6, - "x":222.85714721679688, - "y":485.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694417.0, - "pointer":6, - "x":224.0, - "y":489.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216694425.0, - "pointer":6, - "x":224.85714721679688, - "y":492.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216694433.0, - "pointer":6, - "x":225.42857360839844, - "y":495.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694440.0, - "pointer":6, - "x":226.0, - "y":497.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216694448.0, - "pointer":6, - "x":226.2857208251953, - "y":498.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694456.0, - "pointer":6, - "x":226.2857208251953, - "y":498.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216694471.0, - "pointer":6, - "x":226.2857208251953, - "y":498.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694479.0, - "pointer":6, - "x":226.2857208251953, - "y":496.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216694486.0, - "pointer":6, - "x":226.2857208251953, - "y":493.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216694494.0, - "pointer":6, - "x":226.2857208251953, - "y":490.0 - }, - { - "type":"pointermove", - "timeStamp":216694502.0, - "pointer":6, - "x":226.2857208251953, - "y":486.0 - }, - { - "type":"pointermove", - "timeStamp":216694510.0, - "pointer":6, - "x":226.2857208251953, - "y":480.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216694518.0, - "pointer":6, - "x":226.2857208251953, - "y":475.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216694525.0, - "pointer":6, - "x":226.2857208251953, - "y":468.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216694533.0, - "pointer":6, - "x":226.2857208251953, - "y":461.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694541.0, - "pointer":6, - "x":226.2857208251953, - "y":452.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216694548.0, - "pointer":6, - "x":226.57142639160156, - "y":442.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694556.0, - "pointer":6, - "x":226.57142639160156, - "y":432.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694564.0, - "pointer":6, - "x":226.85714721679688, - "y":423.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694571.0, - "pointer":6, - "x":227.42857360839844, - "y":416.0 - }, - { - "type":"pointermove", - "timeStamp":216694580.0, - "pointer":6, - "x":227.7142791748047, - "y":410.0 - }, - { - "type":"pointermove", - "timeStamp":216694587.0, - "pointer":6, - "x":228.2857208251953, - "y":404.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694595.0, - "pointer":6, - "x":228.85714721679688, - "y":399.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216694603.0, - "pointer":6, - "x":229.14285278320312, - "y":395.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694610.0, - "pointer":6, - "x":229.42857360839844, - "y":392.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694618.0, - "pointer":6, - "x":229.7142791748047, - "y":390.0 - }, - { - "type":"pointermove", - "timeStamp":216694625.0, - "pointer":6, - "x":229.7142791748047, - "y":388.0 - }, - { - "type":"pointermove", - "timeStamp":216694633.0, - "pointer":6, - "x":229.7142791748047, - "y":386.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216694641.0, - "pointer":6, - "x":229.7142791748047, - "y":386.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694648.0, - "pointer":6, - "x":229.7142791748047, - "y":386.0 - }, - { - "type":"pointermove", - "timeStamp":216694657.0, - "pointer":6, - "x":228.85714721679688, - "y":386.0 - }, - { - "type":"pointermove", - "timeStamp":216694665.0, - "pointer":6, - "x":228.0, - "y":388.0 - }, - { - "type":"pointermove", - "timeStamp":216694672.0, - "pointer":6, - "x":226.0, - "y":392.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216694680.0, - "pointer":6, - "x":224.0, - "y":397.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216694688.0, - "pointer":6, - "x":222.0, - "y":404.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694695.0, - "pointer":6, - "x":219.7142791748047, - "y":411.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216694703.0, - "pointer":6, - "x":218.2857208251953, - "y":418.0 - }, - { - "type":"pointermove", - "timeStamp":216694710.0, - "pointer":6, - "x":217.14285278320312, - "y":425.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694718.0, - "pointer":6, - "x":215.7142791748047, - "y":433.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694726.0, - "pointer":6, - "x":214.85714721679688, - "y":442.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694734.0, - "pointer":6, - "x":214.0, - "y":454.0 - }, - { - "type":"pointermove", - "timeStamp":216694742.0, - "pointer":6, - "x":214.0, - "y":469.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694749.0, - "pointer":6, - "x":215.42857360839844, - "y":485.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694757.0, - "pointer":6, - "x":217.7142791748047, - "y":502.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216694765.0, - "pointer":6, - "x":221.14285278320312, - "y":521.4285888671875 - }, - { - "type":"pointermove", - "timeStamp":216694772.0, - "pointer":6, - "x":224.57142639160156, - "y":541.1428833007812 - }, - { - "type":"pointermove", - "timeStamp":216694780.0, - "pointer":6, - "x":229.14285278320312, - "y":561.1428833007812 - }, - { - "type":"pointermove", - "timeStamp":216694788.0, - "pointer":6, - "x":233.42857360839844, - "y":578.8571166992188 - }, - { - "type":"pointerup", - "timeStamp":216694802.0, - "pointer":6, - "x":233.42857360839844, - "y":578.8571166992188 - }, - { - "type":"pointerdown", - "timeStamp":216695344.0, - "pointer":7, - "x":253.42857360839844, - "y":310.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216695352.0, - "pointer":7, - "x":253.42857360839844, - "y":310.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216695359.0, - "pointer":7, - "x":252.85714721679688, - "y":318.0 - }, - { - "type":"pointermove", - "timeStamp":216695367.0, - "pointer":7, - "x":251.14285278320312, - "y":322.0 - }, - { - "type":"pointermove", - "timeStamp":216695375.0, - "pointer":7, - "x":248.85714721679688, - "y":327.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216695382.0, - "pointer":7, - "x":246.0, - "y":334.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216695390.0, - "pointer":7, - "x":242.57142639160156, - "y":344.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216695397.0, - "pointer":7, - "x":238.85714721679688, - "y":357.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216695406.0, - "pointer":7, - "x":235.7142791748047, - "y":371.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216695414.0, - "pointer":7, - "x":232.2857208251953, - "y":386.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216695421.0, - "pointer":7, - "x":229.42857360839844, - "y":402.0 - }, - { - "type":"pointermove", - "timeStamp":216695429.0, - "pointer":7, - "x":227.42857360839844, - "y":416.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216695437.0, - "pointer":7, - "x":226.2857208251953, - "y":431.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216695444.0, - "pointer":7, - "x":226.2857208251953, - "y":446.0 - }, - { - "type":"pointermove", - "timeStamp":216695452.0, - "pointer":7, - "x":227.7142791748047, - "y":460.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216695459.0, - "pointer":7, - "x":230.0, - "y":475.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216695467.0, - "pointer":7, - "x":232.2857208251953, - "y":489.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216695475.0, - "pointer":7, - "x":235.7142791748047, - "y":504.0 - }, - { - "type":"pointerup", - "timeStamp":216695490.0, - "pointer":7, - "x":235.7142791748047, - "y":504.0 - }, - { - "type":"pointerdown", - "timeStamp":216695885.0, - "pointer":8, - "x":238.85714721679688, - "y":524.0 - }, - { - "type":"pointermove", - "timeStamp":216695908.0, - "pointer":8, - "x":236.2857208251953, - "y":515.7142944335938 - }, - { - "type":"pointermove", - "timeStamp":216695916.0, - "pointer":8, - "x":234.85714721679688, - "y":509.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216695924.0, - "pointer":8, - "x":232.57142639160156, - "y":498.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216695931.0, - "pointer":8, - "x":230.57142639160156, - "y":483.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216695939.0, - "pointer":8, - "x":229.14285278320312, - "y":466.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216695947.0, - "pointer":8, - "x":229.14285278320312, - "y":446.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216695955.0, - "pointer":8, - "x":230.57142639160156, - "y":424.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216695963.0, - "pointer":8, - "x":232.57142639160156, - "y":402.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216695970.0, - "pointer":8, - "x":235.14285278320312, - "y":380.0 - }, - { - "type":"pointermove", - "timeStamp":216695978.0, - "pointer":8, - "x":238.57142639160156, - "y":359.4285583496094 - }, - { - "type":"pointerup", - "timeStamp":216695993.0, - "pointer":8, - "x":238.57142639160156, - "y":359.4285583496094 - }, - { - "type":"pointerdown", - "timeStamp":216696429.0, - "pointer":9, - "x":238.2857208251953, - "y":568.5714111328125 - }, - { - "type":"pointermove", - "timeStamp":216696459.0, - "pointer":9, - "x":234.0, - "y":560.0 - }, - { - "type":"pointermove", - "timeStamp":216696467.0, - "pointer":9, - "x":231.42857360839844, - "y":553.1428833007812 - }, - { - "type":"pointermove", - "timeStamp":216696475.0, - "pointer":9, - "x":228.2857208251953, - "y":543.1428833007812 - }, - { - "type":"pointermove", - "timeStamp":216696483.0, - "pointer":9, - "x":225.42857360839844, - "y":528.8571166992188 - }, - { - "type":"pointermove", - "timeStamp":216696491.0, - "pointer":9, - "x":223.14285278320312, - "y":512.2857055664062 - }, - { - "type":"pointermove", - "timeStamp":216696498.0, - "pointer":9, - "x":222.0, - "y":495.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216696506.0, - "pointer":9, - "x":221.7142791748047, - "y":477.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216696514.0, - "pointer":9, - "x":221.7142791748047, - "y":458.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216696521.0, - "pointer":9, - "x":223.14285278320312, - "y":438.0 - }, - { - "type":"pointermove", - "timeStamp":216696529.0, - "pointer":9, - "x":224.2857208251953, - "y":416.28570556640625 - }, - { - "type":"pointerup", - "timeStamp":216696544.0, - "pointer":9, - "x":224.2857208251953, - "y":416.28570556640625 - }, - { - "type":"pointerdown", - "timeStamp":216696974.0, - "pointer":10, - "x":218.57142639160156, - "y":530.5714111328125 - }, - { - "type":"pointermove", - "timeStamp":216697012.0, - "pointer":10, - "x":220.2857208251953, - "y":522.0 - }, - { - "type":"pointermove", - "timeStamp":216697020.0, - "pointer":10, - "x":221.14285278320312, - "y":517.7142944335938 - }, - { - "type":"pointermove", - "timeStamp":216697028.0, - "pointer":10, - "x":222.2857208251953, - "y":511.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216697036.0, - "pointer":10, - "x":224.0, - "y":504.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216697044.0, - "pointer":10, - "x":227.14285278320312, - "y":490.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216697052.0, - "pointer":10, - "x":229.42857360839844, - "y":474.0 - }, - { - "type":"pointermove", - "timeStamp":216697059.0, - "pointer":10, - "x":231.42857360839844, - "y":454.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216697067.0, - "pointer":10, - "x":233.7142791748047, - "y":431.1428527832031 - }, - { - "type":"pointerup", - "timeStamp":216697082.0, - "pointer":10, - "x":233.7142791748047, - "y":431.1428527832031 - }, - { - "type":"pointerdown", - "timeStamp":216697435.0, - "pointer":11, - "x":257.1428527832031, - "y":285.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216697465.0, - "pointer":11, - "x":251.7142791748047, - "y":296.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216697473.0, - "pointer":11, - "x":248.2857208251953, - "y":304.0 - }, - { - "type":"pointermove", - "timeStamp":216697481.0, - "pointer":11, - "x":244.57142639160156, - "y":314.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216697489.0, - "pointer":11, - "x":240.2857208251953, - "y":329.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216697497.0, - "pointer":11, - "x":236.85714721679688, - "y":345.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216697505.0, - "pointer":11, - "x":233.7142791748047, - "y":361.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216697512.0, - "pointer":11, - "x":231.14285278320312, - "y":378.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216697520.0, - "pointer":11, - "x":229.42857360839844, - "y":395.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216697528.0, - "pointer":11, - "x":229.42857360839844, - "y":412.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216697535.0, - "pointer":11, - "x":230.85714721679688, - "y":430.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216697543.0, - "pointer":11, - "x":233.42857360839844, - "y":449.71429443359375 - }, - { - "type":"pointerup", - "timeStamp":216697558.0, - "pointer":11, - "x":233.42857360839844, - "y":449.71429443359375 - }, - { - "type":"pointerdown", - "timeStamp":216697749.0, - "pointer":12, - "x":246.0, - "y":311.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216697780.0, - "pointer":12, - "x":244.57142639160156, - "y":318.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216697787.0, - "pointer":12, - "x":243.14285278320312, - "y":325.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216697795.0, - "pointer":12, - "x":241.42857360839844, - "y":336.0 - }, - { - "type":"pointermove", - "timeStamp":216697803.0, - "pointer":12, - "x":239.7142791748047, - "y":351.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216697811.0, - "pointer":12, - "x":238.2857208251953, - "y":368.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216697819.0, - "pointer":12, - "x":238.0, - "y":389.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216697826.0, - "pointer":12, - "x":239.14285278320312, - "y":412.0 - }, - { - "type":"pointermove", - "timeStamp":216697834.0, - "pointer":12, - "x":242.2857208251953, - "y":438.0 - }, - { - "type":"pointermove", - "timeStamp":216697842.0, - "pointer":12, - "x":247.42857360839844, - "y":466.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216697849.0, - "pointer":12, - "x":254.2857208251953, - "y":497.71429443359375 - }, - { - "type":"pointerup", - "timeStamp":216697864.0, - "pointer":12, - "x":254.2857208251953, - "y":497.71429443359375 - }, - { - "type":"pointerdown", - "timeStamp":216698321.0, - "pointer":13, - "x":250.0, - "y":306.0 - }, - { - "type":"pointermove", - "timeStamp":216698328.0, - "pointer":13, - "x":250.0, - "y":306.0 - }, - { - "type":"pointermove", - "timeStamp":216698344.0, - "pointer":13, - "x":249.14285278320312, - "y":314.0 - }, - { - "type":"pointermove", - "timeStamp":216698351.0, - "pointer":13, - "x":247.42857360839844, - "y":319.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216698359.0, - "pointer":13, - "x":245.14285278320312, - "y":326.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216698366.0, - "pointer":13, - "x":241.7142791748047, - "y":339.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216698374.0, - "pointer":13, - "x":238.57142639160156, - "y":355.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216698382.0, - "pointer":13, - "x":236.2857208251953, - "y":374.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216698390.0, - "pointer":13, - "x":235.14285278320312, - "y":396.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216698398.0, - "pointer":13, - "x":236.57142639160156, - "y":421.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216698406.0, - "pointer":13, - "x":241.14285278320312, - "y":451.4285583496094 - }, - { - "type":"pointerup", - "timeStamp":216698421.0, - "pointer":13, - "x":241.14285278320312, - "y":451.4285583496094 - } +import 'package:flutter/gestures.dart'; + +final List<PointerEvent> velocityEventData = <PointerEvent>[ + const PointerDownEvent( + timeStamp: const Duration(milliseconds: 216690896), + pointer: 1, + position: const Point(270.0, 538.2857055664062) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216690906), + pointer: 1, + position: const Point(270.0, 538.2857055664062) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216690951), + pointer: 1, + position: const Point(270.0, 530.8571166992188) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216690959), + pointer: 1, + position: const Point(270.0, 526.8571166992188) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216690967), + pointer: 1, + position: const Point(270.0, 521.4285888671875) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216690975), + pointer: 1, + position: const Point(270.0, 515.4285888671875) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216690983), + pointer: 1, + position: const Point(270.0, 506.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216690991), + pointer: 1, + position: const Point(268.8571472167969, 496.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216690998), + pointer: 1, + position: const Point(267.4285583496094, 483.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691006), + pointer: 1, + position: const Point(266.28570556640625, 469.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691014), + pointer: 1, + position: const Point(265.4285583496094, 456.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691021), + pointer: 1, + position: const Point(264.28570556640625, 443.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691029), + pointer: 1, + position: const Point(264.0, 431.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691036), + pointer: 1, + position: const Point(263.4285583496094, 421.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691044), + pointer: 1, + position: const Point(263.4285583496094, 412.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691052), + pointer: 1, + position: const Point(263.4285583496094, 404.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691060), + pointer: 1, + position: const Point(263.4285583496094, 396.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691068), + pointer: 1, + position: const Point(264.5714416503906, 390.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691075), + pointer: 1, + position: const Point(265.1428527832031, 384.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691083), + pointer: 1, + position: const Point(266.0, 380.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691091), + pointer: 1, + position: const Point(266.5714416503906, 376.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691098), + pointer: 1, + position: const Point(267.1428527832031, 373.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691106), + pointer: 1, + position: const Point(267.71429443359375, 370.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691114), + pointer: 1, + position: const Point(268.28570556640625, 367.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691121), + pointer: 1, + position: const Point(268.5714416503906, 366.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691130), + pointer: 1, + position: const Point(268.8571472167969, 364.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691137), + pointer: 1, + position: const Point(269.1428527832031, 363.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691145), + pointer: 1, + position: const Point(269.1428527832031, 362.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691153), + pointer: 1, + position: const Point(269.4285583496094, 362.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691168), + pointer: 1, + position: const Point(268.5714416503906, 365.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691176), + pointer: 1, + position: const Point(267.1428527832031, 370.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691183), + pointer: 1, + position: const Point(265.4285583496094, 376.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691191), + pointer: 1, + position: const Point(263.1428527832031, 385.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691199), + pointer: 1, + position: const Point(261.4285583496094, 396.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691207), + pointer: 1, + position: const Point(259.71429443359375, 408.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691215), + pointer: 1, + position: const Point(258.28570556640625, 419.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691222), + pointer: 1, + position: const Point(257.4285583496094, 428.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691230), + pointer: 1, + position: const Point(256.28570556640625, 436.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691238), + pointer: 1, + position: const Point(255.7142791748047, 442.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691245), + pointer: 1, + position: const Point(255.14285278320312, 447.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691253), + pointer: 1, + position: const Point(254.85714721679688, 453.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691261), + pointer: 1, + position: const Point(254.57142639160156, 458.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691268), + pointer: 1, + position: const Point(254.2857208251953, 463.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691276), + pointer: 1, + position: const Point(254.2857208251953, 470.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691284), + pointer: 1, + position: const Point(254.2857208251953, 477.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691292), + pointer: 1, + position: const Point(255.7142791748047, 487.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691300), + pointer: 1, + position: const Point(256.8571472167969, 498.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691307), + pointer: 1, + position: const Point(258.28570556640625, 507.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691315), + pointer: 1, + position: const Point(259.4285583496094, 516.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691323), + pointer: 1, + position: const Point(260.28570556640625, 521.7142944335938) + ), + const PointerUpEvent( + timeStamp: const Duration(milliseconds: 216691338), + pointer: 1, + position: const Point(260.28570556640625, 521.7142944335938) + ), + const PointerDownEvent( + timeStamp: const Duration(milliseconds: 216691573), + pointer: 2, + position: const Point(266.0, 327.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691588), + pointer: 2, + position: const Point(266.0, 327.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691626), + pointer: 2, + position: const Point(261.1428527832031, 337.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691634), + pointer: 2, + position: const Point(258.28570556640625, 343.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691642), + pointer: 2, + position: const Point(254.57142639160156, 354.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691650), + pointer: 2, + position: const Point(250.2857208251953, 368.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691657), + pointer: 2, + position: const Point(247.42857360839844, 382.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691665), + pointer: 2, + position: const Point(245.14285278320312, 397.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691673), + pointer: 2, + position: const Point(243.14285278320312, 411.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691680), + pointer: 2, + position: const Point(242.2857208251953, 426.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691688), + pointer: 2, + position: const Point(241.7142791748047, 440.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691696), + pointer: 2, + position: const Point(241.7142791748047, 454.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691703), + pointer: 2, + position: const Point(242.57142639160156, 467.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691712), + pointer: 2, + position: const Point(243.42857360839844, 477.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691720), + pointer: 2, + position: const Point(244.85714721679688, 485.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691727), + pointer: 2, + position: const Point(246.2857208251953, 493.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691735), + pointer: 2, + position: const Point(248.0, 499.71429443359375) + ), + const PointerUpEvent( + timeStamp: const Duration(milliseconds: 216691750), + pointer: 2, + position: const Point(248.0, 499.71429443359375) + ), + const PointerDownEvent( + timeStamp: const Duration(milliseconds: 216692255), + pointer: 3, + position: const Point(249.42857360839844, 351.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692270), + pointer: 3, + position: const Point(249.42857360839844, 351.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692309), + pointer: 3, + position: const Point(246.2857208251953, 361.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692317), + pointer: 3, + position: const Point(244.0, 368.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692325), + pointer: 3, + position: const Point(241.42857360839844, 377.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692333), + pointer: 3, + position: const Point(237.7142791748047, 391.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692340), + pointer: 3, + position: const Point(235.14285278320312, 406.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692348), + pointer: 3, + position: const Point(232.57142639160156, 421.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692356), + pointer: 3, + position: const Point(230.2857208251953, 436.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692363), + pointer: 3, + position: const Point(228.2857208251953, 451.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692371), + pointer: 3, + position: const Point(227.42857360839844, 466.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692378), + pointer: 3, + position: const Point(226.2857208251953, 479.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692387), + pointer: 3, + position: const Point(225.7142791748047, 491.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692395), + pointer: 3, + position: const Point(225.14285278320312, 501.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692402), + pointer: 3, + position: const Point(224.85714721679688, 509.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692410), + pointer: 3, + position: const Point(224.57142639160156, 514.8571166992188) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692418), + pointer: 3, + position: const Point(224.2857208251953, 519.4285888671875) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692425), + pointer: 3, + position: const Point(224.0, 523.4285888671875) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692433), + pointer: 3, + position: const Point(224.0, 527.1428833007812) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692441), + pointer: 3, + position: const Point(224.0, 530.5714111328125) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692448), + pointer: 3, + position: const Point(224.0, 533.1428833007812) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692456), + pointer: 3, + position: const Point(224.0, 535.4285888671875) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692464), + pointer: 3, + position: const Point(223.7142791748047, 536.8571166992188) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692472), + pointer: 3, + position: const Point(223.7142791748047, 538.2857055664062) + ), + const PointerUpEvent( + timeStamp: const Duration(milliseconds: 216692487), + pointer: 3, + position: const Point(223.7142791748047, 538.2857055664062) + ), + const PointerDownEvent( + timeStamp: const Duration(milliseconds: 216692678), + pointer: 4, + position: const Point(221.42857360839844, 526.2857055664062) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692701), + pointer: 4, + position: const Point(220.57142639160156, 514.8571166992188) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692708), + pointer: 4, + position: const Point(220.2857208251953, 508.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692716), + pointer: 4, + position: const Point(220.2857208251953, 498.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692724), + pointer: 4, + position: const Point(221.14285278320312, 484.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692732), + pointer: 4, + position: const Point(221.7142791748047, 469.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692740), + pointer: 4, + position: const Point(223.42857360839844, 453.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692748), + pointer: 4, + position: const Point(225.7142791748047, 436.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692755), + pointer: 4, + position: const Point(229.14285278320312, 418.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692763), + pointer: 4, + position: const Point(232.85714721679688, 400.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692770), + pointer: 4, + position: const Point(236.85714721679688, 382.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692778), + pointer: 4, + position: const Point(241.14285278320312, 366.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692786), + pointer: 4, + position: const Point(244.85714721679688, 350.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692793), + pointer: 4, + position: const Point(249.14285278320312, 335.4285583496094) + ), + const PointerUpEvent( + timeStamp: const Duration(milliseconds: 216692809), + pointer: 4, + position: const Point(249.14285278320312, 335.4285583496094) + ), + const PointerDownEvent( + timeStamp: const Duration(milliseconds: 216693222), + pointer: 5, + position: const Point(224.0, 545.4285888671875) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216693245), + pointer: 5, + position: const Point(224.0, 545.4285888671875) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216693275), + pointer: 5, + position: const Point(222.85714721679688, 535.1428833007812) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216693284), + pointer: 5, + position: const Point(222.85714721679688, 528.8571166992188) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216693291), + pointer: 5, + position: const Point(222.2857208251953, 518.5714111328125) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216693299), + pointer: 5, + position: const Point(222.0, 503.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216693307), + pointer: 5, + position: const Point(222.0, 485.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216693314), + pointer: 5, + position: const Point(221.7142791748047, 464.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216693322), + pointer: 5, + position: const Point(222.2857208251953, 440.28570556640625) + ), + const PointerUpEvent( + timeStamp: const Duration(milliseconds: 216693337), + pointer: 5, + position: const Point(222.2857208251953, 440.28570556640625) + ), + const PointerDownEvent( + timeStamp: const Duration(milliseconds: 216693985), + pointer: 6, + position: const Point(208.0, 544.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694047), + pointer: 6, + position: const Point(208.57142639160156, 532.2857055664062) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694054), + pointer: 6, + position: const Point(208.85714721679688, 525.7142944335938) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694062), + pointer: 6, + position: const Point(208.85714721679688, 515.1428833007812) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694070), + pointer: 6, + position: const Point(208.0, 501.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694077), + pointer: 6, + position: const Point(207.42857360839844, 487.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694085), + pointer: 6, + position: const Point(206.57142639160156, 472.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694092), + pointer: 6, + position: const Point(206.57142639160156, 458.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694100), + pointer: 6, + position: const Point(206.57142639160156, 446.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694108), + pointer: 6, + position: const Point(206.57142639160156, 434.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694116), + pointer: 6, + position: const Point(207.14285278320312, 423.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694124), + pointer: 6, + position: const Point(208.57142639160156, 412.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694131), + pointer: 6, + position: const Point(209.7142791748047, 402.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694139), + pointer: 6, + position: const Point(211.7142791748047, 393.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694147), + pointer: 6, + position: const Point(213.42857360839844, 385.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694154), + pointer: 6, + position: const Point(215.42857360839844, 378.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694162), + pointer: 6, + position: const Point(217.42857360839844, 371.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694169), + pointer: 6, + position: const Point(219.42857360839844, 366.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694177), + pointer: 6, + position: const Point(221.42857360839844, 360.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694185), + pointer: 6, + position: const Point(223.42857360839844, 356.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694193), + pointer: 6, + position: const Point(225.14285278320312, 352.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694201), + pointer: 6, + position: const Point(226.85714721679688, 348.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694209), + pointer: 6, + position: const Point(228.2857208251953, 346.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694216), + pointer: 6, + position: const Point(229.14285278320312, 343.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694224), + pointer: 6, + position: const Point(230.0, 342.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694232), + pointer: 6, + position: const Point(230.57142639160156, 340.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694239), + pointer: 6, + position: const Point(230.85714721679688, 339.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694247), + pointer: 6, + position: const Point(230.85714721679688, 339.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694262), + pointer: 6, + position: const Point(230.2857208251953, 342.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694270), + pointer: 6, + position: const Point(228.85714721679688, 346.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694278), + pointer: 6, + position: const Point(227.14285278320312, 352.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694286), + pointer: 6, + position: const Point(225.42857360839844, 359.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694294), + pointer: 6, + position: const Point(223.7142791748047, 367.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694301), + pointer: 6, + position: const Point(222.57142639160156, 376.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694309), + pointer: 6, + position: const Point(221.42857360839844, 384.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694317), + pointer: 6, + position: const Point(220.85714721679688, 392.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694324), + pointer: 6, + position: const Point(220.0, 400.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694332), + pointer: 6, + position: const Point(219.14285278320312, 409.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694339), + pointer: 6, + position: const Point(218.85714721679688, 419.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694348), + pointer: 6, + position: const Point(218.2857208251953, 428.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694356), + pointer: 6, + position: const Point(218.2857208251953, 438.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694363), + pointer: 6, + position: const Point(218.2857208251953, 447.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694371), + pointer: 6, + position: const Point(218.2857208251953, 455.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694379), + pointer: 6, + position: const Point(219.14285278320312, 462.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694386), + pointer: 6, + position: const Point(220.0, 469.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694394), + pointer: 6, + position: const Point(221.14285278320312, 475.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694401), + pointer: 6, + position: const Point(222.0, 480.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694409), + pointer: 6, + position: const Point(222.85714721679688, 485.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694417), + pointer: 6, + position: const Point(224.0, 489.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694425), + pointer: 6, + position: const Point(224.85714721679688, 492.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694433), + pointer: 6, + position: const Point(225.42857360839844, 495.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694440), + pointer: 6, + position: const Point(226.0, 497.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694448), + pointer: 6, + position: const Point(226.2857208251953, 498.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694456), + pointer: 6, + position: const Point(226.2857208251953, 498.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694471), + pointer: 6, + position: const Point(226.2857208251953, 498.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694479), + pointer: 6, + position: const Point(226.2857208251953, 496.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694486), + pointer: 6, + position: const Point(226.2857208251953, 493.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694494), + pointer: 6, + position: const Point(226.2857208251953, 490.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694502), + pointer: 6, + position: const Point(226.2857208251953, 486.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694510), + pointer: 6, + position: const Point(226.2857208251953, 480.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694518), + pointer: 6, + position: const Point(226.2857208251953, 475.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694525), + pointer: 6, + position: const Point(226.2857208251953, 468.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694533), + pointer: 6, + position: const Point(226.2857208251953, 461.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694541), + pointer: 6, + position: const Point(226.2857208251953, 452.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694548), + pointer: 6, + position: const Point(226.57142639160156, 442.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694556), + pointer: 6, + position: const Point(226.57142639160156, 432.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694564), + pointer: 6, + position: const Point(226.85714721679688, 423.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694571), + pointer: 6, + position: const Point(227.42857360839844, 416.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694580), + pointer: 6, + position: const Point(227.7142791748047, 410.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694587), + pointer: 6, + position: const Point(228.2857208251953, 404.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694595), + pointer: 6, + position: const Point(228.85714721679688, 399.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694603), + pointer: 6, + position: const Point(229.14285278320312, 395.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694610), + pointer: 6, + position: const Point(229.42857360839844, 392.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694618), + pointer: 6, + position: const Point(229.7142791748047, 390.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694625), + pointer: 6, + position: const Point(229.7142791748047, 388.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694633), + pointer: 6, + position: const Point(229.7142791748047, 386.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694641), + pointer: 6, + position: const Point(229.7142791748047, 386.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694648), + pointer: 6, + position: const Point(229.7142791748047, 386.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694657), + pointer: 6, + position: const Point(228.85714721679688, 386.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694665), + pointer: 6, + position: const Point(228.0, 388.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694672), + pointer: 6, + position: const Point(226.0, 392.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694680), + pointer: 6, + position: const Point(224.0, 397.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694688), + pointer: 6, + position: const Point(222.0, 404.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694695), + pointer: 6, + position: const Point(219.7142791748047, 411.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694703), + pointer: 6, + position: const Point(218.2857208251953, 418.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694710), + pointer: 6, + position: const Point(217.14285278320312, 425.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694718), + pointer: 6, + position: const Point(215.7142791748047, 433.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694726), + pointer: 6, + position: const Point(214.85714721679688, 442.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694734), + pointer: 6, + position: const Point(214.0, 454.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694742), + pointer: 6, + position: const Point(214.0, 469.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694749), + pointer: 6, + position: const Point(215.42857360839844, 485.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694757), + pointer: 6, + position: const Point(217.7142791748047, 502.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694765), + pointer: 6, + position: const Point(221.14285278320312, 521.4285888671875) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694772), + pointer: 6, + position: const Point(224.57142639160156, 541.1428833007812) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694780), + pointer: 6, + position: const Point(229.14285278320312, 561.1428833007812) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694788), + pointer: 6, + position: const Point(233.42857360839844, 578.8571166992188) + ), + const PointerUpEvent( + timeStamp: const Duration(milliseconds: 216694802), + pointer: 6, + position: const Point(233.42857360839844, 578.8571166992188) + ), + const PointerDownEvent( + timeStamp: const Duration(milliseconds: 216695344), + pointer: 7, + position: const Point(253.42857360839844, 310.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695352), + pointer: 7, + position: const Point(253.42857360839844, 310.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695359), + pointer: 7, + position: const Point(252.85714721679688, 318.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695367), + pointer: 7, + position: const Point(251.14285278320312, 322.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695375), + pointer: 7, + position: const Point(248.85714721679688, 327.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695382), + pointer: 7, + position: const Point(246.0, 334.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695390), + pointer: 7, + position: const Point(242.57142639160156, 344.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695397), + pointer: 7, + position: const Point(238.85714721679688, 357.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695406), + pointer: 7, + position: const Point(235.7142791748047, 371.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695414), + pointer: 7, + position: const Point(232.2857208251953, 386.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695421), + pointer: 7, + position: const Point(229.42857360839844, 402.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695429), + pointer: 7, + position: const Point(227.42857360839844, 416.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695437), + pointer: 7, + position: const Point(226.2857208251953, 431.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695444), + pointer: 7, + position: const Point(226.2857208251953, 446.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695452), + pointer: 7, + position: const Point(227.7142791748047, 460.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695459), + pointer: 7, + position: const Point(230.0, 475.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695467), + pointer: 7, + position: const Point(232.2857208251953, 489.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695475), + pointer: 7, + position: const Point(235.7142791748047, 504.0) + ), + const PointerUpEvent( + timeStamp: const Duration(milliseconds: 216695490), + pointer: 7, + position: const Point(235.7142791748047, 504.0) + ), + const PointerDownEvent( + timeStamp: const Duration(milliseconds: 216695885), + pointer: 8, + position: const Point(238.85714721679688, 524.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695908), + pointer: 8, + position: const Point(236.2857208251953, 515.7142944335938) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695916), + pointer: 8, + position: const Point(234.85714721679688, 509.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695924), + pointer: 8, + position: const Point(232.57142639160156, 498.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695931), + pointer: 8, + position: const Point(230.57142639160156, 483.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695939), + pointer: 8, + position: const Point(229.14285278320312, 466.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695947), + pointer: 8, + position: const Point(229.14285278320312, 446.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695955), + pointer: 8, + position: const Point(230.57142639160156, 424.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695963), + pointer: 8, + position: const Point(232.57142639160156, 402.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695970), + pointer: 8, + position: const Point(235.14285278320312, 380.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695978), + pointer: 8, + position: const Point(238.57142639160156, 359.4285583496094) + ), + const PointerUpEvent( + timeStamp: const Duration(milliseconds: 216695993), + pointer: 8, + position: const Point(238.57142639160156, 359.4285583496094) + ), + const PointerDownEvent( + timeStamp: const Duration(milliseconds: 216696429), + pointer: 9, + position: const Point(238.2857208251953, 568.5714111328125) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216696459), + pointer: 9, + position: const Point(234.0, 560.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216696467), + pointer: 9, + position: const Point(231.42857360839844, 553.1428833007812) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216696475), + pointer: 9, + position: const Point(228.2857208251953, 543.1428833007812) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216696483), + pointer: 9, + position: const Point(225.42857360839844, 528.8571166992188) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216696491), + pointer: 9, + position: const Point(223.14285278320312, 512.2857055664062) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216696498), + pointer: 9, + position: const Point(222.0, 495.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216696506), + pointer: 9, + position: const Point(221.7142791748047, 477.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216696514), + pointer: 9, + position: const Point(221.7142791748047, 458.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216696521), + pointer: 9, + position: const Point(223.14285278320312, 438.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216696529), + pointer: 9, + position: const Point(224.2857208251953, 416.28570556640625) + ), + const PointerUpEvent( + timeStamp: const Duration(milliseconds: 216696544), + pointer: 9, + position: const Point(224.2857208251953, 416.28570556640625) + ), + const PointerDownEvent( + timeStamp: const Duration(milliseconds: 216696974), + pointer: 10, + position: const Point(218.57142639160156, 530.5714111328125) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697012), + pointer: 10, + position: const Point(220.2857208251953, 522.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697020), + pointer: 10, + position: const Point(221.14285278320312, 517.7142944335938) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697028), + pointer: 10, + position: const Point(222.2857208251953, 511.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697036), + pointer: 10, + position: const Point(224.0, 504.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697044), + pointer: 10, + position: const Point(227.14285278320312, 490.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697052), + pointer: 10, + position: const Point(229.42857360839844, 474.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697059), + pointer: 10, + position: const Point(231.42857360839844, 454.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697067), + pointer: 10, + position: const Point(233.7142791748047, 431.1428527832031) + ), + const PointerUpEvent( + timeStamp: const Duration(milliseconds: 216697082), + pointer: 10, + position: const Point(233.7142791748047, 431.1428527832031) + ), + const PointerDownEvent( + timeStamp: const Duration(milliseconds: 216697435), + pointer: 11, + position: const Point(257.1428527832031, 285.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697465), + pointer: 11, + position: const Point(251.7142791748047, 296.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697473), + pointer: 11, + position: const Point(248.2857208251953, 304.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697481), + pointer: 11, + position: const Point(244.57142639160156, 314.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697489), + pointer: 11, + position: const Point(240.2857208251953, 329.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697497), + pointer: 11, + position: const Point(236.85714721679688, 345.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697505), + pointer: 11, + position: const Point(233.7142791748047, 361.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697512), + pointer: 11, + position: const Point(231.14285278320312, 378.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697520), + pointer: 11, + position: const Point(229.42857360839844, 395.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697528), + pointer: 11, + position: const Point(229.42857360839844, 412.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697535), + pointer: 11, + position: const Point(230.85714721679688, 430.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697543), + pointer: 11, + position: const Point(233.42857360839844, 449.71429443359375) + ), + const PointerUpEvent( + timeStamp: const Duration(milliseconds: 216697558), + pointer: 11, + position: const Point(233.42857360839844, 449.71429443359375) + ), + const PointerDownEvent( + timeStamp: const Duration(milliseconds: 216697749), + pointer: 12, + position: const Point(246.0, 311.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697780), + pointer: 12, + position: const Point(244.57142639160156, 318.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697787), + pointer: 12, + position: const Point(243.14285278320312, 325.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697795), + pointer: 12, + position: const Point(241.42857360839844, 336.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697803), + pointer: 12, + position: const Point(239.7142791748047, 351.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697811), + pointer: 12, + position: const Point(238.2857208251953, 368.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697819), + pointer: 12, + position: const Point(238.0, 389.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697826), + pointer: 12, + position: const Point(239.14285278320312, 412.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697834), + pointer: 12, + position: const Point(242.2857208251953, 438.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697842), + pointer: 12, + position: const Point(247.42857360839844, 466.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697849), + pointer: 12, + position: const Point(254.2857208251953, 497.71429443359375) + ), + const PointerUpEvent( + timeStamp: const Duration(milliseconds: 216697864), + pointer: 12, + position: const Point(254.2857208251953, 497.71429443359375) + ), + const PointerDownEvent( + timeStamp: const Duration(milliseconds: 216698321), + pointer: 13, + position: const Point(250.0, 306.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216698328), + pointer: 13, + position: const Point(250.0, 306.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216698344), + pointer: 13, + position: const Point(249.14285278320312, 314.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216698351), + pointer: 13, + position: const Point(247.42857360839844, 319.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216698359), + pointer: 13, + position: const Point(245.14285278320312, 326.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216698366), + pointer: 13, + position: const Point(241.7142791748047, 339.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216698374), + pointer: 13, + position: const Point(238.57142639160156, 355.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216698382), + pointer: 13, + position: const Point(236.2857208251953, 374.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216698390), + pointer: 13, + position: const Point(235.14285278320312, 396.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216698398), + pointer: 13, + position: const Point(236.57142639160156, 421.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216698406), + pointer: 13, + position: const Point(241.14285278320312, 451.4285583496094) + ), + const PointerUpEvent( + timeStamp: const Duration(milliseconds: 216698421), + pointer: 13, + position: const Point(241.14285278320312, 451.4285583496094) + ), ]; diff --git a/packages/unit/test/gestures/double_tap_test.dart b/packages/unit/test/gestures/double_tap_test.dart index ea8758b96cbfce0269b1bd42d0a606c28f6b9088..6ca9994dcaaace041f5c8708863b48e1f2cab22a 100644 --- a/packages/unit/test/gestures/double_tap_test.dart +++ b/packages/unit/test/gestures/double_tap_test.dart @@ -16,85 +16,63 @@ class TestGestureArenaMember extends GestureArenaMember { void main() { // Down/up pair 1: normal tap sequence - final PointerInputEvent down1 = new PointerInputEvent( + const PointerDownEvent down1 = const PointerDownEvent( pointer: 1, - type: 'pointerdown', - x: 10.0, - y: 10.0 + position: const Point(10.0, 10.0) ); - final PointerInputEvent up1 = new PointerInputEvent( + const PointerUpEvent up1 = const PointerUpEvent( pointer: 1, - type: 'pointerup', - x: 11.0, - y: 9.0 + position: const Point(11.0, 9.0) ); // Down/up pair 2: normal tap sequence close to pair 1 - final PointerInputEvent down2 = new PointerInputEvent( + const PointerDownEvent down2 = const PointerDownEvent( pointer: 2, - type: 'pointerdown', - x: 12.0, - y: 12.0 + position: const Point(12.0, 12.0) ); - final PointerInputEvent up2 = new PointerInputEvent( + const PointerUpEvent up2 = const PointerUpEvent( pointer: 2, - type: 'pointerup', - x: 13.0, - y: 11.0 + position: const Point(13.0, 11.0) ); // Down/up pair 3: normal tap sequence far away from pair 1 - final PointerInputEvent down3 = new PointerInputEvent( + const PointerDownEvent down3 = const PointerDownEvent( pointer: 3, - type: 'pointerdown', - x: 130.0, - y: 130.0 + position: const Point(130.0, 130.0) ); - final PointerInputEvent up3 = new PointerInputEvent( + const PointerUpEvent up3 = const PointerUpEvent( pointer: 3, - type: 'pointerup', - x: 131.0, - y: 129.0 + position: const Point(131.0, 129.0) ); // Down/move/up sequence 4: intervening motion - final PointerInputEvent down4 = new PointerInputEvent( + const PointerDownEvent down4 = const PointerDownEvent( pointer: 4, - type: 'pointerdown', - x: 10.0, - y: 10.0 + position: const Point(10.0, 10.0) ); - final PointerInputEvent move4 = new PointerInputEvent( + const PointerMoveEvent move4 = const PointerMoveEvent( pointer: 4, - type: 'pointermove', - x: 25.0, - y: 25.0 + position: const Point(25.0, 25.0) ); - final PointerInputEvent up4 = new PointerInputEvent( + const PointerUpEvent up4 = const PointerUpEvent( pointer: 4, - type: 'pointerup', - x: 25.0, - y: 25.0 + position: const Point(25.0, 25.0) ); // Down/up pair 5: normal tap sequence identical to pair 1 with different pointer - final PointerInputEvent down5 = new PointerInputEvent( + const PointerDownEvent down5 = const PointerDownEvent( pointer: 5, - type: 'pointerdown', - x: 10.0, - y: 10.0 + position: const Point(10.0, 10.0) ); - final PointerInputEvent up5 = new PointerInputEvent( + const PointerUpEvent up5 = const PointerUpEvent( pointer: 5, - type: 'pointerup', - x: 11.0, - y: 9.0 + position: const Point(11.0, 9.0) ); test('Should recognize double tap', () { @@ -546,7 +524,7 @@ void main() { expect(member.accepted, isFalse); - async.elapse(new Duration(milliseconds: 5000)); + async.elapse(const Duration(milliseconds: 5000)); expect(member.accepted, isTrue); }); diff --git a/packages/unit/test/gestures/long_press_test.dart b/packages/unit/test/gestures/long_press_test.dart index 1871112d47107708d41a6115fbe4674b0701c956..3297ded93d849fb9c68d9e521957c47aff01d166 100644 --- a/packages/unit/test/gestures/long_press_test.dart +++ b/packages/unit/test/gestures/long_press_test.dart @@ -2,18 +2,14 @@ import 'package:quiver/testing/async.dart'; import 'package:flutter/gestures.dart'; import 'package:test/test.dart'; -final PointerInputEvent down = new PointerInputEvent( +const PointerDownEvent down = const PointerDownEvent( pointer: 5, - type: 'pointerdown', - x: 10.0, - y: 10.0 + position: const Point(10.0, 10.0) ); -final PointerInputEvent up = new PointerInputEvent( +const PointerUpEvent up = const PointerUpEvent( pointer: 5, - type: 'pointerup', - x: 11.0, - y: 9.0 + position: const Point(11.0, 9.0) ); void main() { @@ -32,9 +28,9 @@ void main() { expect(longPressRecognized, isFalse); router.route(down); expect(longPressRecognized, isFalse); - async.elapse(new Duration(milliseconds: 300)); + async.elapse(const Duration(milliseconds: 300)); expect(longPressRecognized, isFalse); - async.elapse(new Duration(milliseconds: 700)); + async.elapse(const Duration(milliseconds: 700)); expect(longPressRecognized, isTrue); }); @@ -56,11 +52,11 @@ void main() { expect(longPressRecognized, isFalse); router.route(down); expect(longPressRecognized, isFalse); - async.elapse(new Duration(milliseconds: 300)); + async.elapse(const Duration(milliseconds: 300)); expect(longPressRecognized, isFalse); router.route(up); expect(longPressRecognized, isFalse); - async.elapse(new Duration(seconds: 1)); + async.elapse(const Duration(seconds: 1)); expect(longPressRecognized, isFalse); }); @@ -91,10 +87,10 @@ void main() { router.route(down); expect(tapDownRecognized, isFalse); expect(longPressRecognized, isFalse); - async.elapse(new Duration(milliseconds: 300)); + async.elapse(const Duration(milliseconds: 300)); expect(tapDownRecognized, isTrue); expect(longPressRecognized, isFalse); - async.elapse(new Duration(milliseconds: 700)); + async.elapse(const Duration(milliseconds: 700)); expect(tapDownRecognized, isTrue); expect(longPressRecognized, isTrue); }); diff --git a/packages/unit/test/gestures/lsq_solver_test.dart b/packages/unit/test/gestures/lsq_solver_test.dart index c322cf1439c9e7a9276d7629f6740c3f6aeeaa1b..54384c6acca1fbe3e4707cd90a7650db3c8d0de2 100644 --- a/packages/unit/test/gestures/lsq_solver_test.dart +++ b/packages/unit/test/gestures/lsq_solver_test.dart @@ -9,9 +9,9 @@ void main() { } test('Least-squares fit: linear polynomial to line', () { - List<double> x = [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]; - List<double> y = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]; - List<double> w = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]; + List<double> x = <double>[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]; + List<double> y = <double>[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]; + List<double> w = <double>[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]; LeastSquaresSolver solver = new LeastSquaresSolver(x, y, w); PolynomialFit fit = solver.solve(1); @@ -23,9 +23,9 @@ void main() { }); test('Least-squares fit: linear polynomial to sloped line', () { - List<double> x = [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]; - List<double> y = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]; - List<double> w = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]; + List<double> x = <double>[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]; + List<double> y = <double>[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]; + List<double> w = <double>[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]; LeastSquaresSolver solver = new LeastSquaresSolver(x, y, w); PolynomialFit fit = solver.solve(1); @@ -37,9 +37,9 @@ void main() { }); test('Least-squares fit: quadratic polynomial to line', () { - List<double> x = [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]; - List<double> y = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]; - List<double> w = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]; + List<double> x = <double>[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]; + List<double> y = <double>[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]; + List<double> w = <double>[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]; LeastSquaresSolver solver = new LeastSquaresSolver(x, y, w); PolynomialFit fit = solver.solve(2); @@ -52,9 +52,9 @@ void main() { }); test('Least-squares fit: quadratic polynomial to sloped line', () { - List<double> x = [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]; - List<double> y = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]; - List<double> w = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]; + List<double> x = <double>[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]; + List<double> y = <double>[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]; + List<double> w = <double>[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]; LeastSquaresSolver solver = new LeastSquaresSolver(x, y, w); PolynomialFit fit = solver.solve(2); diff --git a/packages/unit/test/gestures/pointer_router_test.dart b/packages/unit/test/gestures/pointer_router_test.dart index 994e9254f53ac261415067d66d17dc1bd378b937..8f66fff8366279e097fbad81719ff3c3ce98bc44 100644 --- a/packages/unit/test/gestures/pointer_router_test.dart +++ b/packages/unit/test/gestures/pointer_router_test.dart @@ -5,7 +5,7 @@ import 'package:test/test.dart'; void main() { test('Should route pointers', () { bool callbackRan = false; - void callback(PointerInputEvent event) { + void callback(PointerEvent event) { callbackRan = true; } diff --git a/packages/unit/test/gestures/scale_test.dart b/packages/unit/test/gestures/scale_test.dart index 8ff5e422df08757c7fb79d82217ae3b0a0dc181c..4916aa7b776e663f982f1db2471ff90f3c1f5f29 100644 --- a/packages/unit/test/gestures/scale_test.dart +++ b/packages/unit/test/gestures/scale_test.dart @@ -1,5 +1,3 @@ -import 'dart:ui' as ui; - import 'package:flutter_test/flutter_test.dart'; import 'package:flutter/gestures.dart'; import 'package:test/test.dart'; @@ -11,14 +9,14 @@ void main() { TapGestureRecognizer tap = new TapGestureRecognizer(router: router); bool didStartScale = false; - ui.Point updatedFocalPoint; - scale.onStart = (ui.Point focalPoint) { + Point updatedFocalPoint; + scale.onStart = (Point focalPoint) { didStartScale = true; updatedFocalPoint = focalPoint; }; double updatedScale; - scale.onUpdate = (double scale, ui.Point focalPoint) { + scale.onUpdate = (double scale, Point focalPoint) { updatedScale = scale; updatedFocalPoint = focalPoint; }; @@ -35,7 +33,7 @@ void main() { TestPointer pointer1 = new TestPointer(1); - PointerInputEvent down = pointer1.down(new Point(10.0, 10.0)); + PointerDownEvent down = pointer1.down(const Point(10.0, 10.0)); scale.addPointer(down); tap.addPointer(down); @@ -54,10 +52,10 @@ void main() { expect(didEndScale, isFalse); expect(didTap, isFalse); - router.route(pointer1.move(new Point(20.0, 30.0))); + router.route(pointer1.move(const Point(20.0, 30.0))); expect(didStartScale, isTrue); didStartScale = false; - expect(updatedFocalPoint, new ui.Point(20.0, 30.0)); + expect(updatedFocalPoint, const Point(20.0, 30.0)); updatedFocalPoint = null; expect(updatedScale, 1.0); updatedScale = null; @@ -66,7 +64,7 @@ void main() { // Two-finger scaling TestPointer pointer2 = new TestPointer(2); - PointerInputEvent down2 = pointer2.down(new Point(10.0, 20.0)); + PointerDownEvent down2 = pointer2.down(const Point(10.0, 20.0)); scale.addPointer(down2); tap.addPointer(down2); GestureArena.instance.close(2); @@ -79,10 +77,10 @@ void main() { expect(didStartScale, isFalse); // Zoom in - router.route(pointer2.move(new Point(0.0, 10.0))); + router.route(pointer2.move(const Point(0.0, 10.0))); expect(didStartScale, isTrue); didStartScale = false; - expect(updatedFocalPoint, new ui.Point(10.0, 20.0)); + expect(updatedFocalPoint, const Point(10.0, 20.0)); updatedFocalPoint = null; expect(updatedScale, 2.0); updatedScale = null; @@ -90,8 +88,8 @@ void main() { expect(didTap, isFalse); // Zoom out - router.route(pointer2.move(new Point(15.0, 25.0))); - expect(updatedFocalPoint, new ui.Point(17.5, 27.5)); + router.route(pointer2.move(const Point(15.0, 25.0))); + expect(updatedFocalPoint, const Point(17.5, 27.5)); updatedFocalPoint = null; expect(updatedScale, 0.5); updatedScale = null; @@ -99,7 +97,7 @@ void main() { // Three-finger scaling TestPointer pointer3 = new TestPointer(3); - PointerInputEvent down3 = pointer3.down(new Point(25.0, 35.0)); + PointerDownEvent down3 = pointer3.down(const Point(25.0, 35.0)); scale.addPointer(down3); tap.addPointer(down3); GestureArena.instance.close(3); @@ -112,10 +110,10 @@ void main() { expect(didStartScale, isFalse); // Zoom in - router.route(pointer3.move(new Point(55.0, 65.0))); + router.route(pointer3.move(const Point(55.0, 65.0))); expect(didStartScale, isTrue); didStartScale = false; - expect(updatedFocalPoint, new ui.Point(30.0, 40.0)); + expect(updatedFocalPoint, const Point(30.0, 40.0)); updatedFocalPoint = null; expect(updatedScale, 5.0); updatedScale = null; @@ -123,11 +121,11 @@ void main() { expect(didTap, isFalse); // Return to original positions but with different fingers - router.route(pointer1.move(new Point(25.0, 35.0))); - router.route(pointer2.move(new Point(20.0, 30.0))); - router.route(pointer3.move(new Point(15.0, 25.0))); + router.route(pointer1.move(const Point(25.0, 35.0))); + router.route(pointer2.move(const Point(20.0, 30.0))); + router.route(pointer3.move(const Point(15.0, 25.0))); expect(didStartScale, isFalse); - expect(updatedFocalPoint, new ui.Point(20.0, 30.0)); + expect(updatedFocalPoint, const Point(20.0, 30.0)); updatedFocalPoint = null; expect(updatedScale, 1.0); updatedScale = null; @@ -143,10 +141,10 @@ void main() { expect(didTap, isFalse); // Continue scaling with two fingers - router.route(pointer3.move(new Point(10.0, 20.0))); + router.route(pointer3.move(const Point(10.0, 20.0))); expect(didStartScale, isTrue); didStartScale = false; - expect(updatedFocalPoint, new ui.Point(15.0, 25.0)); + expect(updatedFocalPoint, const Point(15.0, 25.0)); updatedFocalPoint = null; expect(updatedScale, 2.0); updatedScale = null; @@ -160,10 +158,10 @@ void main() { expect(didTap, isFalse); // Continue panning with one finger - router.route(pointer3.move(new Point(0.0, 0.0))); + router.route(pointer3.move(const Point(0.0, 0.0))); expect(didStartScale, isTrue); didStartScale = false; - expect(updatedFocalPoint, new ui.Point(0.0, 0.0)); + expect(updatedFocalPoint, const Point(0.0, 0.0)); updatedFocalPoint = null; expect(updatedScale, 1.0); updatedScale = null; diff --git a/packages/unit/test/gestures/scroll_test.dart b/packages/unit/test/gestures/scroll_test.dart index b4d5c32f8c2e34c3630117b41b06fabd15facca2..5280438d819fbdf50026c1e1951381f4ae1dc6bd 100644 --- a/packages/unit/test/gestures/scroll_test.dart +++ b/packages/unit/test/gestures/scroll_test.dart @@ -1,5 +1,3 @@ -import 'dart:ui' as ui; - import 'package:flutter_test/flutter_test.dart'; import 'package:flutter/gestures.dart'; import 'package:test/test.dart'; @@ -15,13 +13,13 @@ void main() { didStartPan = true; }; - ui.Offset updatedScrollDelta; - pan.onUpdate = (ui.Offset offset) { + Offset updatedScrollDelta; + pan.onUpdate = (Offset offset) { updatedScrollDelta = offset; }; bool didEndPan = false; - pan.onEnd = (ui.Offset velocity) { + pan.onEnd = (Offset velocity) { didEndPan = true; }; @@ -31,7 +29,7 @@ void main() { }; TestPointer pointer = new TestPointer(5); - PointerInputEvent down = pointer.down(new Point(10.0, 10.0)); + PointerDownEvent down = pointer.down(const Point(10.0, 10.0)); pan.addPointer(down); tap.addPointer(down); GestureArena.instance.close(5); @@ -46,17 +44,17 @@ void main() { expect(didEndPan, isFalse); expect(didTap, isFalse); - router.route(pointer.move(new Point(20.0, 20.0))); + router.route(pointer.move(const Point(20.0, 20.0))); expect(didStartPan, isTrue); didStartPan = false; - expect(updatedScrollDelta, new ui.Offset(10.0, 10.0)); + expect(updatedScrollDelta, const Offset(10.0, 10.0)); updatedScrollDelta = null; expect(didEndPan, isFalse); expect(didTap, isFalse); - router.route(pointer.move(new Point(20.0, 25.0))); + router.route(pointer.move(const Point(20.0, 25.0))); expect(didStartPan, isFalse); - expect(updatedScrollDelta, new ui.Offset(0.0, 5.0)); + expect(updatedScrollDelta, const Offset(0.0, 5.0)); updatedScrollDelta = null; expect(didEndPan, isFalse); expect(didTap, isFalse); diff --git a/packages/unit/test/gestures/tap_test.dart b/packages/unit/test/gestures/tap_test.dart index d1b8b7e054f8e265de1fb2e3de8801d36334a0a1..3722e2ad5975d372478982fd36233393cd8d2d04 100644 --- a/packages/unit/test/gestures/tap_test.dart +++ b/packages/unit/test/gestures/tap_test.dart @@ -10,55 +10,41 @@ class TestGestureArenaMember extends GestureArenaMember { void main() { // Down/up pair 1: normal tap sequence - final PointerInputEvent down1 = new PointerInputEvent( + const PointerDownEvent down1 = const PointerDownEvent( pointer: 1, - type: 'pointerdown', - x: 10.0, - y: 10.0 + position: const Point(10.0, 10.0) ); - final PointerInputEvent up1 = new PointerInputEvent( + const PointerUpEvent up1 = const PointerUpEvent( pointer: 1, - type: 'pointerup', - x: 11.0, - y: 9.0 + position: const Point(11.0, 9.0) ); // Down/up pair 2: normal tap sequence far away from pair 1 - final PointerInputEvent down2 = new PointerInputEvent( + const PointerDownEvent down2 = const PointerDownEvent( pointer: 2, - type: 'pointerdown', - x: 30.0, - y: 30.0 + position: const Point(30.0, 30.0) ); - final PointerInputEvent up2 = new PointerInputEvent( + const PointerUpEvent up2 = const PointerUpEvent( pointer: 2, - type: 'pointerup', - x: 31.0, - y: 29.0 + position: const Point(31.0, 29.0) ); // Down/move/up sequence 3: intervening motion - final PointerInputEvent down3 = new PointerInputEvent( + const PointerDownEvent down3 = const PointerDownEvent( pointer: 3, - type: 'pointerdown', - x: 10.0, - y: 10.0 + position: const Point(10.0, 10.0) ); - final PointerInputEvent move3 = new PointerInputEvent( + const PointerMoveEvent move3 = const PointerMoveEvent( pointer: 3, - type: 'pointermove', - x: 25.0, - y: 25.0 + position: const Point(25.0, 25.0) ); - final PointerInputEvent up3 = new PointerInputEvent( + const PointerUpEvent up3 = const PointerUpEvent( pointer: 3, - type: 'pointerup', - x: 25.0, - y: 25.0 + position: const Point(25.0, 25.0) ); test('Should recognize tap', () { diff --git a/packages/unit/test/gestures/velocity_tracker_data.dart b/packages/unit/test/gestures/velocity_tracker_data.dart index baa6c14166f9e5f92c8fa1a3115a609c55524820..9f87bfcd5dff23a3cb7c5ede540c5e2c062fe6c1 100644 --- a/packages/unit/test/gestures/velocity_tracker_data.dart +++ b/packages/unit/test/gestures/velocity_tracker_data.dart @@ -1,2144 +1,1534 @@ -final List<Map> velocityEventData = [ - { - "type":"pointerdown", - "timeStamp":216690896.0, - "pointer":1, - "x":270.0, - "y":538.2857055664062 - }, - { - "type":"pointermove", - "timeStamp":216690906.0, - "pointer":1, - "x":270.0, - "y":538.2857055664062 - }, - { - "type":"pointermove", - "timeStamp":216690951.0, - "pointer":1, - "x":270.0, - "y":530.8571166992188 - }, - { - "type":"pointermove", - "timeStamp":216690959.0, - "pointer":1, - "x":270.0, - "y":526.8571166992188 - }, - { - "type":"pointermove", - "timeStamp":216690967.0, - "pointer":1, - "x":270.0, - "y":521.4285888671875 - }, - { - "type":"pointermove", - "timeStamp":216690975.0, - "pointer":1, - "x":270.0, - "y":515.4285888671875 - }, - { - "type":"pointermove", - "timeStamp":216690983.0, - "pointer":1, - "x":270.0, - "y":506.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216690991.0, - "pointer":1, - "x":268.8571472167969, - "y":496.0 - }, - { - "type":"pointermove", - "timeStamp":216690998.0, - "pointer":1, - "x":267.4285583496094, - "y":483.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216691006.0, - "pointer":1, - "x":266.28570556640625, - "y":469.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216691014.0, - "pointer":1, - "x":265.4285583496094, - "y":456.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216691021.0, - "pointer":1, - "x":264.28570556640625, - "y":443.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216691029.0, - "pointer":1, - "x":264.0, - "y":431.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216691036.0, - "pointer":1, - "x":263.4285583496094, - "y":421.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216691044.0, - "pointer":1, - "x":263.4285583496094, - "y":412.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216691052.0, - "pointer":1, - "x":263.4285583496094, - "y":404.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216691060.0, - "pointer":1, - "x":263.4285583496094, - "y":396.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216691068.0, - "pointer":1, - "x":264.5714416503906, - "y":390.0 - }, - { - "type":"pointermove", - "timeStamp":216691075.0, - "pointer":1, - "x":265.1428527832031, - "y":384.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216691083.0, - "pointer":1, - "x":266.0, - "y":380.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216691091.0, - "pointer":1, - "x":266.5714416503906, - "y":376.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216691098.0, - "pointer":1, - "x":267.1428527832031, - "y":373.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216691106.0, - "pointer":1, - "x":267.71429443359375, - "y":370.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216691114.0, - "pointer":1, - "x":268.28570556640625, - "y":367.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216691121.0, - "pointer":1, - "x":268.5714416503906, - "y":366.0 - }, - { - "type":"pointermove", - "timeStamp":216691130.0, - "pointer":1, - "x":268.8571472167969, - "y":364.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216691137.0, - "pointer":1, - "x":269.1428527832031, - "y":363.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216691145.0, - "pointer":1, - "x":269.1428527832031, - "y":362.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216691153.0, - "pointer":1, - "x":269.4285583496094, - "y":362.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216691168.0, - "pointer":1, - "x":268.5714416503906, - "y":365.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216691176.0, - "pointer":1, - "x":267.1428527832031, - "y":370.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216691183.0, - "pointer":1, - "x":265.4285583496094, - "y":376.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216691191.0, - "pointer":1, - "x":263.1428527832031, - "y":385.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216691199.0, - "pointer":1, - "x":261.4285583496094, - "y":396.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216691207.0, - "pointer":1, - "x":259.71429443359375, - "y":408.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216691215.0, - "pointer":1, - "x":258.28570556640625, - "y":419.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216691222.0, - "pointer":1, - "x":257.4285583496094, - "y":428.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216691230.0, - "pointer":1, - "x":256.28570556640625, - "y":436.0 - }, - { - "type":"pointermove", - "timeStamp":216691238.0, - "pointer":1, - "x":255.7142791748047, - "y":442.0 - }, - { - "type":"pointermove", - "timeStamp":216691245.0, - "pointer":1, - "x":255.14285278320312, - "y":447.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216691253.0, - "pointer":1, - "x":254.85714721679688, - "y":453.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216691261.0, - "pointer":1, - "x":254.57142639160156, - "y":458.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216691268.0, - "pointer":1, - "x":254.2857208251953, - "y":463.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216691276.0, - "pointer":1, - "x":254.2857208251953, - "y":470.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216691284.0, - "pointer":1, - "x":254.2857208251953, - "y":477.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216691292.0, - "pointer":1, - "x":255.7142791748047, - "y":487.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216691300.0, - "pointer":1, - "x":256.8571472167969, - "y":498.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216691307.0, - "pointer":1, - "x":258.28570556640625, - "y":507.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216691315.0, - "pointer":1, - "x":259.4285583496094, - "y":516.0 - }, - { - "type":"pointermove", - "timeStamp":216691323.0, - "pointer":1, - "x":260.28570556640625, - "y":521.7142944335938 - }, - { - "type":"pointerup", - "timeStamp":216691338.0, - "pointer":1, - "x":260.28570556640625, - "y":521.7142944335938 - }, - { - "type":"pointerdown", - "timeStamp":216691573.0, - "pointer":2, - "x":266.0, - "y":327.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216691588.0, - "pointer":2, - "x":266.0, - "y":327.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216691626.0, - "pointer":2, - "x":261.1428527832031, - "y":337.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216691634.0, - "pointer":2, - "x":258.28570556640625, - "y":343.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216691642.0, - "pointer":2, - "x":254.57142639160156, - "y":354.0 - }, - { - "type":"pointermove", - "timeStamp":216691650.0, - "pointer":2, - "x":250.2857208251953, - "y":368.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216691657.0, - "pointer":2, - "x":247.42857360839844, - "y":382.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216691665.0, - "pointer":2, - "x":245.14285278320312, - "y":397.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216691673.0, - "pointer":2, - "x":243.14285278320312, - "y":411.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216691680.0, - "pointer":2, - "x":242.2857208251953, - "y":426.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216691688.0, - "pointer":2, - "x":241.7142791748047, - "y":440.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216691696.0, - "pointer":2, - "x":241.7142791748047, - "y":454.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216691703.0, - "pointer":2, - "x":242.57142639160156, - "y":467.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216691712.0, - "pointer":2, - "x":243.42857360839844, - "y":477.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216691720.0, - "pointer":2, - "x":244.85714721679688, - "y":485.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216691727.0, - "pointer":2, - "x":246.2857208251953, - "y":493.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216691735.0, - "pointer":2, - "x":248.0, - "y":499.71429443359375 - }, - { - "type":"pointerup", - "timeStamp":216691750.0, - "pointer":2, - "x":248.0, - "y":499.71429443359375 - }, - { - "type":"pointerdown", - "timeStamp":216692255.0, - "pointer":3, - "x":249.42857360839844, - "y":351.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216692270.0, - "pointer":3, - "x":249.42857360839844, - "y":351.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216692309.0, - "pointer":3, - "x":246.2857208251953, - "y":361.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216692317.0, - "pointer":3, - "x":244.0, - "y":368.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216692325.0, - "pointer":3, - "x":241.42857360839844, - "y":377.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216692333.0, - "pointer":3, - "x":237.7142791748047, - "y":391.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216692340.0, - "pointer":3, - "x":235.14285278320312, - "y":406.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216692348.0, - "pointer":3, - "x":232.57142639160156, - "y":421.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216692356.0, - "pointer":3, - "x":230.2857208251953, - "y":436.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216692363.0, - "pointer":3, - "x":228.2857208251953, - "y":451.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216692371.0, - "pointer":3, - "x":227.42857360839844, - "y":466.0 - }, - { - "type":"pointermove", - "timeStamp":216692378.0, - "pointer":3, - "x":226.2857208251953, - "y":479.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216692387.0, - "pointer":3, - "x":225.7142791748047, - "y":491.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216692395.0, - "pointer":3, - "x":225.14285278320312, - "y":501.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216692402.0, - "pointer":3, - "x":224.85714721679688, - "y":509.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216692410.0, - "pointer":3, - "x":224.57142639160156, - "y":514.8571166992188 - }, - { - "type":"pointermove", - "timeStamp":216692418.0, - "pointer":3, - "x":224.2857208251953, - "y":519.4285888671875 - }, - { - "type":"pointermove", - "timeStamp":216692425.0, - "pointer":3, - "x":224.0, - "y":523.4285888671875 - }, - { - "type":"pointermove", - "timeStamp":216692433.0, - "pointer":3, - "x":224.0, - "y":527.1428833007812 - }, - { - "type":"pointermove", - "timeStamp":216692441.0, - "pointer":3, - "x":224.0, - "y":530.5714111328125 - }, - { - "type":"pointermove", - "timeStamp":216692448.0, - "pointer":3, - "x":224.0, - "y":533.1428833007812 - }, - { - "type":"pointermove", - "timeStamp":216692456.0, - "pointer":3, - "x":224.0, - "y":535.4285888671875 - }, - { - "type":"pointermove", - "timeStamp":216692464.0, - "pointer":3, - "x":223.7142791748047, - "y":536.8571166992188 - }, - { - "type":"pointermove", - "timeStamp":216692472.0, - "pointer":3, - "x":223.7142791748047, - "y":538.2857055664062 - }, - { - "type":"pointerup", - "timeStamp":216692487.0, - "pointer":3, - "x":223.7142791748047, - "y":538.2857055664062 - }, - { - "type":"pointerdown", - "timeStamp":216692678.0, - "pointer":4, - "x":221.42857360839844, - "y":526.2857055664062 - }, - { - "type":"pointermove", - "timeStamp":216692701.0, - "pointer":4, - "x":220.57142639160156, - "y":514.8571166992188 - }, - { - "type":"pointermove", - "timeStamp":216692708.0, - "pointer":4, - "x":220.2857208251953, - "y":508.0 - }, - { - "type":"pointermove", - "timeStamp":216692716.0, - "pointer":4, - "x":220.2857208251953, - "y":498.0 - }, - { - "type":"pointermove", - "timeStamp":216692724.0, - "pointer":4, - "x":221.14285278320312, - "y":484.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216692732.0, - "pointer":4, - "x":221.7142791748047, - "y":469.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216692740.0, - "pointer":4, - "x":223.42857360839844, - "y":453.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216692748.0, - "pointer":4, - "x":225.7142791748047, - "y":436.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216692755.0, - "pointer":4, - "x":229.14285278320312, - "y":418.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216692763.0, - "pointer":4, - "x":232.85714721679688, - "y":400.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216692770.0, - "pointer":4, - "x":236.85714721679688, - "y":382.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216692778.0, - "pointer":4, - "x":241.14285278320312, - "y":366.0 - }, - { - "type":"pointermove", - "timeStamp":216692786.0, - "pointer":4, - "x":244.85714721679688, - "y":350.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216692793.0, - "pointer":4, - "x":249.14285278320312, - "y":335.4285583496094 - }, - { - "type":"pointerup", - "timeStamp":216692809.0, - "pointer":4, - "x":249.14285278320312, - "y":335.4285583496094 - }, - { - "type":"pointerdown", - "timeStamp":216693222.0, - "pointer":5, - "x":224.0, - "y":545.4285888671875 - }, - { - "type":"pointermove", - "timeStamp":216693245.0, - "pointer":5, - "x":224.0, - "y":545.4285888671875 - }, - { - "type":"pointermove", - "timeStamp":216693275.0, - "pointer":5, - "x":222.85714721679688, - "y":535.1428833007812 - }, - { - "type":"pointermove", - "timeStamp":216693284.0, - "pointer":5, - "x":222.85714721679688, - "y":528.8571166992188 - }, - { - "type":"pointermove", - "timeStamp":216693291.0, - "pointer":5, - "x":222.2857208251953, - "y":518.5714111328125 - }, - { - "type":"pointermove", - "timeStamp":216693299.0, - "pointer":5, - "x":222.0, - "y":503.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216693307.0, - "pointer":5, - "x":222.0, - "y":485.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216693314.0, - "pointer":5, - "x":221.7142791748047, - "y":464.0 - }, - { - "type":"pointermove", - "timeStamp":216693322.0, - "pointer":5, - "x":222.2857208251953, - "y":440.28570556640625 - }, - { - "type":"pointerup", - "timeStamp":216693337.0, - "pointer":5, - "x":222.2857208251953, - "y":440.28570556640625 - }, - { - "type":"pointerdown", - "timeStamp":216693985.0, - "pointer":6, - "x":208.0, - "y":544.0 - }, - { - "type":"pointermove", - "timeStamp":216694047.0, - "pointer":6, - "x":208.57142639160156, - "y":532.2857055664062 - }, - { - "type":"pointermove", - "timeStamp":216694054.0, - "pointer":6, - "x":208.85714721679688, - "y":525.7142944335938 - }, - { - "type":"pointermove", - "timeStamp":216694062.0, - "pointer":6, - "x":208.85714721679688, - "y":515.1428833007812 - }, - { - "type":"pointermove", - "timeStamp":216694070.0, - "pointer":6, - "x":208.0, - "y":501.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694077.0, - "pointer":6, - "x":207.42857360839844, - "y":487.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216694085.0, - "pointer":6, - "x":206.57142639160156, - "y":472.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216694092.0, - "pointer":6, - "x":206.57142639160156, - "y":458.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216694100.0, - "pointer":6, - "x":206.57142639160156, - "y":446.0 - }, - { - "type":"pointermove", - "timeStamp":216694108.0, - "pointer":6, - "x":206.57142639160156, - "y":434.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694116.0, - "pointer":6, - "x":207.14285278320312, - "y":423.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216694124.0, - "pointer":6, - "x":208.57142639160156, - "y":412.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216694131.0, - "pointer":6, - "x":209.7142791748047, - "y":402.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694139.0, - "pointer":6, - "x":211.7142791748047, - "y":393.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216694147.0, - "pointer":6, - "x":213.42857360839844, - "y":385.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216694154.0, - "pointer":6, - "x":215.42857360839844, - "y":378.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694162.0, - "pointer":6, - "x":217.42857360839844, - "y":371.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216694169.0, - "pointer":6, - "x":219.42857360839844, - "y":366.0 - }, - { - "type":"pointermove", - "timeStamp":216694177.0, - "pointer":6, - "x":221.42857360839844, - "y":360.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216694185.0, - "pointer":6, - "x":223.42857360839844, - "y":356.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216694193.0, - "pointer":6, - "x":225.14285278320312, - "y":352.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694201.0, - "pointer":6, - "x":226.85714721679688, - "y":348.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216694209.0, - "pointer":6, - "x":228.2857208251953, - "y":346.0 - }, - { - "type":"pointermove", - "timeStamp":216694216.0, - "pointer":6, - "x":229.14285278320312, - "y":343.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216694224.0, - "pointer":6, - "x":230.0, - "y":342.0 - }, - { - "type":"pointermove", - "timeStamp":216694232.0, - "pointer":6, - "x":230.57142639160156, - "y":340.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216694239.0, - "pointer":6, - "x":230.85714721679688, - "y":339.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216694247.0, - "pointer":6, - "x":230.85714721679688, - "y":339.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694262.0, - "pointer":6, - "x":230.2857208251953, - "y":342.0 - }, - { - "type":"pointermove", - "timeStamp":216694270.0, - "pointer":6, - "x":228.85714721679688, - "y":346.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694278.0, - "pointer":6, - "x":227.14285278320312, - "y":352.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216694286.0, - "pointer":6, - "x":225.42857360839844, - "y":359.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694294.0, - "pointer":6, - "x":223.7142791748047, - "y":367.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216694301.0, - "pointer":6, - "x":222.57142639160156, - "y":376.0 - }, - { - "type":"pointermove", - "timeStamp":216694309.0, - "pointer":6, - "x":221.42857360839844, - "y":384.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694317.0, - "pointer":6, - "x":220.85714721679688, - "y":392.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694324.0, - "pointer":6, - "x":220.0, - "y":400.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216694332.0, - "pointer":6, - "x":219.14285278320312, - "y":409.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216694339.0, - "pointer":6, - "x":218.85714721679688, - "y":419.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216694348.0, - "pointer":6, - "x":218.2857208251953, - "y":428.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216694356.0, - "pointer":6, - "x":218.2857208251953, - "y":438.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216694363.0, - "pointer":6, - "x":218.2857208251953, - "y":447.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216694371.0, - "pointer":6, - "x":218.2857208251953, - "y":455.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216694379.0, - "pointer":6, - "x":219.14285278320312, - "y":462.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216694386.0, - "pointer":6, - "x":220.0, - "y":469.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694394.0, - "pointer":6, - "x":221.14285278320312, - "y":475.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694401.0, - "pointer":6, - "x":222.0, - "y":480.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216694409.0, - "pointer":6, - "x":222.85714721679688, - "y":485.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694417.0, - "pointer":6, - "x":224.0, - "y":489.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216694425.0, - "pointer":6, - "x":224.85714721679688, - "y":492.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216694433.0, - "pointer":6, - "x":225.42857360839844, - "y":495.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694440.0, - "pointer":6, - "x":226.0, - "y":497.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216694448.0, - "pointer":6, - "x":226.2857208251953, - "y":498.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694456.0, - "pointer":6, - "x":226.2857208251953, - "y":498.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216694471.0, - "pointer":6, - "x":226.2857208251953, - "y":498.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694479.0, - "pointer":6, - "x":226.2857208251953, - "y":496.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216694486.0, - "pointer":6, - "x":226.2857208251953, - "y":493.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216694494.0, - "pointer":6, - "x":226.2857208251953, - "y":490.0 - }, - { - "type":"pointermove", - "timeStamp":216694502.0, - "pointer":6, - "x":226.2857208251953, - "y":486.0 - }, - { - "type":"pointermove", - "timeStamp":216694510.0, - "pointer":6, - "x":226.2857208251953, - "y":480.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216694518.0, - "pointer":6, - "x":226.2857208251953, - "y":475.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216694525.0, - "pointer":6, - "x":226.2857208251953, - "y":468.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216694533.0, - "pointer":6, - "x":226.2857208251953, - "y":461.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694541.0, - "pointer":6, - "x":226.2857208251953, - "y":452.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216694548.0, - "pointer":6, - "x":226.57142639160156, - "y":442.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694556.0, - "pointer":6, - "x":226.57142639160156, - "y":432.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694564.0, - "pointer":6, - "x":226.85714721679688, - "y":423.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694571.0, - "pointer":6, - "x":227.42857360839844, - "y":416.0 - }, - { - "type":"pointermove", - "timeStamp":216694580.0, - "pointer":6, - "x":227.7142791748047, - "y":410.0 - }, - { - "type":"pointermove", - "timeStamp":216694587.0, - "pointer":6, - "x":228.2857208251953, - "y":404.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694595.0, - "pointer":6, - "x":228.85714721679688, - "y":399.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216694603.0, - "pointer":6, - "x":229.14285278320312, - "y":395.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694610.0, - "pointer":6, - "x":229.42857360839844, - "y":392.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694618.0, - "pointer":6, - "x":229.7142791748047, - "y":390.0 - }, - { - "type":"pointermove", - "timeStamp":216694625.0, - "pointer":6, - "x":229.7142791748047, - "y":388.0 - }, - { - "type":"pointermove", - "timeStamp":216694633.0, - "pointer":6, - "x":229.7142791748047, - "y":386.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216694641.0, - "pointer":6, - "x":229.7142791748047, - "y":386.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694648.0, - "pointer":6, - "x":229.7142791748047, - "y":386.0 - }, - { - "type":"pointermove", - "timeStamp":216694657.0, - "pointer":6, - "x":228.85714721679688, - "y":386.0 - }, - { - "type":"pointermove", - "timeStamp":216694665.0, - "pointer":6, - "x":228.0, - "y":388.0 - }, - { - "type":"pointermove", - "timeStamp":216694672.0, - "pointer":6, - "x":226.0, - "y":392.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216694680.0, - "pointer":6, - "x":224.0, - "y":397.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216694688.0, - "pointer":6, - "x":222.0, - "y":404.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694695.0, - "pointer":6, - "x":219.7142791748047, - "y":411.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216694703.0, - "pointer":6, - "x":218.2857208251953, - "y":418.0 - }, - { - "type":"pointermove", - "timeStamp":216694710.0, - "pointer":6, - "x":217.14285278320312, - "y":425.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694718.0, - "pointer":6, - "x":215.7142791748047, - "y":433.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694726.0, - "pointer":6, - "x":214.85714721679688, - "y":442.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216694734.0, - "pointer":6, - "x":214.0, - "y":454.0 - }, - { - "type":"pointermove", - "timeStamp":216694742.0, - "pointer":6, - "x":214.0, - "y":469.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694749.0, - "pointer":6, - "x":215.42857360839844, - "y":485.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216694757.0, - "pointer":6, - "x":217.7142791748047, - "y":502.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216694765.0, - "pointer":6, - "x":221.14285278320312, - "y":521.4285888671875 - }, - { - "type":"pointermove", - "timeStamp":216694772.0, - "pointer":6, - "x":224.57142639160156, - "y":541.1428833007812 - }, - { - "type":"pointermove", - "timeStamp":216694780.0, - "pointer":6, - "x":229.14285278320312, - "y":561.1428833007812 - }, - { - "type":"pointermove", - "timeStamp":216694788.0, - "pointer":6, - "x":233.42857360839844, - "y":578.8571166992188 - }, - { - "type":"pointerup", - "timeStamp":216694802.0, - "pointer":6, - "x":233.42857360839844, - "y":578.8571166992188 - }, - { - "type":"pointerdown", - "timeStamp":216695344.0, - "pointer":7, - "x":253.42857360839844, - "y":310.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216695352.0, - "pointer":7, - "x":253.42857360839844, - "y":310.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216695359.0, - "pointer":7, - "x":252.85714721679688, - "y":318.0 - }, - { - "type":"pointermove", - "timeStamp":216695367.0, - "pointer":7, - "x":251.14285278320312, - "y":322.0 - }, - { - "type":"pointermove", - "timeStamp":216695375.0, - "pointer":7, - "x":248.85714721679688, - "y":327.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216695382.0, - "pointer":7, - "x":246.0, - "y":334.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216695390.0, - "pointer":7, - "x":242.57142639160156, - "y":344.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216695397.0, - "pointer":7, - "x":238.85714721679688, - "y":357.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216695406.0, - "pointer":7, - "x":235.7142791748047, - "y":371.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216695414.0, - "pointer":7, - "x":232.2857208251953, - "y":386.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216695421.0, - "pointer":7, - "x":229.42857360839844, - "y":402.0 - }, - { - "type":"pointermove", - "timeStamp":216695429.0, - "pointer":7, - "x":227.42857360839844, - "y":416.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216695437.0, - "pointer":7, - "x":226.2857208251953, - "y":431.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216695444.0, - "pointer":7, - "x":226.2857208251953, - "y":446.0 - }, - { - "type":"pointermove", - "timeStamp":216695452.0, - "pointer":7, - "x":227.7142791748047, - "y":460.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216695459.0, - "pointer":7, - "x":230.0, - "y":475.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216695467.0, - "pointer":7, - "x":232.2857208251953, - "y":489.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216695475.0, - "pointer":7, - "x":235.7142791748047, - "y":504.0 - }, - { - "type":"pointerup", - "timeStamp":216695490.0, - "pointer":7, - "x":235.7142791748047, - "y":504.0 - }, - { - "type":"pointerdown", - "timeStamp":216695885.0, - "pointer":8, - "x":238.85714721679688, - "y":524.0 - }, - { - "type":"pointermove", - "timeStamp":216695908.0, - "pointer":8, - "x":236.2857208251953, - "y":515.7142944335938 - }, - { - "type":"pointermove", - "timeStamp":216695916.0, - "pointer":8, - "x":234.85714721679688, - "y":509.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216695924.0, - "pointer":8, - "x":232.57142639160156, - "y":498.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216695931.0, - "pointer":8, - "x":230.57142639160156, - "y":483.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216695939.0, - "pointer":8, - "x":229.14285278320312, - "y":466.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216695947.0, - "pointer":8, - "x":229.14285278320312, - "y":446.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216695955.0, - "pointer":8, - "x":230.57142639160156, - "y":424.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216695963.0, - "pointer":8, - "x":232.57142639160156, - "y":402.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216695970.0, - "pointer":8, - "x":235.14285278320312, - "y":380.0 - }, - { - "type":"pointermove", - "timeStamp":216695978.0, - "pointer":8, - "x":238.57142639160156, - "y":359.4285583496094 - }, - { - "type":"pointerup", - "timeStamp":216695993.0, - "pointer":8, - "x":238.57142639160156, - "y":359.4285583496094 - }, - { - "type":"pointerdown", - "timeStamp":216696429.0, - "pointer":9, - "x":238.2857208251953, - "y":568.5714111328125 - }, - { - "type":"pointermove", - "timeStamp":216696459.0, - "pointer":9, - "x":234.0, - "y":560.0 - }, - { - "type":"pointermove", - "timeStamp":216696467.0, - "pointer":9, - "x":231.42857360839844, - "y":553.1428833007812 - }, - { - "type":"pointermove", - "timeStamp":216696475.0, - "pointer":9, - "x":228.2857208251953, - "y":543.1428833007812 - }, - { - "type":"pointermove", - "timeStamp":216696483.0, - "pointer":9, - "x":225.42857360839844, - "y":528.8571166992188 - }, - { - "type":"pointermove", - "timeStamp":216696491.0, - "pointer":9, - "x":223.14285278320312, - "y":512.2857055664062 - }, - { - "type":"pointermove", - "timeStamp":216696498.0, - "pointer":9, - "x":222.0, - "y":495.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216696506.0, - "pointer":9, - "x":221.7142791748047, - "y":477.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216696514.0, - "pointer":9, - "x":221.7142791748047, - "y":458.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216696521.0, - "pointer":9, - "x":223.14285278320312, - "y":438.0 - }, - { - "type":"pointermove", - "timeStamp":216696529.0, - "pointer":9, - "x":224.2857208251953, - "y":416.28570556640625 - }, - { - "type":"pointerup", - "timeStamp":216696544.0, - "pointer":9, - "x":224.2857208251953, - "y":416.28570556640625 - }, - { - "type":"pointerdown", - "timeStamp":216696974.0, - "pointer":10, - "x":218.57142639160156, - "y":530.5714111328125 - }, - { - "type":"pointermove", - "timeStamp":216697012.0, - "pointer":10, - "x":220.2857208251953, - "y":522.0 - }, - { - "type":"pointermove", - "timeStamp":216697020.0, - "pointer":10, - "x":221.14285278320312, - "y":517.7142944335938 - }, - { - "type":"pointermove", - "timeStamp":216697028.0, - "pointer":10, - "x":222.2857208251953, - "y":511.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216697036.0, - "pointer":10, - "x":224.0, - "y":504.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216697044.0, - "pointer":10, - "x":227.14285278320312, - "y":490.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216697052.0, - "pointer":10, - "x":229.42857360839844, - "y":474.0 - }, - { - "type":"pointermove", - "timeStamp":216697059.0, - "pointer":10, - "x":231.42857360839844, - "y":454.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216697067.0, - "pointer":10, - "x":233.7142791748047, - "y":431.1428527832031 - }, - { - "type":"pointerup", - "timeStamp":216697082.0, - "pointer":10, - "x":233.7142791748047, - "y":431.1428527832031 - }, - { - "type":"pointerdown", - "timeStamp":216697435.0, - "pointer":11, - "x":257.1428527832031, - "y":285.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216697465.0, - "pointer":11, - "x":251.7142791748047, - "y":296.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216697473.0, - "pointer":11, - "x":248.2857208251953, - "y":304.0 - }, - { - "type":"pointermove", - "timeStamp":216697481.0, - "pointer":11, - "x":244.57142639160156, - "y":314.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216697489.0, - "pointer":11, - "x":240.2857208251953, - "y":329.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216697497.0, - "pointer":11, - "x":236.85714721679688, - "y":345.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216697505.0, - "pointer":11, - "x":233.7142791748047, - "y":361.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216697512.0, - "pointer":11, - "x":231.14285278320312, - "y":378.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216697520.0, - "pointer":11, - "x":229.42857360839844, - "y":395.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216697528.0, - "pointer":11, - "x":229.42857360839844, - "y":412.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216697535.0, - "pointer":11, - "x":230.85714721679688, - "y":430.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216697543.0, - "pointer":11, - "x":233.42857360839844, - "y":449.71429443359375 - }, - { - "type":"pointerup", - "timeStamp":216697558.0, - "pointer":11, - "x":233.42857360839844, - "y":449.71429443359375 - }, - { - "type":"pointerdown", - "timeStamp":216697749.0, - "pointer":12, - "x":246.0, - "y":311.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216697780.0, - "pointer":12, - "x":244.57142639160156, - "y":318.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216697787.0, - "pointer":12, - "x":243.14285278320312, - "y":325.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216697795.0, - "pointer":12, - "x":241.42857360839844, - "y":336.0 - }, - { - "type":"pointermove", - "timeStamp":216697803.0, - "pointer":12, - "x":239.7142791748047, - "y":351.1428527832031 - }, - { - "type":"pointermove", - "timeStamp":216697811.0, - "pointer":12, - "x":238.2857208251953, - "y":368.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216697819.0, - "pointer":12, - "x":238.0, - "y":389.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216697826.0, - "pointer":12, - "x":239.14285278320312, - "y":412.0 - }, - { - "type":"pointermove", - "timeStamp":216697834.0, - "pointer":12, - "x":242.2857208251953, - "y":438.0 - }, - { - "type":"pointermove", - "timeStamp":216697842.0, - "pointer":12, - "x":247.42857360839844, - "y":466.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216697849.0, - "pointer":12, - "x":254.2857208251953, - "y":497.71429443359375 - }, - { - "type":"pointerup", - "timeStamp":216697864.0, - "pointer":12, - "x":254.2857208251953, - "y":497.71429443359375 - }, - { - "type":"pointerdown", - "timeStamp":216698321.0, - "pointer":13, - "x":250.0, - "y":306.0 - }, - { - "type":"pointermove", - "timeStamp":216698328.0, - "pointer":13, - "x":250.0, - "y":306.0 - }, - { - "type":"pointermove", - "timeStamp":216698344.0, - "pointer":13, - "x":249.14285278320312, - "y":314.0 - }, - { - "type":"pointermove", - "timeStamp":216698351.0, - "pointer":13, - "x":247.42857360839844, - "y":319.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216698359.0, - "pointer":13, - "x":245.14285278320312, - "y":326.8571472167969 - }, - { - "type":"pointermove", - "timeStamp":216698366.0, - "pointer":13, - "x":241.7142791748047, - "y":339.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216698374.0, - "pointer":13, - "x":238.57142639160156, - "y":355.71429443359375 - }, - { - "type":"pointermove", - "timeStamp":216698382.0, - "pointer":13, - "x":236.2857208251953, - "y":374.28570556640625 - }, - { - "type":"pointermove", - "timeStamp":216698390.0, - "pointer":13, - "x":235.14285278320312, - "y":396.5714416503906 - }, - { - "type":"pointermove", - "timeStamp":216698398.0, - "pointer":13, - "x":236.57142639160156, - "y":421.4285583496094 - }, - { - "type":"pointermove", - "timeStamp":216698406.0, - "pointer":13, - "x":241.14285278320312, - "y":451.4285583496094 - }, - { - "type":"pointerup", - "timeStamp":216698421.0, - "pointer":13, - "x":241.14285278320312, - "y":451.4285583496094 - } +import 'package:flutter/gestures.dart'; + +const List<PointerEvent> velocityEventData = const <PointerEvent>[ + const PointerDownEvent( + timeStamp: const Duration(milliseconds: 216690896), + pointer: 1, + position: const Point(270.0, 538.2857055664062) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216690906), + pointer: 1, + position: const Point(270.0, 538.2857055664062) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216690951), + pointer: 1, + position: const Point(270.0, 530.8571166992188) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216690959), + pointer: 1, + position: const Point(270.0, 526.8571166992188) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216690967), + pointer: 1, + position: const Point(270.0, 521.4285888671875) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216690975), + pointer: 1, + position: const Point(270.0, 515.4285888671875) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216690983), + pointer: 1, + position: const Point(270.0, 506.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216690991), + pointer: 1, + position: const Point(268.8571472167969, 496.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216690998), + pointer: 1, + position: const Point(267.4285583496094, 483.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691006), + pointer: 1, + position: const Point(266.28570556640625, 469.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691014), + pointer: 1, + position: const Point(265.4285583496094, 456.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691021), + pointer: 1, + position: const Point(264.28570556640625, 443.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691029), + pointer: 1, + position: const Point(264.0, 431.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691036), + pointer: 1, + position: const Point(263.4285583496094, 421.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691044), + pointer: 1, + position: const Point(263.4285583496094, 412.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691052), + pointer: 1, + position: const Point(263.4285583496094, 404.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691060), + pointer: 1, + position: const Point(263.4285583496094, 396.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691068), + pointer: 1, + position: const Point(264.5714416503906, 390.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691075), + pointer: 1, + position: const Point(265.1428527832031, 384.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691083), + pointer: 1, + position: const Point(266.0, 380.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691091), + pointer: 1, + position: const Point(266.5714416503906, 376.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691098), + pointer: 1, + position: const Point(267.1428527832031, 373.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691106), + pointer: 1, + position: const Point(267.71429443359375, 370.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691114), + pointer: 1, + position: const Point(268.28570556640625, 367.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691121), + pointer: 1, + position: const Point(268.5714416503906, 366.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691130), + pointer: 1, + position: const Point(268.8571472167969, 364.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691137), + pointer: 1, + position: const Point(269.1428527832031, 363.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691145), + pointer: 1, + position: const Point(269.1428527832031, 362.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691153), + pointer: 1, + position: const Point(269.4285583496094, 362.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691168), + pointer: 1, + position: const Point(268.5714416503906, 365.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691176), + pointer: 1, + position: const Point(267.1428527832031, 370.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691183), + pointer: 1, + position: const Point(265.4285583496094, 376.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691191), + pointer: 1, + position: const Point(263.1428527832031, 385.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691199), + pointer: 1, + position: const Point(261.4285583496094, 396.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691207), + pointer: 1, + position: const Point(259.71429443359375, 408.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691215), + pointer: 1, + position: const Point(258.28570556640625, 419.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691222), + pointer: 1, + position: const Point(257.4285583496094, 428.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691230), + pointer: 1, + position: const Point(256.28570556640625, 436.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691238), + pointer: 1, + position: const Point(255.7142791748047, 442.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691245), + pointer: 1, + position: const Point(255.14285278320312, 447.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691253), + pointer: 1, + position: const Point(254.85714721679688, 453.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691261), + pointer: 1, + position: const Point(254.57142639160156, 458.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691268), + pointer: 1, + position: const Point(254.2857208251953, 463.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691276), + pointer: 1, + position: const Point(254.2857208251953, 470.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691284), + pointer: 1, + position: const Point(254.2857208251953, 477.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691292), + pointer: 1, + position: const Point(255.7142791748047, 487.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691300), + pointer: 1, + position: const Point(256.8571472167969, 498.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691307), + pointer: 1, + position: const Point(258.28570556640625, 507.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691315), + pointer: 1, + position: const Point(259.4285583496094, 516.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691323), + pointer: 1, + position: const Point(260.28570556640625, 521.7142944335938) + ), + const PointerUpEvent( + timeStamp: const Duration(milliseconds: 216691338), + pointer: 1, + position: const Point(260.28570556640625, 521.7142944335938) + ), + const PointerDownEvent( + timeStamp: const Duration(milliseconds: 216691573), + pointer: 2, + position: const Point(266.0, 327.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691588), + pointer: 2, + position: const Point(266.0, 327.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691626), + pointer: 2, + position: const Point(261.1428527832031, 337.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691634), + pointer: 2, + position: const Point(258.28570556640625, 343.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691642), + pointer: 2, + position: const Point(254.57142639160156, 354.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691650), + pointer: 2, + position: const Point(250.2857208251953, 368.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691657), + pointer: 2, + position: const Point(247.42857360839844, 382.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691665), + pointer: 2, + position: const Point(245.14285278320312, 397.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691673), + pointer: 2, + position: const Point(243.14285278320312, 411.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691680), + pointer: 2, + position: const Point(242.2857208251953, 426.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691688), + pointer: 2, + position: const Point(241.7142791748047, 440.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691696), + pointer: 2, + position: const Point(241.7142791748047, 454.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691703), + pointer: 2, + position: const Point(242.57142639160156, 467.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691712), + pointer: 2, + position: const Point(243.42857360839844, 477.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691720), + pointer: 2, + position: const Point(244.85714721679688, 485.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691727), + pointer: 2, + position: const Point(246.2857208251953, 493.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216691735), + pointer: 2, + position: const Point(248.0, 499.71429443359375) + ), + const PointerUpEvent( + timeStamp: const Duration(milliseconds: 216691750), + pointer: 2, + position: const Point(248.0, 499.71429443359375) + ), + const PointerDownEvent( + timeStamp: const Duration(milliseconds: 216692255), + pointer: 3, + position: const Point(249.42857360839844, 351.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692270), + pointer: 3, + position: const Point(249.42857360839844, 351.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692309), + pointer: 3, + position: const Point(246.2857208251953, 361.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692317), + pointer: 3, + position: const Point(244.0, 368.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692325), + pointer: 3, + position: const Point(241.42857360839844, 377.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692333), + pointer: 3, + position: const Point(237.7142791748047, 391.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692340), + pointer: 3, + position: const Point(235.14285278320312, 406.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692348), + pointer: 3, + position: const Point(232.57142639160156, 421.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692356), + pointer: 3, + position: const Point(230.2857208251953, 436.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692363), + pointer: 3, + position: const Point(228.2857208251953, 451.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692371), + pointer: 3, + position: const Point(227.42857360839844, 466.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692378), + pointer: 3, + position: const Point(226.2857208251953, 479.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692387), + pointer: 3, + position: const Point(225.7142791748047, 491.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692395), + pointer: 3, + position: const Point(225.14285278320312, 501.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692402), + pointer: 3, + position: const Point(224.85714721679688, 509.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692410), + pointer: 3, + position: const Point(224.57142639160156, 514.8571166992188) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692418), + pointer: 3, + position: const Point(224.2857208251953, 519.4285888671875) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692425), + pointer: 3, + position: const Point(224.0, 523.4285888671875) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692433), + pointer: 3, + position: const Point(224.0, 527.1428833007812) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692441), + pointer: 3, + position: const Point(224.0, 530.5714111328125) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692448), + pointer: 3, + position: const Point(224.0, 533.1428833007812) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692456), + pointer: 3, + position: const Point(224.0, 535.4285888671875) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692464), + pointer: 3, + position: const Point(223.7142791748047, 536.8571166992188) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692472), + pointer: 3, + position: const Point(223.7142791748047, 538.2857055664062) + ), + const PointerUpEvent( + timeStamp: const Duration(milliseconds: 216692487), + pointer: 3, + position: const Point(223.7142791748047, 538.2857055664062) + ), + const PointerDownEvent( + timeStamp: const Duration(milliseconds: 216692678), + pointer: 4, + position: const Point(221.42857360839844, 526.2857055664062) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692701), + pointer: 4, + position: const Point(220.57142639160156, 514.8571166992188) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692708), + pointer: 4, + position: const Point(220.2857208251953, 508.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692716), + pointer: 4, + position: const Point(220.2857208251953, 498.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692724), + pointer: 4, + position: const Point(221.14285278320312, 484.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692732), + pointer: 4, + position: const Point(221.7142791748047, 469.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692740), + pointer: 4, + position: const Point(223.42857360839844, 453.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692748), + pointer: 4, + position: const Point(225.7142791748047, 436.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692755), + pointer: 4, + position: const Point(229.14285278320312, 418.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692763), + pointer: 4, + position: const Point(232.85714721679688, 400.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692770), + pointer: 4, + position: const Point(236.85714721679688, 382.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692778), + pointer: 4, + position: const Point(241.14285278320312, 366.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692786), + pointer: 4, + position: const Point(244.85714721679688, 350.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216692793), + pointer: 4, + position: const Point(249.14285278320312, 335.4285583496094) + ), + const PointerUpEvent( + timeStamp: const Duration(milliseconds: 216692809), + pointer: 4, + position: const Point(249.14285278320312, 335.4285583496094) + ), + const PointerDownEvent( + timeStamp: const Duration(milliseconds: 216693222), + pointer: 5, + position: const Point(224.0, 545.4285888671875) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216693245), + pointer: 5, + position: const Point(224.0, 545.4285888671875) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216693275), + pointer: 5, + position: const Point(222.85714721679688, 535.1428833007812) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216693284), + pointer: 5, + position: const Point(222.85714721679688, 528.8571166992188) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216693291), + pointer: 5, + position: const Point(222.2857208251953, 518.5714111328125) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216693299), + pointer: 5, + position: const Point(222.0, 503.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216693307), + pointer: 5, + position: const Point(222.0, 485.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216693314), + pointer: 5, + position: const Point(221.7142791748047, 464.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216693322), + pointer: 5, + position: const Point(222.2857208251953, 440.28570556640625) + ), + const PointerUpEvent( + timeStamp: const Duration(milliseconds: 216693337), + pointer: 5, + position: const Point(222.2857208251953, 440.28570556640625) + ), + const PointerDownEvent( + timeStamp: const Duration(milliseconds: 216693985), + pointer: 6, + position: const Point(208.0, 544.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694047), + pointer: 6, + position: const Point(208.57142639160156, 532.2857055664062) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694054), + pointer: 6, + position: const Point(208.85714721679688, 525.7142944335938) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694062), + pointer: 6, + position: const Point(208.85714721679688, 515.1428833007812) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694070), + pointer: 6, + position: const Point(208.0, 501.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694077), + pointer: 6, + position: const Point(207.42857360839844, 487.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694085), + pointer: 6, + position: const Point(206.57142639160156, 472.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694092), + pointer: 6, + position: const Point(206.57142639160156, 458.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694100), + pointer: 6, + position: const Point(206.57142639160156, 446.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694108), + pointer: 6, + position: const Point(206.57142639160156, 434.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694116), + pointer: 6, + position: const Point(207.14285278320312, 423.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694124), + pointer: 6, + position: const Point(208.57142639160156, 412.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694131), + pointer: 6, + position: const Point(209.7142791748047, 402.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694139), + pointer: 6, + position: const Point(211.7142791748047, 393.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694147), + pointer: 6, + position: const Point(213.42857360839844, 385.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694154), + pointer: 6, + position: const Point(215.42857360839844, 378.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694162), + pointer: 6, + position: const Point(217.42857360839844, 371.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694169), + pointer: 6, + position: const Point(219.42857360839844, 366.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694177), + pointer: 6, + position: const Point(221.42857360839844, 360.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694185), + pointer: 6, + position: const Point(223.42857360839844, 356.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694193), + pointer: 6, + position: const Point(225.14285278320312, 352.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694201), + pointer: 6, + position: const Point(226.85714721679688, 348.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694209), + pointer: 6, + position: const Point(228.2857208251953, 346.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694216), + pointer: 6, + position: const Point(229.14285278320312, 343.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694224), + pointer: 6, + position: const Point(230.0, 342.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694232), + pointer: 6, + position: const Point(230.57142639160156, 340.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694239), + pointer: 6, + position: const Point(230.85714721679688, 339.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694247), + pointer: 6, + position: const Point(230.85714721679688, 339.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694262), + pointer: 6, + position: const Point(230.2857208251953, 342.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694270), + pointer: 6, + position: const Point(228.85714721679688, 346.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694278), + pointer: 6, + position: const Point(227.14285278320312, 352.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694286), + pointer: 6, + position: const Point(225.42857360839844, 359.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694294), + pointer: 6, + position: const Point(223.7142791748047, 367.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694301), + pointer: 6, + position: const Point(222.57142639160156, 376.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694309), + pointer: 6, + position: const Point(221.42857360839844, 384.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694317), + pointer: 6, + position: const Point(220.85714721679688, 392.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694324), + pointer: 6, + position: const Point(220.0, 400.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694332), + pointer: 6, + position: const Point(219.14285278320312, 409.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694339), + pointer: 6, + position: const Point(218.85714721679688, 419.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694348), + pointer: 6, + position: const Point(218.2857208251953, 428.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694356), + pointer: 6, + position: const Point(218.2857208251953, 438.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694363), + pointer: 6, + position: const Point(218.2857208251953, 447.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694371), + pointer: 6, + position: const Point(218.2857208251953, 455.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694379), + pointer: 6, + position: const Point(219.14285278320312, 462.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694386), + pointer: 6, + position: const Point(220.0, 469.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694394), + pointer: 6, + position: const Point(221.14285278320312, 475.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694401), + pointer: 6, + position: const Point(222.0, 480.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694409), + pointer: 6, + position: const Point(222.85714721679688, 485.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694417), + pointer: 6, + position: const Point(224.0, 489.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694425), + pointer: 6, + position: const Point(224.85714721679688, 492.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694433), + pointer: 6, + position: const Point(225.42857360839844, 495.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694440), + pointer: 6, + position: const Point(226.0, 497.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694448), + pointer: 6, + position: const Point(226.2857208251953, 498.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694456), + pointer: 6, + position: const Point(226.2857208251953, 498.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694471), + pointer: 6, + position: const Point(226.2857208251953, 498.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694479), + pointer: 6, + position: const Point(226.2857208251953, 496.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694486), + pointer: 6, + position: const Point(226.2857208251953, 493.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694494), + pointer: 6, + position: const Point(226.2857208251953, 490.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694502), + pointer: 6, + position: const Point(226.2857208251953, 486.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694510), + pointer: 6, + position: const Point(226.2857208251953, 480.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694518), + pointer: 6, + position: const Point(226.2857208251953, 475.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694525), + pointer: 6, + position: const Point(226.2857208251953, 468.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694533), + pointer: 6, + position: const Point(226.2857208251953, 461.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694541), + pointer: 6, + position: const Point(226.2857208251953, 452.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694548), + pointer: 6, + position: const Point(226.57142639160156, 442.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694556), + pointer: 6, + position: const Point(226.57142639160156, 432.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694564), + pointer: 6, + position: const Point(226.85714721679688, 423.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694571), + pointer: 6, + position: const Point(227.42857360839844, 416.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694580), + pointer: 6, + position: const Point(227.7142791748047, 410.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694587), + pointer: 6, + position: const Point(228.2857208251953, 404.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694595), + pointer: 6, + position: const Point(228.85714721679688, 399.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694603), + pointer: 6, + position: const Point(229.14285278320312, 395.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694610), + pointer: 6, + position: const Point(229.42857360839844, 392.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694618), + pointer: 6, + position: const Point(229.7142791748047, 390.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694625), + pointer: 6, + position: const Point(229.7142791748047, 388.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694633), + pointer: 6, + position: const Point(229.7142791748047, 386.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694641), + pointer: 6, + position: const Point(229.7142791748047, 386.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694648), + pointer: 6, + position: const Point(229.7142791748047, 386.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694657), + pointer: 6, + position: const Point(228.85714721679688, 386.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694665), + pointer: 6, + position: const Point(228.0, 388.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694672), + pointer: 6, + position: const Point(226.0, 392.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694680), + pointer: 6, + position: const Point(224.0, 397.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694688), + pointer: 6, + position: const Point(222.0, 404.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694695), + pointer: 6, + position: const Point(219.7142791748047, 411.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694703), + pointer: 6, + position: const Point(218.2857208251953, 418.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694710), + pointer: 6, + position: const Point(217.14285278320312, 425.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694718), + pointer: 6, + position: const Point(215.7142791748047, 433.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694726), + pointer: 6, + position: const Point(214.85714721679688, 442.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694734), + pointer: 6, + position: const Point(214.0, 454.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694742), + pointer: 6, + position: const Point(214.0, 469.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694749), + pointer: 6, + position: const Point(215.42857360839844, 485.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694757), + pointer: 6, + position: const Point(217.7142791748047, 502.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694765), + pointer: 6, + position: const Point(221.14285278320312, 521.4285888671875) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694772), + pointer: 6, + position: const Point(224.57142639160156, 541.1428833007812) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694780), + pointer: 6, + position: const Point(229.14285278320312, 561.1428833007812) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216694788), + pointer: 6, + position: const Point(233.42857360839844, 578.8571166992188) + ), + const PointerUpEvent( + timeStamp: const Duration(milliseconds: 216694802), + pointer: 6, + position: const Point(233.42857360839844, 578.8571166992188) + ), + const PointerDownEvent( + timeStamp: const Duration(milliseconds: 216695344), + pointer: 7, + position: const Point(253.42857360839844, 310.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695352), + pointer: 7, + position: const Point(253.42857360839844, 310.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695359), + pointer: 7, + position: const Point(252.85714721679688, 318.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695367), + pointer: 7, + position: const Point(251.14285278320312, 322.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695375), + pointer: 7, + position: const Point(248.85714721679688, 327.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695382), + pointer: 7, + position: const Point(246.0, 334.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695390), + pointer: 7, + position: const Point(242.57142639160156, 344.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695397), + pointer: 7, + position: const Point(238.85714721679688, 357.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695406), + pointer: 7, + position: const Point(235.7142791748047, 371.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695414), + pointer: 7, + position: const Point(232.2857208251953, 386.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695421), + pointer: 7, + position: const Point(229.42857360839844, 402.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695429), + pointer: 7, + position: const Point(227.42857360839844, 416.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695437), + pointer: 7, + position: const Point(226.2857208251953, 431.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695444), + pointer: 7, + position: const Point(226.2857208251953, 446.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695452), + pointer: 7, + position: const Point(227.7142791748047, 460.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695459), + pointer: 7, + position: const Point(230.0, 475.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695467), + pointer: 7, + position: const Point(232.2857208251953, 489.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695475), + pointer: 7, + position: const Point(235.7142791748047, 504.0) + ), + const PointerUpEvent( + timeStamp: const Duration(milliseconds: 216695490), + pointer: 7, + position: const Point(235.7142791748047, 504.0) + ), + const PointerDownEvent( + timeStamp: const Duration(milliseconds: 216695885), + pointer: 8, + position: const Point(238.85714721679688, 524.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695908), + pointer: 8, + position: const Point(236.2857208251953, 515.7142944335938) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695916), + pointer: 8, + position: const Point(234.85714721679688, 509.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695924), + pointer: 8, + position: const Point(232.57142639160156, 498.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695931), + pointer: 8, + position: const Point(230.57142639160156, 483.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695939), + pointer: 8, + position: const Point(229.14285278320312, 466.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695947), + pointer: 8, + position: const Point(229.14285278320312, 446.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695955), + pointer: 8, + position: const Point(230.57142639160156, 424.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695963), + pointer: 8, + position: const Point(232.57142639160156, 402.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695970), + pointer: 8, + position: const Point(235.14285278320312, 380.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216695978), + pointer: 8, + position: const Point(238.57142639160156, 359.4285583496094) + ), + const PointerUpEvent( + timeStamp: const Duration(milliseconds: 216695993), + pointer: 8, + position: const Point(238.57142639160156, 359.4285583496094) + ), + const PointerDownEvent( + timeStamp: const Duration(milliseconds: 216696429), + pointer: 9, + position: const Point(238.2857208251953, 568.5714111328125) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216696459), + pointer: 9, + position: const Point(234.0, 560.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216696467), + pointer: 9, + position: const Point(231.42857360839844, 553.1428833007812) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216696475), + pointer: 9, + position: const Point(228.2857208251953, 543.1428833007812) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216696483), + pointer: 9, + position: const Point(225.42857360839844, 528.8571166992188) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216696491), + pointer: 9, + position: const Point(223.14285278320312, 512.2857055664062) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216696498), + pointer: 9, + position: const Point(222.0, 495.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216696506), + pointer: 9, + position: const Point(221.7142791748047, 477.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216696514), + pointer: 9, + position: const Point(221.7142791748047, 458.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216696521), + pointer: 9, + position: const Point(223.14285278320312, 438.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216696529), + pointer: 9, + position: const Point(224.2857208251953, 416.28570556640625) + ), + const PointerUpEvent( + timeStamp: const Duration(milliseconds: 216696544), + pointer: 9, + position: const Point(224.2857208251953, 416.28570556640625) + ), + const PointerDownEvent( + timeStamp: const Duration(milliseconds: 216696974), + pointer: 10, + position: const Point(218.57142639160156, 530.5714111328125) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697012), + pointer: 10, + position: const Point(220.2857208251953, 522.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697020), + pointer: 10, + position: const Point(221.14285278320312, 517.7142944335938) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697028), + pointer: 10, + position: const Point(222.2857208251953, 511.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697036), + pointer: 10, + position: const Point(224.0, 504.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697044), + pointer: 10, + position: const Point(227.14285278320312, 490.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697052), + pointer: 10, + position: const Point(229.42857360839844, 474.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697059), + pointer: 10, + position: const Point(231.42857360839844, 454.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697067), + pointer: 10, + position: const Point(233.7142791748047, 431.1428527832031) + ), + const PointerUpEvent( + timeStamp: const Duration(milliseconds: 216697082), + pointer: 10, + position: const Point(233.7142791748047, 431.1428527832031) + ), + const PointerDownEvent( + timeStamp: const Duration(milliseconds: 216697435), + pointer: 11, + position: const Point(257.1428527832031, 285.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697465), + pointer: 11, + position: const Point(251.7142791748047, 296.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697473), + pointer: 11, + position: const Point(248.2857208251953, 304.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697481), + pointer: 11, + position: const Point(244.57142639160156, 314.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697489), + pointer: 11, + position: const Point(240.2857208251953, 329.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697497), + pointer: 11, + position: const Point(236.85714721679688, 345.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697505), + pointer: 11, + position: const Point(233.7142791748047, 361.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697512), + pointer: 11, + position: const Point(231.14285278320312, 378.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697520), + pointer: 11, + position: const Point(229.42857360839844, 395.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697528), + pointer: 11, + position: const Point(229.42857360839844, 412.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697535), + pointer: 11, + position: const Point(230.85714721679688, 430.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697543), + pointer: 11, + position: const Point(233.42857360839844, 449.71429443359375) + ), + const PointerUpEvent( + timeStamp: const Duration(milliseconds: 216697558), + pointer: 11, + position: const Point(233.42857360839844, 449.71429443359375) + ), + const PointerDownEvent( + timeStamp: const Duration(milliseconds: 216697749), + pointer: 12, + position: const Point(246.0, 311.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697780), + pointer: 12, + position: const Point(244.57142639160156, 318.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697787), + pointer: 12, + position: const Point(243.14285278320312, 325.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697795), + pointer: 12, + position: const Point(241.42857360839844, 336.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697803), + pointer: 12, + position: const Point(239.7142791748047, 351.1428527832031) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697811), + pointer: 12, + position: const Point(238.2857208251953, 368.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697819), + pointer: 12, + position: const Point(238.0, 389.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697826), + pointer: 12, + position: const Point(239.14285278320312, 412.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697834), + pointer: 12, + position: const Point(242.2857208251953, 438.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697842), + pointer: 12, + position: const Point(247.42857360839844, 466.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216697849), + pointer: 12, + position: const Point(254.2857208251953, 497.71429443359375) + ), + const PointerUpEvent( + timeStamp: const Duration(milliseconds: 216697864), + pointer: 12, + position: const Point(254.2857208251953, 497.71429443359375) + ), + const PointerDownEvent( + timeStamp: const Duration(milliseconds: 216698321), + pointer: 13, + position: const Point(250.0, 306.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216698328), + pointer: 13, + position: const Point(250.0, 306.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216698344), + pointer: 13, + position: const Point(249.14285278320312, 314.0) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216698351), + pointer: 13, + position: const Point(247.42857360839844, 319.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216698359), + pointer: 13, + position: const Point(245.14285278320312, 326.8571472167969) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216698366), + pointer: 13, + position: const Point(241.7142791748047, 339.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216698374), + pointer: 13, + position: const Point(238.57142639160156, 355.71429443359375) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216698382), + pointer: 13, + position: const Point(236.2857208251953, 374.28570556640625) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216698390), + pointer: 13, + position: const Point(235.14285278320312, 396.5714416503906) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216698398), + pointer: 13, + position: const Point(236.57142639160156, 421.4285583496094) + ), + const PointerMoveEvent( + timeStamp: const Duration(milliseconds: 216698406), + pointer: 13, + position: const Point(241.14285278320312, 451.4285583496094) + ), + const PointerUpEvent( + timeStamp: const Duration(milliseconds: 216698421), + pointer: 13, + position: const Point(241.14285278320312, 451.4285583496094) + ), ]; diff --git a/packages/unit/test/gestures/velocity_tracker_test.dart b/packages/unit/test/gestures/velocity_tracker_test.dart index a14aa8d3eceb01845171920c53b69709eb3b1145..64548c5b896e5c7ded437af3753f7ee65f16695f 100644 --- a/packages/unit/test/gestures/velocity_tracker_test.dart +++ b/packages/unit/test/gestures/velocity_tracker_test.dart @@ -8,56 +8,38 @@ bool _withinTolerance(double actual, double expected) { return diff.abs() < kTolerance; } -bool _checkVelocity(GestureVelocity actual, GestureVelocity expected) { - return (actual.isValid == expected.isValid) && - _withinTolerance(actual.x, expected.x) && - _withinTolerance(actual.y, expected.y); -} - -List<PointerInputEvent> _eventFromMap(List<Map> intermediate) { - List<PointerInputEvent> events = new List<PointerInputEvent>(); - for (Map entry in intermediate) - events.add(_eventFor(entry)); - return events; -} - -PointerInputEvent _eventFor(Map entry) { - PointerInputEvent result = new PointerInputEvent( - type: entry['type'], - timeStamp: new Duration(milliseconds: entry['timeStamp'].round()), - pointer: entry['pointer'], - x: entry['x'], - y: entry['y'] - ); - return result; +bool _checkVelocity(Offset actual, Offset expected) { + return (actual != null) + && _withinTolerance(actual.dx, expected.dx) + && _withinTolerance(actual.dy, expected.dy); } void main() { - List<PointerInputEvent> events = _eventFromMap(velocityEventData); - - List<GestureVelocity> expected = new List<GestureVelocity>(13); - expected[0] = new GestureVelocity(isValid: true, x: 219.5762939453125, y: 1304.6705322265625); - expected[1] = new GestureVelocity(isValid: true, x: 355.6900939941406, y: 967.1700439453125); - expected[2] = new GestureVelocity(isValid: true, x: 12.651158332824707, y: -36.9227180480957); - expected[3] = new GestureVelocity(isValid: true, x: 714.1383056640625, y: -2561.540283203125); - expected[4] = new GestureVelocity(isValid: true, x: -19.658065795898438, y: -2910.080322265625); - expected[5] = new GestureVelocity(isValid: true, x: 646.8700561523438, y: 2976.982421875); - expected[6] = new GestureVelocity(isValid: true, x: 396.6878967285156, y: 2106.204833984375); - expected[7] = new GestureVelocity(isValid: true, x: 298.3150634765625, y: -3660.821044921875); - expected[8] = new GestureVelocity(isValid: true, x: -1.7460877895355225, y: -3288.16162109375); - expected[9] = new GestureVelocity(isValid: true, x: 384.6415710449219, y: -2645.6484375); - expected[10] = new GestureVelocity(isValid: true, x: 176.3752899169922, y: 2711.24609375); - expected[11] = new GestureVelocity(isValid: true, x: 396.9254455566406, y: 4280.640625); - expected[12] = new GestureVelocity(isValid: true, x: -71.51288604736328, y: 3716.74560546875); + List<Offset> expected = const <Offset>[ + const Offset(219.5762939453125, 1304.6705322265625), + const Offset(355.6900939941406, 967.1700439453125), + const Offset(12.651158332824707, -36.9227180480957), + const Offset(714.1383056640625, -2561.540283203125), + const Offset(-19.658065795898438, -2910.080322265625), + const Offset(646.8700561523438, 2976.982421875), + const Offset(396.6878967285156, 2106.204833984375), + const Offset(298.3150634765625, -3660.821044921875), + const Offset(-1.7460877895355225, -3288.16162109375), + const Offset(384.6415710449219, -2645.6484375), + const Offset(176.3752899169922, 2711.24609375), + const Offset(396.9254455566406, 4280.640625), + const Offset(-71.51288604736328, 3716.74560546875), + ]; test('Velocity tracker gives expected results', () { VelocityTracker tracker = new VelocityTracker(); int i = 0; - for (PointerInputEvent event in events) { - if (event.type == 'pointerdown' || event.type == 'pointermove') - tracker.addPosition(event.timeStamp, event.x, event.y); - if (event.type == 'pointerup') { - _checkVelocity(tracker.getVelocity(), expected[i++]); + for (PointerEvent event in velocityEventData) { + if (event is PointerDownEvent || event is PointerMoveEvent) + tracker.addPosition(event.timeStamp, event.position); + if (event is PointerUpEvent) { + _checkVelocity(tracker.getVelocity(), expected[i]); + i += 1; } } });