| var util = require('util') |
| |
| var EventEmitter = require('eventemitter3').EventEmitter |
| |
| 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 |