1
1
import { event } from "./utils.js"
2
+ import { defined } from "../libs/web-js-utils.js" ;
2
3
3
4
let state = { over_vertex :false , id :0 , coord :{ x :0 , y :0 } , offset :{ x :0 , y :0 } , dragging :false , acting :false , menu :false } ;
4
5
@@ -9,12 +10,16 @@ function onContext(e){
9
10
10
11
function onMousePan ( e ) {
11
12
const is_vertex = e . target . classList . contains ( "vertex" )
12
- let dx = e . clientX - state . coord . x ;
13
- let dy = e . clientY - state . coord . y ;
14
- let vdx = e . offsetX - state . offset . x ;
15
- let vdy = e . offsetY - state . offset . y ;
16
- if ( e . type == "mousemove" ) {
17
- //console.log(state)
13
+ let pointe_1 = defined ( e . buttons ) ?( e . buttons == 1 ) :( e . touches . length == 1 )
14
+ let pointe_2 = defined ( e . buttons ) ?( e . buttons == 2 ) :( e . touches . length == 2 )
15
+ let pointer_x = defined ( e . offsetX ) ?e . offsetX : ( ( e . touches . length > 0 ) ?( e . touches [ 0 ] . pageX ) :state . offset . x )
16
+ let pointer_y = defined ( e . offsetY ) ?e . offsetY : ( ( e . touches . length > 0 ) ?( e . touches [ 0 ] . pageY ) :state . offset . y )
17
+ let vdx = pointer_x - state . offset . x ;
18
+ let vdy = pointer_y - state . offset . y ;
19
+ //console.log(`tx:${vdx},ty:${vdy} px:${e.touches[0].PageX},py:${e.touches[0].PageY}`)
20
+ //console.log(e)
21
+ if ( [ "mousemove" , "touchmove" ] . includes ( e . type ) ) {
22
+ //console.log(`dragging:${state.dragging} , over_vertex:${state.over_vertex}`)
18
23
if ( ! state . dragging && ! state . menu ) { //then no update for the hover state machine
19
24
if ( is_vertex ) {
20
25
if ( ! state . over_vertex ) {
@@ -35,36 +40,38 @@ function onMousePan(e){
35
40
}
36
41
}
37
42
}
38
- if ( ( e . buttons == 1 ) && state . dragging ) {
43
+ if ( pointe_1 && state . dragging ) {
44
+ //console.log(e)
45
+ //console.log(`tx:${vdx},ty:${vdy}`)
39
46
event ( "vertex_drag" , { type :"move" , tx :vdx , ty :vdy } )
40
47
}
41
- if ( ! is_vertex && ( e . buttons != 1 ) && ( e . buttons == 2 ) && ! state . menu ) {
48
+ if ( ! is_vertex && ! pointe_1 && pointe_2 && ! state . menu ) {
42
49
if ( state . over_vertex ) {
43
50
state . over_vertex = false
44
51
event ( "vertex_hover" , { type :"exit" , id :state . id } )
45
52
}
46
53
}
47
- } else if ( e . type == "mousedown" ) {
48
- if ( ( e . buttons == 1 ) && is_vertex ) {
54
+ } else if ( [ "mousedown" , "touchstart" ] . includes ( e . type ) ) {
55
+ if ( pointe_1 && is_vertex ) {
49
56
state . dragging = true
50
57
state . id = e . target . id
51
58
event ( "vertex_drag" , { type :"start" , id :state . id } )
52
- } else if ( ( e . buttons == 2 ) && is_vertex ) {
59
+ } else if ( pointe_2 && is_vertex ) {
53
60
state . menu = true
54
61
state . id = e . target . id
55
62
event ( "vertex_menu" , { type :"start" , id :state . id } )
56
63
}
57
- } else if ( e . type == "mouseup" ) {
64
+ } else if ( [ "mouseup" , "touchend" ] . includes ( e . type ) ) {
58
65
if ( state . dragging ) {
59
66
state . dragging = false
60
67
event ( "vertex_drag" , { type :"end" , id :state . id } )
61
68
}
62
69
}
63
- state . coord . x = e . clientX ;
64
- state . coord . y = e . clientY ;
65
- state . offset . x = e . offsetX ;
66
- state . offset . y = e . offsetY ;
67
- e . preventDefault ( ) ;
70
+ state . offset . x = pointer_x ;
71
+ state . offset . y = pointer_y ;
72
+ if ( ! [ "touchstart" , "touchend" , "touchmove" ] . includes ( e . type ) ) {
73
+ e . preventDefault ( ) ;
74
+ }
68
75
e . stopPropagation ( ) ;
69
76
}
70
77
@@ -77,11 +84,12 @@ class Mouse{
77
84
init ( element ) {
78
85
79
86
element . addEventListener ( 'touchstart' , onMousePan , false ) ;
80
- element . addEventListener ( 'touchend' , onMousePan , false ) ;
81
- element . addEventListener ( 'mousedown' , onMousePan , false ) ;
82
- element . addEventListener ( 'mouseup' , onMousePan , false ) ;
83
- element . addEventListener ( 'mousemove' , onMousePan , false ) ;
84
- element . addEventListener ( 'contextmenu' , onContext , false ) ;
87
+ element . addEventListener ( 'touchend' , onMousePan , false ) ;
88
+ element . addEventListener ( 'touchmove' , onMousePan , false ) ;
89
+ element . addEventListener ( 'mousedown' , onMousePan , false ) ;
90
+ element . addEventListener ( 'mouseup' , onMousePan , false ) ;
91
+ element . addEventListener ( 'mousemove' , onMousePan , false ) ;
92
+ element . addEventListener ( 'contextmenu' , onContext , false ) ;
85
93
window . addEventListener ( 'vertex_menu' , onVertexMenu , false ) ;
86
94
87
95
}
0 commit comments