Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
Front-End
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
abdullh.alsoleman
Front-End
Commits
e0107b05
Commit
e0107b05
authored
Dec 05, 2015
by
Ian Hickson
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #756 from Hixie/PointerInputEvent.kind
PointerInput refactor
parents
bc1b47e9
f1625556
Changes
41
Hide whitespace changes
Inline
Side-by-side
Showing
41 changed files
with
4065 additions
and
5057 deletions
+4065
-5057
main.dart
examples/mine_digger/lib/main.dart
+3
-3
sector_layout.dart
examples/rendering/lib/sector_layout.dart
+4
-3
solid_color_box.dart
examples/rendering/lib/solid_color_box.dart
+4
-3
touch_demo.dart
examples/rendering/touch_demo.dart
+15
-20
overlay_geometry.dart
examples/widgets/overlay_geometry.dart
+4
-3
drag.dart
packages/flutter/lib/src/gestures/drag.dart
+26
-28
events.dart
packages/flutter/lib/src/gestures/events.dart
+355
-57
long_press.dart
packages/flutter/lib/src/gestures/long_press.dart
+4
-3
lsq_solver.dart
packages/flutter/lib/src/gestures/lsq_solver.dart
+35
-42
multitap.dart
packages/flutter/lib/src/gestures/multitap.dart
+20
-26
pointer_router.dart
packages/flutter/lib/src/gestures/pointer_router.dart
+8
-8
recognizer.dart
packages/flutter/lib/src/gestures/recognizer.dart
+10
-10
scale.dart
packages/flutter/lib/src/gestures/scale.dart
+16
-22
tap.dart
packages/flutter/lib/src/gestures/tap.dart
+2
-4
velocity_tracker.dart
packages/flutter/lib/src/gestures/velocity_tracker.dart
+100
-99
slider.dart
packages/flutter/lib/src/material/slider.dart
+2
-2
switch.dart
packages/flutter/lib/src/material/switch.dart
+2
-2
toggleable.dart
packages/flutter/lib/src/material/toggleable.dart
+2
-2
binding.dart
packages/flutter/lib/src/rendering/binding.dart
+198
-152
box.dart
packages/flutter/lib/src/rendering/box.dart
+4
-3
hit_test.dart
packages/flutter/lib/src/rendering/hit_test.dart
+1
-1
object.dart
packages/flutter/lib/src/rendering/object.dart
+2
-2
proxy_box.dart
packages/flutter/lib/src/rendering/proxy_box.dart
+13
-10
basic.dart
packages/flutter/lib/src/widgets/basic.dart
+4
-4
drag_target.dart
packages/flutter/lib/src/widgets/drag_target.dart
+9
-13
event_recorder.dart
packages/flutter/lib/src/widgets/event_recorder.dart
+4
-10
gesture_detector.dart
packages/flutter/lib/src/widgets/gesture_detector.dart
+1
-1
test_pointer.dart
packages/flutter_test/lib/src/test_pointer.dart
+19
-30
widget_tester.dart
packages/flutter_test/lib/src/widget_tester.dart
+2
-2
README.md
packages/unit/benchmark/README.md
+7
-5
velocity_tracker_bench.dart
packages/unit/benchmark/gestures/velocity_tracker_bench.dart
+8
-24
velocity_tracker_data.dart
packages/unit/benchmark/gestures/velocity_tracker_data.dart
+1533
-2143
double_tap_test.dart
packages/unit/test/gestures/double_tap_test.dart
+23
-45
long_press_test.dart
packages/unit/test/gestures/long_press_test.dart
+10
-14
lsq_solver_test.dart
packages/unit/test/gestures/lsq_solver_test.dart
+12
-12
pointer_router_test.dart
packages/unit/test/gestures/pointer_router_test.dart
+1
-1
scale_test.dart
packages/unit/test/gestures/scale_test.dart
+22
-24
scroll_test.dart
packages/unit/test/gestures/scroll_test.dart
+8
-10
tap_test.dart
packages/unit/test/gestures/tap_test.dart
+14
-28
velocity_tracker_data.dart
packages/unit/test/gestures/velocity_tracker_data.dart
+1533
-2143
velocity_tracker_test.dart
packages/unit/test/gestures/velocity_tracker_test.dart
+25
-43
No files found.
examples/mine_digger/lib/main.dart
View file @
e0107b05
...
...
@@ -84,8 +84,8 @@ class MineDiggerState extends State<MineDigger> {
}
}
PointerEventListener
_pointerDownHandlerFor
(
int
posX
,
int
posY
)
{
return
(
Pointer
Input
Event
event
)
{
Pointer
Down
EventListener
_pointerDownHandlerFor
(
int
posX
,
int
posY
)
{
return
(
Pointer
Down
Event
event
)
{
if
(
event
.
buttons
==
1
)
{
probe
(
posX
,
posY
);
}
else
if
(
event
.
buttons
==
2
)
{
...
...
@@ -190,7 +190,7 @@ class MineDiggerState extends State<MineDigger> {
);
}
void
handleToolbarPointerDown
(
Pointer
Input
Event
event
)
{
void
handleToolbarPointerDown
(
Pointer
Down
Event
event
)
{
setState
(()
{
resetGame
();
});
...
...
examples/rendering/lib/sector_layout.dart
View file @
e0107b05
...
...
@@ -518,10 +518,11 @@ class RenderSolidColor extends RenderDecoratedSector {
deltaTheta
=
constraints
.
constrainDeltaTheta
(
desiredDeltaTheta
);
}
void
handleEvent
(
Input
Event
event
,
HitTestEntry
entry
)
{
if
(
event
.
type
==
'pointerdown'
)
void
handleEvent
(
Pointer
Event
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
);
}
}
}
examples/rendering/lib/solid_color_box.dart
View file @
e0107b05
...
...
@@ -41,10 +41,11 @@ class RenderSolidColorBox extends RenderDecoratedBox {
size
=
constraints
.
constrain
(
desiredSize
);
}
void
handleEvent
(
Input
Event
event
,
BoxHitTestEntry
entry
)
{
if
(
event
.
type
==
'pointerdown'
)
void
handleEvent
(
Pointer
Event
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
);
}
}
}
examples/rendering/touch_demo.dart
View file @
e0107b05
...
...
@@ -23,8 +23,8 @@ class Dot {
Dot
({
Color
color
})
:
_paint
=
new
Paint
()..
color
=
color
;
void
update
(
Pointer
Input
Event
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
()
{
...
...
examples/widgets/overlay_geometry.dart
View file @
e0107b05
...
...
@@ -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
,
Pointer
Input
Event
event
)
{
void
handlePointerDown
(
GlobalKey
target
,
Pointer
Down
Event
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:
(
Pointer
InputEvent
e
)
{
return
handlePointerDown
(
cardModel
.
targetKey
,
e
);
},
onPointerDown:
(
Pointer
DownEvent
event
)
{
return
handlePointerDown
(
cardModel
.
targetKey
,
event
);
},
child:
new
Card
(
key:
cardModel
.
targetKey
,
color:
cardModel
.
color
,
...
...
packages/flutter/lib/src/gestures/drag.dart
View file @
e0107b05
...
...
@@ -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
(
Pointer
Input
Event
event
);
T
_getDragDelta
(
PointerEvent
event
);
bool
get
_hasSufficientPendingDragDeltaToAccept
;
Map
<
int
,
VelocityTracker
>
_velocityTrackers
=
new
Map
<
int
,
VelocityTracker
>();
void
addPointer
(
Pointer
Input
Event
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
(
Pointer
Input
Event
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
(
Pointer
InputEvent
event
)
=>
event
.
dy
;
double
_getDragDelta
(
Pointer
Event
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
(
Pointer
InputEvent
event
)
=>
event
.
dx
;
double
_getDragDelta
(
Pointer
Event
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
;
}
...
...
packages/flutter/lib/src/gestures/events.dart
View file @
e0107b05
...
...
@@ -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
);
}
packages/flutter/lib/src/gestures/long_press.dart
View file @
e0107b05
...
...
@@ -18,11 +18,12 @@ class LongPressGestureRecognizer extends PrimaryPointerGestureRecognizer {
void
didExceedDeadline
()
{
resolve
(
GestureDisposition
.
accepted
);
onLongPress
();
if
(
onLongPress
!=
null
)
onLongPress
();
}
void
handlePrimaryPointer
(
Pointer
Input
Event
event
)
{
if
(
event
.
type
==
'pointerup'
)
void
handlePrimaryPointer
(
PointerEvent
event
)
{
if
(
event
is
PointerUpEvent
)
resolve
(
GestureDisposition
.
rejected
);
}
}
packages/flutter/lib/src/gestures/lsq_solver.dart
View file @
e0107b05
...
...
@@ -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
;
}
...
...
packages/flutter/lib/src/gestures/multitap.dart
View file @
e0107b05
...
...
@@ -22,11 +22,9 @@ typedef void GestureMultiTapCancelCallback(int pointer);
/// larger gesture.
class
_TapTracker
{
_TapTracker
({
Pointer
Input
Event
event
,
this
.
entry
})
_TapTracker
({
Pointer
Down
Event
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
(
Pointer
Input
Event
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
(
Pointer
Input
Event
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
(
Pointer
Input
Event
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
,
Pointer
Input
Event
event
,
PointerEvent
event
,
Duration
longTapDelay
})
:
gestureRecognizer
=
gestureRecognizer
,
_lastPosition
=
event
.
position
,
...
...
@@ -250,16 +244,16 @@ class _TapGesture extends _TapTracker {
Point
_lastPosition
;
Point
_finalPosition
;
void
handleEvent
(
Pointer
Input
Event
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
(
Pointer
Input
Event
event
)
{
void
addPointer
(
PointerEvent
event
)
{
assert
(!
_gestureMap
.
containsKey
(
event
.
pointer
));
_gestureMap
[
event
.
pointer
]
=
new
_TapGesture
(
gestureRecognizer:
this
,
...
...
packages/flutter/lib/src/gestures/pointer_router.dart
View file @
e0107b05
...
...
@@ -4,16 +4,16 @@
import
'events.dart'
;
/// A callback that receives a [Pointer
Input
Event]
typedef
void
PointerRoute
(
Pointer
Input
Event
event
);
/// A callback that receives a [PointerEvent]
typedef
void
PointerRoute
(
PointerEvent
event
);
/// A routing table for [Pointer
Input
Event] 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 [Pointer
Input
Event] 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 [Pointer
Input
Event] 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
(
Pointer
Input
Event
event
)
{
void
route
(
PointerEvent
event
)
{
List
<
PointerRoute
>
routes
=
_routeMap
[
event
.
pointer
];
if
(
routes
==
null
)
return
;
...
...
packages/flutter/lib/src/gestures/recognizer.dart
View file @
e0107b05
...
...
@@ -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
(
Pointer
Input
Event
event
);
void
addPointer
(
Pointer
Down
Event
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
(
Pointer
Input
Event
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
(
Pointer
Input
Event
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
(
Pointer
Input
Event
event
)
{
void
addPointer
(
Pointer
Down
Event
event
)
{
startTrackingPointer
(
event
.
pointer
);
if
(
state
==
GestureRecognizerState
.
ready
)
{
state
=
GestureRecognizerState
.
possible
;
...
...
@@ -106,11 +106,11 @@ abstract class PrimaryPointerGestureRecognizer extends OneSequenceGestureRecogni
}
}
void
handleEvent
(
Pointer
Input
Event
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
(
Pointer
Input
Event
event
);
void
handlePrimaryPointer
(
PointerEvent
event
);
/// Override to be notified with [deadline] is exceeded.
///
...
...
@@ -154,7 +154,7 @@ abstract class PrimaryPointerGestureRecognizer extends OneSequenceGestureRecogni
}
}
double
_getDistance
(
Pointer
Input
Event
event
)
{
double
_getDistance
(
PointerEvent
event
)
{
Offset
offset
=
event
.
position
-
initialPosition
;
return
offset
.
distance
;
}
...
...
packages/flutter/lib/src/gestures/scale.dart
View file @
e0107b05
...
...
@@ -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
(
Pointer
Input
Event
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
(
Pointer
Input
Event
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
;
...
...
packages/flutter/lib/src/gestures/tap.dart
View file @
e0107b05
...
...
@@ -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
(
Pointer
Input
Event
event
)
{
if
(
event
.
type
==
'pointerup'
)
{
void
handlePrimaryPointer
(
PointerEvent
event
)
{
if
(
event
is
PointerUpEvent
)
{
_finalPosition
=
event
.
position
;
_checkUp
();
}
...
...
packages/flutter/lib/src/gestures/velocity_tracker.dart
View file @
e0107b05
...
...
@@ -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
n
ew
GestureVelocity
(
isValid:
false
,
x:
0.0
,
y:
0.0
)
;
return
n
ull
;
}
static
_VelocityTrackerStrategy
_createStrategy
()
{
...
...
packages/flutter/lib/src/material/slider.dart
View file @
e0107b05
...
...
@@ -148,8 +148,8 @@ class _RenderSlider extends RenderConstrainedBox {
bool
hitTestSelf
(
Point
position
)
=>
true
;
void
handleEvent
(
Input
Event
event
,
BoxHitTestEntry
entry
)
{
if
(
event
.
type
==
'pointerdown'
&&
onChanged
!=
null
)
void
handleEvent
(
Pointer
Event
event
,
BoxHitTestEntry
entry
)
{
if
(
event
is
PointerDownEvent
&&
onChanged
!=
null
)
_drag
.
addPointer
(
event
);
}
...
...
packages/flutter/lib/src/material/switch.dart
View file @
e0107b05
...
...
@@ -164,8 +164,8 @@ class _RenderSwitch extends RenderToggleable {
reaction
.
reverse
();
}
void
handleEvent
(
Input
Event
event
,
BoxHitTestEntry
entry
)
{
if
(
event
.
type
==
'pointerdown'
&&
onChanged
!=
null
)
void
handleEvent
(
Pointer
Event
event
,
BoxHitTestEntry
entry
)
{
if
(
event
is
PointerDownEvent
&&
onChanged
!=
null
)
_drag
.
addPointer
(
event
);
super
.
handleEvent
(
event
,
entry
);
}
...
...
packages/flutter/lib/src/material/toggleable.dart
View file @
e0107b05
...
...
@@ -122,8 +122,8 @@ abstract class RenderToggleable extends RenderConstrainedBox {
bool
hitTestSelf
(
Point
position
)
=>
true
;
void
handleEvent
(
Input
Event
event
,
BoxHitTestEntry
entry
)
{
if
(
event
.
type
==
'pointerdown'
&&
isInteractive
)
void
handleEvent
(
Pointer
Event
event
,
BoxHitTestEntry
entry
)
{
if
(
event
is
PointerDownEvent
&&
isInteractive
)
_tap
.
addPointer
(
event
);
}
...
...
packages/flutter/lib/src/rendering/binding.dart
View file @
e0107b05
...
...
@@ -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
);
f
or
(
PointerInputEvent
event
in
_PointerEventConverter
.
convertPointerPacket
(
packet
))
{
_handlePointerInputEvent
(
event
);
}
final
mojo_bindings
.
Message
message
=
new
mojo_
bindings
.
Message
(
serializedPacket
,
<
mojo_
core
.
MojoHandle
>[],
serializedPacket
.
lengthInBytes
,
0
);
f
inal
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
(
Input
Event
event
,
HitTestResult
result
)
{
void
dispatchEvent
(
Pointer
Event
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
);
}
}
}
...
...
packages/flutter/lib/src/rendering/box.dart
View file @
e0107b05
...
...
@@ -636,14 +636,15 @@ abstract class RenderBox extends RenderObject {
Rect
get
paintBounds
=>
Point
.
origin
&
size
;
int
_debugActivePointers
=
0
;
void
handleEvent
(
Input
Event
event
,
HitTestEntry
entry
)
{
void
handleEvent
(
Pointer
Event
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
;
...
...
packages/flutter/lib/src/rendering/hit_test.dart
View file @
e0107b05
...
...
@@ -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
(
Input
Event
event
,
HitTestEntry
entry
);
void
handleEvent
(
Pointer
Event
event
,
HitTestEntry
entry
);
}
/// Data collected during a hit test about a specific [HitTestTarget].
...
...
packages/flutter/lib/src/rendering/object.dart
View file @
e0107b05
...
...
@@ -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
(
Input
Event
event
,
HitTestEntry
entry
)
{
}
/// Override this function to handle
pointer events that hit this render object.
void
handleEvent
(
Pointer
Event
event
,
HitTestEntry
entry
)
{
}
// HIT TESTING
...
...
packages/flutter/lib/src/rendering/proxy_box.dart
View file @
e0107b05
...
...
@@ -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
;
Pointer
Down
EventListener
onPointerDown
;
Pointer
Move
EventListener
onPointerMove
;
Pointer
Up
EventListener
onPointerUp
;
Pointer
Cancel
EventListener
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
(
Input
Event
event
,
HitTestEntry
entry
)
{
if
(
onPointerDown
!=
null
&&
event
.
type
==
'pointerdown'
)
void
handleEvent
(
Pointer
Event
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
);
}
...
...
packages/flutter/lib/src/widgets/basic.dart
View file @
e0107b05
...
...
@@ -1299,10 +1299,10 @@ class Listener extends OneChildRenderObjectWidget {
assert
(
behavior
!=
null
);
}
final
PointerEventListener
onPointerDown
;
final
PointerEventListener
onPointerMove
;
final
PointerEventListener
onPointerUp
;
final
PointerEventListener
onPointerCancel
;
final
Pointer
Down
EventListener
onPointerDown
;
final
Pointer
Move
EventListener
onPointerMove
;
final
Pointer
Up
EventListener
onPointerUp
;
final
Pointer
Cancel
EventListener
onPointerCancel
;
final
HitTestBehavior
behavior
;
RenderPointerListener
createRenderObject
()
=>
new
RenderPointerListener
(
...
...
packages/flutter/lib/src/widgets/drag_target.dart
View file @
e0107b05
...
...
@@ -135,7 +135,7 @@ class _DraggableState<T> extends State<DraggableBase<T>> implements GestureArena
GestureRecognizer
_recognizer
;
Map
<
int
,
GestureArenaEntry
>
_activePointers
=
<
int
,
GestureArenaEntry
>{};
void
_routePointer
(
Pointer
Input
Event
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
);
}
}
...
...
packages/flutter/lib/src/widgets/event_recorder.dart
View file @
e0107b05
...
...
@@ -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
<
PointerInput
Event
>
events
);
typedef
void
EventsReadyCallback
(
Iterable
<
Pointer
Event
>
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
(
Pointer
Input
Event
event
)
{
if
(
config
.
mode
==
EventRecorderMode
.
record
)
{
void
_recordEvent
(
PointerEvent
event
)
{
if
(
config
.
mode
==
EventRecorderMode
.
record
)
_events
.
add
(
event
);
}
}
Widget
build
(
BuildContext
context
)
{
...
...
packages/flutter/lib/src/widgets/gesture_detector.dart
View file @
e0107b05
...
...
@@ -210,7 +210,7 @@ class _GestureDetectorState extends State<GestureDetector> {
return
null
;
}
void
_handlePointerDown
(
Pointer
Input
Event
event
)
{
void
_handlePointerDown
(
Pointer
Down
Event
event
)
{
if
(
_tap
!=
null
)
_tap
.
addPointer
(
event
);
if
(
_doubleTap
!=
null
)
...
...
packages/flutter_test/lib/src/test_pointer.dart
View file @
e0107b05
...
...
@@ -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
;
Pointer
InputEvent
down
(
ui
.
Point
newLocation
,
{
Duration
timeStamp:
const
Duration
()
})
{
Pointer
DownEvent
down
(
Point
newLocation
,
{
Duration
timeStamp:
const
Duration
()
})
{
assert
(!
isDown
);
isDown
=
true
;
location
=
newLocation
;
return
new
PointerInput
Event
(
t
ype:
'pointerdown'
,
return
new
PointerDown
Event
(
t
imeStamp:
timeStamp
,
pointer:
pointer
,
x:
location
.
x
,
y:
location
.
y
,
timeStamp:
timeStamp
position:
location
);
}
Pointer
InputEvent
move
(
ui
.
Point
newLocation
,
{
Duration
timeStamp:
const
Duration
()
})
{
Pointer
MoveEvent
move
(
Point
newLocation
,
{
Duration
timeStamp:
const
Duration
()
})
{
assert
(
isDown
);
ui
.
Offset
delta
=
newLocation
-
location
;
Offset
delta
=
newLocation
-
location
;
location
=
newLocation
;
return
new
Pointer
Input
Event
(
t
ype:
'pointermove'
,
return
new
Pointer
Move
Event
(
t
imeStamp:
timeStamp
,
pointer:
pointer
,
x:
newLocation
.
x
,
y:
newLocation
.
y
,
dx:
delta
.
dx
,
dy:
delta
.
dy
,
timeStamp:
timeStamp
position:
newLocation
,
delta:
delta
);
}
Pointer
Input
Event
up
({
Duration
timeStamp:
const
Duration
()
})
{
Pointer
Up
Event
up
({
Duration
timeStamp:
const
Duration
()
})
{
assert
(
isDown
);
isDown
=
false
;
return
new
Pointer
Input
Event
(
t
ype:
'pointerup'
,
return
new
Pointer
Up
Event
(
t
imeStamp:
timeStamp
,
pointer:
pointer
,
x:
location
.
x
,
y:
location
.
y
,
timeStamp:
timeStamp
position:
location
);
}
Pointer
Input
Event
cancel
({
Duration
timeStamp:
const
Duration
()
})
{
Pointer
Cancel
Event
cancel
({
Duration
timeStamp:
const
Duration
()
})
{
assert
(
isDown
);
isDown
=
false
;
return
new
Pointer
Input
Event
(
t
ype:
'pointercancel'
,
return
new
Pointer
Cancel
Event
(
t
imeStamp:
timeStamp
,
pointer:
pointer
,
x:
location
.
x
,
y:
location
.
y
,
timeStamp:
timeStamp
position:
location
);
}
...
...
packages/flutter_test/lib/src/widget_tester.dart
View file @
e0107b05
...
...
@@ -174,13 +174,13 @@ class WidgetTester {
_dispatchEvent
(
p
.
up
(),
result
);
}
void
dispatchEvent
(
Input
Event
event
,
Point
location
)
{
void
dispatchEvent
(
Pointer
Event
event
,
Point
location
)
{
_dispatchEvent
(
event
,
_hitTest
(
location
));
}
HitTestResult
_hitTest
(
Point
location
)
=>
WidgetFlutterBinding
.
instance
.
hitTest
(
location
);
void
_dispatchEvent
(
Input
Event
event
,
HitTestResult
result
)
{
void
_dispatchEvent
(
Pointer
Event
event
,
HitTestResult
result
)
{
WidgetFlutterBinding
.
instance
.
dispatchEvent
(
event
,
result
);
}
...
...
packages/unit/benchmark/README.md
View file @
e0107b05
# 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/package
s
```
packages/unit/benchmark/gestures/velocity_tracker_bench.dart
View file @
e0107b05
// 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
(
Pointer
InputEvent
event
in
events
)
{
if
(
event
.
type
==
'pointerdown'
||
event
.
type
==
'pointermove'
)
tracker
.
addPosition
(
event
.
timeStamp
,
event
.
x
,
event
.
y
);
if
(
event
.
type
==
'pointerup'
)
for
(
Pointer
Event
event
in
velocityEventData
)
{
if
(
event
is
PointerDownEvent
||
event
is
PointerMoveEvent
)
tracker
.
addPosition
(
event
.
timeStamp
,
event
.
position
);
if
(
event
is
PointerUpEvent
)
tracker
.
getVelocity
();
}
}
...
...
packages/unit/benchmark/gestures/velocity_tracker_data.dart
View file @
e0107b05
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
)
),
];
packages/unit/test/gestures/double_tap_test.dart
View file @
e0107b05
...
...
@@ -16,85 +16,63 @@ class TestGestureArenaMember extends GestureArenaMember {
void
main
(
)
{
// Down/up pair 1: normal tap sequence
final
PointerInputEvent
down1
=
new
PointerInput
Event
(
const
PointerDownEvent
down1
=
const
PointerDown
Event
(
pointer:
1
,
type:
'pointerdown'
,
x:
10.0
,
y:
10.0
position:
const
Point
(
10.0
,
10.0
)
);
final
PointerInputEvent
up1
=
new
PointerInput
Event
(
const
PointerUpEvent
up1
=
const
PointerUp
Event
(
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
PointerInput
Event
(
const
PointerDownEvent
down2
=
const
PointerDown
Event
(
pointer:
2
,
type:
'pointerdown'
,
x:
12.0
,
y:
12.0
position:
const
Point
(
12.0
,
12.0
)
);
final
PointerInputEvent
up2
=
new
PointerInput
Event
(
const
PointerUpEvent
up2
=
const
PointerUp
Event
(
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
PointerInput
Event
(
const
PointerDownEvent
down3
=
const
PointerDown
Event
(
pointer:
3
,
type:
'pointerdown'
,
x:
130.0
,
y:
130.0
position:
const
Point
(
130.0
,
130.0
)
);
final
PointerInputEvent
up3
=
new
PointerInput
Event
(
const
PointerUpEvent
up3
=
const
PointerUp
Event
(
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
PointerInput
Event
(
const
PointerDownEvent
down4
=
const
PointerDown
Event
(
pointer:
4
,
type:
'pointerdown'
,
x:
10.0
,
y:
10.0
position:
const
Point
(
10.0
,
10.0
)
);
final
PointerInputEvent
move4
=
new
PointerInput
Event
(
const
PointerMoveEvent
move4
=
const
PointerMove
Event
(
pointer:
4
,
type:
'pointermove'
,
x:
25.0
,
y:
25.0
position:
const
Point
(
25.0
,
25.0
)
);
final
PointerInputEvent
up4
=
new
PointerInput
Event
(
const
PointerUpEvent
up4
=
const
PointerUp
Event
(
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
PointerInput
Event
(
const
PointerDownEvent
down5
=
const
PointerDown
Event
(
pointer:
5
,
type:
'pointerdown'
,
x:
10.0
,
y:
10.0
position:
const
Point
(
10.0
,
10.0
)
);
final
PointerInputEvent
up5
=
new
PointerInput
Event
(
const
PointerUpEvent
up5
=
const
PointerUp
Event
(
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
);
});
...
...
packages/unit/test/gestures/long_press_test.dart
View file @
e0107b05
...
...
@@ -2,18 +2,14 @@ import 'package:quiver/testing/async.dart';
import
'package:flutter/gestures.dart'
;
import
'package:test/test.dart'
;
final
PointerInputEvent
down
=
new
PointerInput
Event
(
const
PointerDownEvent
down
=
const
PointerDown
Event
(
pointer:
5
,
type:
'pointerdown'
,
x:
10.0
,
y:
10.0
position:
const
Point
(
10.0
,
10.0
)
);
final
PointerInputEvent
up
=
new
PointerInput
Event
(
const
PointerUpEvent
up
=
const
PointerUp
Event
(
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
);
});
...
...
packages/unit/test/gestures/lsq_solver_test.dart
View file @
e0107b05
...
...
@@ -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
);
...
...
packages/unit/test/gestures/pointer_router_test.dart
View file @
e0107b05
...
...
@@ -5,7 +5,7 @@ import 'package:test/test.dart';
void
main
(
)
{
test
(
'Should route pointers'
,
()
{
bool
callbackRan
=
false
;
void
callback
(
Pointer
Input
Event
event
)
{
void
callback
(
PointerEvent
event
)
{
callbackRan
=
true
;
}
...
...
packages/unit/test/gestures/scale_test.dart
View file @
e0107b05
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
);
Pointer
InputEvent
down
=
pointer1
.
down
(
new
Point
(
10.0
,
10.0
));
Pointer
DownEvent
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
);
Pointer
InputEvent
down2
=
pointer2
.
down
(
new
Point
(
10.0
,
20.0
));
Pointer
DownEvent
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
);
Pointer
InputEvent
down3
=
pointer3
.
down
(
new
Point
(
25.0
,
35.0
));
Pointer
DownEvent
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
;
...
...
packages/unit/test/gestures/scroll_test.dart
View file @
e0107b05
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
);
Pointer
InputEvent
down
=
pointer
.
down
(
new
Point
(
10.0
,
10.0
));
Pointer
DownEvent
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
);
...
...
packages/unit/test/gestures/tap_test.dart
View file @
e0107b05
...
...
@@ -10,55 +10,41 @@ class TestGestureArenaMember extends GestureArenaMember {
void
main
(
)
{
// Down/up pair 1: normal tap sequence
final
PointerInputEvent
down1
=
new
PointerInput
Event
(
const
PointerDownEvent
down1
=
const
PointerDown
Event
(
pointer:
1
,
type:
'pointerdown'
,
x:
10.0
,
y:
10.0
position:
const
Point
(
10.0
,
10.0
)
);
final
PointerInputEvent
up1
=
new
PointerInput
Event
(
const
PointerUpEvent
up1
=
const
PointerUp
Event
(
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
PointerInput
Event
(
const
PointerDownEvent
down2
=
const
PointerDown
Event
(
pointer:
2
,
type:
'pointerdown'
,
x:
30.0
,
y:
30.0
position:
const
Point
(
30.0
,
30.0
)
);
final
PointerInputEvent
up2
=
new
PointerInput
Event
(
const
PointerUpEvent
up2
=
const
PointerUp
Event
(
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
PointerInput
Event
(
const
PointerDownEvent
down3
=
const
PointerDown
Event
(
pointer:
3
,
type:
'pointerdown'
,
x:
10.0
,
y:
10.0
position:
const
Point
(
10.0
,
10.0
)
);
final
PointerInputEvent
move3
=
new
PointerInput
Event
(
const
PointerMoveEvent
move3
=
const
PointerMove
Event
(
pointer:
3
,
type:
'pointermove'
,
x:
25.0
,
y:
25.0
position:
const
Point
(
25.0
,
25.0
)
);
final
PointerInputEvent
up3
=
new
PointerInput
Event
(
const
PointerUpEvent
up3
=
const
PointerUp
Event
(
pointer:
3
,
type:
'pointerup'
,
x:
25.0
,
y:
25.0
position:
const
Point
(
25.0
,
25.0
)
);
test
(
'Should recognize tap'
,
()
{
...
...
packages/unit/test/gestures/velocity_tracker_data.dart
View file @
e0107b05
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
)
),
];
packages/unit/test/gestures/velocity_tracker_test.dart
View file @
e0107b05
...
...
@@ -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
;
}
}
});
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment