New multitouch-compatible touch system.

This commit is contained in:
Simo Kinnunen
2014-09-12 19:22:16 +09:00
parent 38d20eba9a
commit 6c09a53d55
15 changed files with 861 additions and 280 deletions

View File

@@ -1,25 +1,61 @@
function SeqQueue() {
this.queue = []
this.seq = 0
function SeqQueue(size, maxWaiting) {
this.lo = 0
this.size = size
this.maxWaiting = maxWaiting
this.waiting = 0
this.list = new Array(size)
this.locked = true
}
SeqQueue.prototype.start = function(seq) {
this.locked = false
this.lo = seq
this.maybeConsume()
}
SeqQueue.prototype.stop = function() {
this.locked = true
this.maybeConsume()
}
SeqQueue.prototype.push = function(seq, handler) {
this.queue[seq] = handler
this.maybeDequeue()
if (seq >= this.size) {
return
}
this.list[seq] = handler
this.waiting += 1
this.maybeConsume()
}
SeqQueue.prototype.done = function(seq, handler) {
this.queue[seq] = handler
this.maybeDequeue()
}
SeqQueue.prototype.maybeConsume = function() {
if (this.locked) {
return
}
SeqQueue.prototype.maybeDequeue = function() {
var handler
while (this.waiting) {
// Did we reach the end of the loop? If so, start from the beginning.
if (this.lo === this.size) {
this.lo = 0
}
while ((handler = this.queue[this.seq])) {
this.queue[this.seq] = void 0
handler()
this.seq += 1
var handler = this.list[this.lo]
// Have we received it yet?
if (handler) {
this.list[this.lo] = void 0
handler()
this.lo += 1
this.waiting -= 1
}
// Are we too much behind? If so, just move on.
else if (this.waiting >= this.maxWaiting) {
this.lo += 1
this.waiting -= 1
}
// We don't have it yet, stop.
else {
break
}
}
}

View File

@@ -25,10 +25,13 @@ enum MessageType {
ProbeMessage = 17;
ShellCommandMessage = 18;
ShellKeepAliveMessage = 19;
TapMessage = 20;
TouchDownMessage = 21;
TouchMoveMessage = 22;
TouchUpMessage = 23;
TouchCommitMessage = 65;
TouchResetMessage = 66;
GestureStartMessage = 67;
GestureStopMessage = 68;
TransactionDoneMessage = 24;
TransactionProgressMessage = 25;
TypeMessage = 26;
@@ -249,25 +252,39 @@ message PhysicalIdentifyMessage {
message TouchDownMessage {
required uint32 seq = 1;
required float x = 2;
required float y = 3;
required uint32 contact = 2;
required float x = 3;
required float y = 4;
optional float pressure = 5;
}
message TouchMoveMessage {
required uint32 seq = 1;
required float x = 2;
required float y = 3;
required uint32 contact = 2;
required float x = 3;
required float y = 4;
optional float pressure = 5;
}
message TouchUpMessage {
required uint32 seq = 1;
required float x = 2;
required float y = 3;
required uint32 contact = 2;
}
message TapMessage {
required float x = 1;
required float y = 2;
message TouchCommitMessage {
required uint32 seq = 1;
}
message TouchResetMessage {
required uint32 seq = 1;
}
message GestureStartMessage {
required uint32 seq = 1;
}
message GestureStopMessage {
required uint32 seq = 1;
}
message TypeMessage {