mirror of
https://github.com/openstf/stf
synced 2025-10-05 10:39:25 +02:00
66 lines
1.6 KiB
JavaScript
66 lines
1.6 KiB
JavaScript
var util = require('util')
|
|
|
|
var EventEmitter = require('eventemitter3')
|
|
|
|
function PointerTranslator() {
|
|
this.previousEvent = null
|
|
}
|
|
|
|
util.inherits(PointerTranslator, EventEmitter)
|
|
|
|
PointerTranslator.prototype.push = function(event) {
|
|
if (event.buttonMask & 0xFE) {
|
|
// Non-primary buttons included, ignore.
|
|
return
|
|
}
|
|
|
|
if (this.previousEvent) {
|
|
var buttonChanges = event.buttonMask ^ this.previousEvent.buttonMask
|
|
|
|
// If the primary button changed, we have an up/down event.
|
|
if (buttonChanges & 1) {
|
|
// If it's pressed now, that's a down event.
|
|
if (event.buttonMask & 1) {
|
|
this.emit('touchdown', {
|
|
contact: 1
|
|
, x: event.xPosition
|
|
, y: event.yPosition
|
|
})
|
|
this.emit('touchcommit')
|
|
}
|
|
// It's not pressed, so we have an up event.
|
|
else {
|
|
this.emit('touchup', {
|
|
contact: 1
|
|
})
|
|
this.emit('touchcommit')
|
|
}
|
|
}
|
|
// Otherwise, if we're still holding the primary button down,
|
|
// that's a move event.
|
|
else if (event.buttonMask & 1) {
|
|
this.emit('touchmove', {
|
|
contact: 1
|
|
, x: event.xPosition
|
|
, y: event.yPosition
|
|
})
|
|
this.emit('touchcommit')
|
|
}
|
|
}
|
|
else {
|
|
// If it's the first event we get and the primary button's pressed,
|
|
// it's a down event.
|
|
if (event.buttonMask & 1) {
|
|
this.emit('touchdown', {
|
|
contact: 1
|
|
, x: event.xPosition
|
|
, y: event.yPosition
|
|
})
|
|
this.emit('touchcommit')
|
|
}
|
|
}
|
|
|
|
this.previousEvent = event
|
|
}
|
|
|
|
module.exports = PointerTranslator
|