Skip to content

Commit 95c2986

Browse files
committed
Pointer: More specific event property transfer and cleanup
1 parent 2bb1a98 commit 95c2986

File tree

1 file changed

+49
-23
lines changed

1 file changed

+49
-23
lines changed

external/pointer.js

Lines changed: 49 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,44 +5,73 @@ var POINTER_TYPE_UNAVAILABLE = "1",
55
POINTER_TYPE_MOUSE = "4";
66

77
function processEvent( event, pointerType ) {
8-
var prop,
9-
orig = event;
8+
var propLength,
9+
i = 0,
10+
orig = event,
11+
mouseProps = $.event.mouseHooks.props;
1012

11-
event = $.Event( pointerType );
13+
event = $.Event( pointerType, {
14+
bubbles: true,
15+
cancelable: true,
16+
pointerId: 0,
17+
width: 0,
18+
height: 0,
19+
pressure: 0,
20+
tiltX: 0,
21+
tiltY: 0,
22+
pointerType: "",
23+
// TODO: properly determine isPrimary
24+
isPrimary: true
25+
});
1226

13-
for ( prop in orig ) {
14-
if ( !( prop in event ) ) {
15-
event[ prop ] = orig[ prop ];
16-
}
27+
for ( propLength = mouseProps.length; i < propLength; i++ ) {
28+
event[ mouseProps[ i ] ] = orig[ mouseProps[ i ] ];
1729
}
1830

19-
event.pageX = event.pageX || orig.originalEvent.pageX;
20-
event.pageY = event.pageY || orig.originalEvent.pageY;
21-
22-
// TODO - Actually determine if primary
23-
event.isPrimary = true;
24-
25-
if ( orig.type.indexOf("mouse") != -1 ) {
31+
if ( orig.type.indexOf("mouse") !== -1 ) {
2632
event.pointerId = 1;
2733
event.pointerType = POINTER_TYPE_MOUSE;
2834
// TODO: Don't assume left click
2935
event.button = 0;
3036
event.buttons = 1;
31-
} else if ( orig.type.indexOf("touch") != -1 ) {
32-
event.pointerId = orig.identifier || 2;
37+
} else if ( orig.type.indexOf("touch") !== -1 ) {
38+
event.pointerId = orig.pointerId;
3339
event.pointerType = POINTER_TYPE_TOUCH;
3440
event.button = 0;
3541
event.buttons = 1;
36-
} else if ( orig.type.indexOf("Pointer") != -1 ) {
42+
event.originalEvent = orig;
43+
} else if ( orig.type.indexOf("Pointer") !== -1 ) {
3744
event.pointerId = orig.originalEvent.pointerId;
3845
event.pointerType = orig.originalEvent.pointerType || POINTER_TYPE_UNAVAILABLE;
3946
event.button = orig.originalEvent.button;
4047
event.buttons = orig.originalEvent.buttons;
48+
event.width = orig.originalEvent.width;
49+
event.height = orig.originalEvent.height;
50+
event.pressure = orig.originalEvent.pressure;
51+
event.tiltX = orig.originalEvent.tiltX;
52+
event.tiltY = orig.originalEvent.tiltY;
4153
}
4254

4355
return event;
4456
}
4557

58+
function pointerEventHandler( event, type ) {
59+
var touch;
60+
61+
if ( event.type.indexOf("touch") !== -1 ) {
62+
touch = event.originalEvent.changedTouches[ 0 ];
63+
event.pageX = touch.pageX;
64+
event.pageY = touch.pageY;
65+
event.screenX = touch.screenX;
66+
event.screenY = touch.screenY;
67+
event.clientX = touch.clientX;
68+
event.clientY = touch.clientY;
69+
event.pointerId = touch.identifier;
70+
}
71+
72+
$( event.target ).trigger( processEvent( event, type ) );
73+
}
74+
4675
$.event.special.pointerdown = {
4776
setup: function() {
4877
$( this ).on( "mousedown touchstart MSPointerDown", $.event.special.pointerdown.handler );
@@ -51,8 +80,7 @@ $.event.special.pointerdown = {
5180
$( this ).off( "mousedown touchstart MSPointerDown", $.event.special.pointerdown.handler );
5281
},
5382
handler: function( event ) {
54-
event = processEvent( event, "pointerdown" );
55-
$( event.target ).trigger( event );
83+
pointerEventHandler( event, "pointerdown" );
5684
}
5785
};
5886

@@ -64,8 +92,7 @@ $.event.special.pointerup = {
6492
$( this ).off( "mouseup touchend MSPointerUp", $.event.special.pointerup.handler );
6593
},
6694
handler: function( event ) {
67-
event = processEvent( event, "pointerup" );
68-
$( event.target ).trigger( event );
95+
pointerEventHandler( event, "pointerup" );
6996
}
7097
};
7198

@@ -77,8 +104,7 @@ $.event.special.pointermove = {
77104
$( this ).off( "mousemove touchmove MSPointerMove", $.event.special.pointermove.handler );
78105
},
79106
handler: function( event ) {
80-
event = processEvent( event, "pointermove" );
81-
$( event.target ).trigger( event );
107+
pointerEventHandler( event, "pointermove" );
82108
}
83109
};
84110
})( jQuery );

0 commit comments

Comments
 (0)