summaryrefslogtreecommitdiff
path: root/gdk/broadway/broadway.js
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2019-03-22 13:38:19 +0100
committerAlexander Larsson <alexl@redhat.com>2019-03-26 17:07:47 +0100
commitd997903d29bbbf6f3a25f04f1f539b35861e9c6b (patch)
treeb8cc769438e249fe3afb7c2cced682fb07efaddf /gdk/broadway/broadway.js
parentb097f0a7d81511764f79ed227237332b97f1bbde (diff)
downloadgtk+-d997903d29bbbf6f3a25f04f1f539b35861e9c6b.tar.gz
broadway: Use DataView instead of hand-rolled int parsers
This is nicer in general, but also will let us do floats more sanely.
Diffstat (limited to 'gdk/broadway/broadway.js')
-rw-r--r--gdk/broadway/broadway.js53
1 files changed, 25 insertions, 28 deletions
diff --git a/gdk/broadway/broadway.js b/gdk/broadway/broadway.js
index b2441076a7..fc55f4b59b 100644
--- a/gdk/broadway/broadway.js
+++ b/gdk/broadway/broadway.js
@@ -299,18 +299,21 @@ function cmdLowerSurface(id)
function SwapNodes(node_data, div) {
this.node_data = node_data;
- this.node_data_signed = new Int32Array(node_data);
this.data_pos = 0;
this.div = div;
this.outstanding = 1;
}
SwapNodes.prototype.decode_uint32 = function() {
- return this.node_data[this.data_pos++];
+ var v = this.node_data.getUint32(this.data_pos, true);
+ this.data_pos += 4;
+ return v;
}
SwapNodes.prototype.decode_int32 = function() {
- return this.node_data_signed[this.data_pos++];
+ var v = this.node_data.getInt32(this.data_pos, true);
+ this.data_pos += 4;
+ return v;
}
SwapNodes.prototype.decode_color = function() {
@@ -778,8 +781,8 @@ function cmdSurfaceSetNodes(id, node_data)
var swap = new SwapNodes (node_data, div);
swap.insertNode(div, 0, div.firstChild);
- if (swap.data_pos != node_data.length)
- alert ("Did not consume entire array (len " + node_data.length + " end " + end + ")");
+ if (swap.data_pos != node_data.byteLength)
+ alert ("Did not consume entire array (len " + node_data.byteLength + ")");
}
function cmdUploadTexture(id, data)
@@ -903,11 +906,7 @@ function handleCommands(cmd)
case 'n': // Set nodes
id = cmd.get_16();
- var len = cmd.get_32();
- var node_data = new Uint32Array(len);
- for (var i = 0; i < len; i++)
- node_data[i] = cmd.get_32();
-
+ var node_data = cmd.get_nodes ();
cmdSurfaceSetNodes(id, node_data);
break;
@@ -947,43 +946,41 @@ function handleOutstanding()
function BinCommands(message) {
this.arraybuffer = message;
- this.u8 = new Uint8Array(message);
- this.length = this.u8.length;
+ this.dataview = new DataView(message);
+ this.length = this.arraybuffer.byteLength;
this.pos = 0;
}
BinCommands.prototype.get_char = function() {
- return String.fromCharCode(this.u8[this.pos++]);
+ return String.fromCharCode(this.dataview.getUint8(this.pos++));
};
BinCommands.prototype.get_bool = function() {
- return this.u8[this.pos++] != 0;
+ return this.dataview.getUint8(this.pos++) != 0;
};
BinCommands.prototype.get_flags = function() {
- return this.u8[this.pos++];
+ return this.dataview.getUint8(this.pos++);
}
BinCommands.prototype.get_16 = function() {
- var v =
- this.u8[this.pos] +
- (this.u8[this.pos+1] << 8);
+ var v = this.dataview.getUint16(this.pos, true);
this.pos = this.pos + 2;
return v;
};
BinCommands.prototype.get_16s = function() {
- var v = this.get_16 ();
- if (v > 32767)
- return v - 65536;
- else
- return v;
+ var v = this.dataview.getInt16(this.pos, true);
+ this.pos = this.pos + 2;
+ return v;
};
BinCommands.prototype.get_32 = function() {
- var v =
- this.u8[this.pos] +
- (this.u8[this.pos+1] << 8) +
- (this.u8[this.pos+2] << 16) +
- (this.u8[this.pos+3] << 24);
+ var v = this.dataview.getUint32(this.pos, true);
this.pos = this.pos + 4;
return v;
};
+BinCommands.prototype.get_nodes = function() {
+ var len = this.get_32();
+ var node_data = new DataView(this.arraybuffer, this.pos, len * 4);
+ this.pos = this.pos + len * 4;
+ return node_data;
+};
BinCommands.prototype.get_data = function() {
var size = this.get_32();
var data = new Uint8Array (this.arraybuffer, this.pos, size);