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