Translate pointer events into touch events.

This commit is contained in:
Simo Kinnunen
2015-09-14 20:33:59 +09:00
parent 2ee767ffed
commit a98cc67e2c
3 changed files with 98 additions and 6 deletions

View File

@@ -21,8 +21,8 @@ function VncConnection(conn, options) {
this._serverVersion = VncConnection.V3_008
this._serverSupportedSecurity = [VncConnection.SECURITY_NONE]
this._serverWidth = 720
this._serverHeight = 1280
this._serverWidth = 1080
this._serverHeight = 1920
this._serverPixelFormat = new PixelFormat({
bitsPerPixel: 32
, depth: 24
@@ -368,9 +368,11 @@ VncConnection.prototype._read = function() {
break
case VncConnection.STATE_NEED_CLIENT_MESSAGE_POINTEREVENT:
if ((chunk = this._consume(5))) {
// buttonMask = chunk[0]
// xPosition = chunk.readUInt16BE(1, true)
// yPosition = chunk.readUInt16BE(3, true)
this.emit('pointer', {
buttonMask: chunk[0]
, xPosition: chunk.readUInt16BE(1, true) / this._serverWidth
, yPosition: chunk.readUInt16BE(3, true) / this._serverHeight
})
this._changeState(VncConnection.STATE_NEED_CLIENT_MESSAGE)
}
break

View File

@@ -0,0 +1,66 @@
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