=== modified file 'src/com/goldencode/p2j/ui/client/driver/web/index.html'
--- src/com/goldencode/p2j/ui/client/driver/web/index.html 2015-09-08 16:51:50 +0000
+++ src/com/goldencode/p2j/ui/client/driver/web/index.html 2015-11-27 21:17:18 +0000
@@ -4,6 +4,9 @@
P2J ${client_title} Web Client
+
=== modified file 'src/com/goldencode/p2j/ui/client/driver/web/res/p2j.js'
--- src/com/goldencode/p2j/ui/client/driver/web/res/p2j.js 2015-10-22 23:14:19 +0000
+++ src/com/goldencode/p2j/ui/client/driver/web/res/p2j.js 2015-11-27 23:25:13 +0000
@@ -96,9 +96,13 @@
// save off our client mode type
p2j.isGui = cfg.isGui;
+ // the body html css class name to display wait cursor
+ p2j.waitCursorClass = "wait";
+ // the body html css class name to display default cursor
+ p2j.defaultBodyHtmlClass = "claro";
// init modules (don't change the order here!)
- p2j.logger.init(4096);
+ p2j.logger.init(4096, true);
p2j.sound.init(cfg);
p2j.fonts.init();
p2j.screen.init(cfg);
=== modified file 'src/com/goldencode/p2j/ui/client/driver/web/res/p2j.logger.js'
--- src/com/goldencode/p2j/ui/client/driver/web/res/p2j.logger.js 2015-09-05 16:09:44 +0000
+++ src/com/goldencode/p2j/ui/client/driver/web/res/p2j.logger.js 2015-11-27 15:52:16 +0000
@@ -24,15 +24,21 @@
/** The stack capacity, the last visible history.*/
var maxStackSize;
+
+ /** The stack capacity, the last visible history.*/
+ var isOn;
/**
* Initialize the logger with the storage capacity.
*
* @param {Number}
* The log stack capacity.
+ * @param {boolean}
+ * The boolean value that indicates the log is on/off.
*/
- me.init = function(capacity)
+ me.init = function(capacity, on)
{
maxStackSize = capacity;
+ isOn = on;
};
/**
@@ -43,7 +49,10 @@
*/
me.log = function(msg)
{
- save(msg);
+ if (isOn)
+ {
+ save(msg);
+ }
};
/*
@@ -56,19 +65,22 @@
*/
me.logFormatted = function(format, parameters)
{
- save(format.split("%d").map(
- function(currValue, index, arr)
- {
- if (this[index] === undefined)
+ if (isOn)
+ {
+ save(format.split("%d").map(
+ function(currValue, index, arr)
{
- return currValue;
- }
- return currValue + this[index];
- }, parameters).reduce(
- function(prevValue, currValue)
+ if (this[index] === undefined)
{
- return prevValue + currValue;
- }, ""));
+ return currValue;
+ }
+ return currValue + this[index];
+ }, parameters).reduce(
+ function(prevValue, currValue)
+ {
+ return prevValue + currValue;
+ }, ""));
+ }
};
/**
=== modified file 'src/com/goldencode/p2j/ui/client/driver/web/res/p2j.socket.js'
--- src/com/goldencode/p2j/ui/client/driver/web/res/p2j.socket.js 2015-11-26 10:46:59 +0000
+++ src/com/goldencode/p2j/ui/client/driver/web/res/p2j.socket.js 2015-11-27 23:55:23 +0000
@@ -417,501 +417,658 @@
{
case 0x80:
// clear screen
- p2j.screen.clear();
+ setTimeout(
+ function()
+ {
+ p2j.screen.clear();
+ }, 1);
break;
case 0x81:
// draw screen
- var t1 = (new Date()).getTime();
- p2j.screen.drawRectangles(message);
- var t2 = (new Date()).getTime();
- // console.log("message: " + message.length + " done in " + (t2 - t1));
+ document.body.className = p2j.waitCursorClass;
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ var t1 = (new Date()).getTime();
+ p2j.screen.drawRectangles(mobj.message);
+ var t2 = (new Date()).getTime();
+ // console.log("message: " + message.length + " done in " + (t2 - t1));
+ }, 1);
+ setTimeout(
+ function()
+ {
+ document.body.className = p2j.defaultBodyHtmlClass;
+ }, 1);
break;
case 0x82:
// set cursor position
- p2j.screen.setCursorPosition(message[1], message[2]);
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ p2j.screen.setCursorPosition(mobj.message[1], mobj.message[2]);
+ }, 1);
break;
case 0x83:
// show cursor
- p2j.screen.setCursorStatus(message[1]);
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ p2j.screen.setCursorStatus(mobj.message[1]);
+ }, 1);
break;
case 0x84:
- // message beep
- p2j.sound.beep();
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ // message beep
+ p2j.sound.beep();
+ }, 1);
break;
case 0x85:
// quit
- window.location.replace(referrer);
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ window.location.replace(referrer);
+ }, 1);
break;
case 0x86:
- // switch mode p2j/vt100
- p2j.keyboard.vt100 = (message[1] == 0) ? false : true;
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ // switch mode p2j/vt100
+ p2j.keyboard.vt100 = (mobj.message[1] == 0) ? false : true;
+ }, 1);
break;
case 0x87:
- // server-driven request for clipboard contents
- p2j.clipboard.sendClipboardContents();
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ // server-driven request for clipboard contents
+ p2j.clipboard.sendClipboardContents();
+ }, 1);
break;
case 0x88:
- // The clipboard is changed.
- var text = me.readStringBinaryMessage(message, 1);
- p2j.clipboard.writeClipboard(text);
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ // The clipboard is changed.
+ var text = me.readStringBinaryMessage(mobj.message, 1);
+ p2j.clipboard.writeClipboard(text);
+ }, 1);
break;
case 0x89:
// create a top-level window with the given id
- var id = me.readInt32BinaryMessage(message, 1);
- p2j.screen.createWindow(id);
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ var id = me.readInt32BinaryMessage(mobj.message, 1);
+ p2j.screen.createWindow(id);
+ }, 1);
break;
case 0x8A:
// create a child window with the given id, owner and title
- var id = me.readInt32BinaryMessage(message, 1);
- var owner = me.readInt32BinaryMessage(message, 5);
- var title = me.readStringBinaryMessage(message, 9);
- p2j.screen.createChildWindow(id, owner);
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ var id = me.readInt32BinaryMessage(mobj.message, 1);
+ var owner = me.readInt32BinaryMessage(mobj.message, 5);
+ var title = me.readStringBinaryMessage(mobj.message, 9);
+ p2j.screen.createChildWindow(id, owner);
+ }, 1);
break;
case 0x8B:
// destroy top-level or child window
- var id = me.readInt32BinaryMessage(message, 1);
- var numberImages = me.readInt32BinaryMessage(message, 5);
- var images = [];
- for (var i = 0; i < numberImages; i++)
- {
- images[i] = me.readInt32BinaryMessage(message, 9 + (i * 4));
- }
- p2j.screen.destroyWindow(id, images);
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ var id = me.readInt32BinaryMessage(mobj.message, 1);
+ var numberImages = me.readInt32BinaryMessage(mobj.message, 5);
+ var images = [];
+ for (var i = 0; i < numberImages; i++)
+ {
+ images[i] = me.readInt32BinaryMessage(mobj.message, 9 + (i * 4));
+ }
+ p2j.screen.destroyWindow(id, images);
+ }, 1);
break;
case 0x8C:
- // change visibility for top-level or child window
- var id = me.readInt32BinaryMessage(message, 1);
- var visible = message[5] === 0 ? false : true;
- p2j.screen.setWindowVisible(id, visible);
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ // change visibility for top-level or child window
+ var id = me.readInt32BinaryMessage(mobj.message, 1);
+ var visible = message[5] === 0 ? false : true;
+ p2j.screen.setWindowVisible(id, visible);
+ }, 1);
break;
// font and metrics related requests
case 0x8D:
- // paragraph height
-
- var offset = 1;
-
- var msgId = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
-
- var textLength = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
-
- var text = me.readStringBinaryMessageByLength(message, offset, textLength);
- offset = offset + textLength * 2;
-
- var font = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
-
- var maxWidth = me.readInt16BinaryMessage(message, offset);
- offset = offset + 2;
-
- var pheight = p2j.screen.layoutParagraphWorker(null,
- text,
- font,
- 0,
- 0,
- maxWidth);
-
- me.sendInt16BinaryMessage(0x06, msgId, pheight);
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ // paragraph height
+
+ var offset = 1;
+
+ var msgId = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+
+ var textLength = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+
+ var text = me.readStringBinaryMessageByLength(mobj.message, offset, textLength);
+ offset = offset + textLength * 2;
+
+ var font = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+
+ var maxWidth = me.readInt16BinaryMessage(mobj.message, offset);
+ offset = offset + 2;
+
+ var pheight = p2j.screen.layoutParagraphWorker(null,
+ text,
+ font,
+ 0,
+ 0,
+ maxWidth);
+
+ me.sendInt16BinaryMessage(0x06, msgId, pheight);
+ }, 1);
break;
case 0x8E:
- // text height
-
- var offset = 1;
-
- var msgId = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
-
- var textLength = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
-
- var text = me.readStringBinaryMessageByLength(message, offset, textLength);
- offset = offset + textLength * 2;
-
- var font = me.readInt32BinaryMessage(message, offset);
-
- var theight = p2j.fonts.getTextHeight(font, text);
-
- me.sendInt8BinaryMessage(0x07, msgId, theight);
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ // text height
+
+ var offset = 1;
+
+ var msgId = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+
+ var textLength = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+
+ var text = me.readStringBinaryMessageByLength(mobj.message, offset, textLength);
+ offset = offset + textLength * 2;
+
+ var font = me.readInt32BinaryMessage(mobj.message, offset);
+
+ var theight = p2j.fonts.getTextHeight(font, text);
+
+ me.sendInt8BinaryMessage(0x07, msgId, theight);
+ }, 1);
break;
case 0x8F:
- // text width
-
- var offset = 1;
-
- var msgId = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
-
- var textLength = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
-
- var text = me.readStringBinaryMessageByLength(message, offset, textLength);
- offset = offset + textLength * 2;
-
- var font = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
-
- var twidth = p2j.fonts.getTextWidth(font, text);
-
- me.sendInt16BinaryMessage(0x08, msgId, twidth);
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ // text width
+
+ var offset = 1;
+
+ var msgId = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+
+ var textLength = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+
+ var text = me.readStringBinaryMessageByLength(mobj.message, offset, textLength);
+ offset = offset + textLength * 2;
+
+ var font = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+
+ var twidth = p2j.fonts.getTextWidth(font, text);
+
+ me.sendInt16BinaryMessage(0x08, msgId, twidth);
+ }, 1);
break;
case 0x90:
- // font height
-
- var offset = 1;
-
- var msgId = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
-
- var font = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
-
- var fheight = p2j.fonts.getFontHeight(font);
-
- me.sendInt8BinaryMessage(0x09, msgId, fheight);
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ // font height
+
+ var offset = 1;
+
+ var msgId = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+
+ var font = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+
+ var fheight = p2j.fonts.getFontHeight(font);
+
+ me.sendInt8BinaryMessage(0x09, msgId, fheight);
+ }, 1);
break;
case 0x91:
- // font widths
-
- var offset = 1;
-
- var msgId = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
-
- var font = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
-
- var fwidths = p2j.fonts.getFontWidths(font);
-
- me.sendByteArrayBinaryMessage(0x0A, msgId, fwidths);
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ // font widths
+
+ var offset = 1;
+
+ var msgId = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+
+ var font = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+
+ var fwidths = p2j.fonts.getFontWidths(font);
+
+ me.sendByteArrayBinaryMessage(0x0A, msgId, fwidths);
+ }, 1);
break;
case 0x92:
- // create font
-
- var offset = 1;
-
- var msgId = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
-
- var font = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
-
- var nameLength = me.readInt16BinaryMessage(message, offset);
- offset = offset + 2;
-
- var name = me.readStringBinaryMessageByLength(message, offset, nameLength);
- offset = offset + nameLength * 2;
-
- var size = message[offset];
- offset = offset + 1;
-
- var style = message[offset];
- offset = offset + 1;
-
- var defLength = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
-
- var b64font = "";
- if (defLength > 0)
- {
- var binFont = '';
- for (var i = 0; i < defLength; i++)
- {
- binFont += String.fromCharCode(message[offset]);
- offset = offset + 1;
- }
- b64font = window.btoa(binFont);
- }
-
- var fontId = p2j.fonts.createFont(font, name, size, style, b64font);
-
- me.sendInt32BinaryMessage(0x0B, msgId, fontId);
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ // create font
+
+ var offset = 1;
+
+ var msgId = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+
+ var font = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+
+ var nameLength = me.readInt16BinaryMessage(mobj.message, offset);
+ offset = offset + 2;
+
+ var name = me.readStringBinaryMessageByLength(mobj.message, offset, nameLength);
+ offset = offset + nameLength * 2;
+
+ var size = mobj.message[offset];
+ offset = offset + 1;
+
+ var style = mobj.message[offset];
+ offset = offset + 1;
+
+ var defLength = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+
+ var b64font = "";
+ if (defLength > 0)
+ {
+ var binFont = '';
+ for (var i = 0; i < defLength; i++)
+ {
+ binFont += String.fromCharCode(mobj.message[offset]);
+ offset = offset + 1;
+ }
+ b64font = window.btoa(binFont);
+ }
+
+ var fontId = p2j.fonts.createFont(font, name, size, style, b64font);
+
+ me.sendInt32BinaryMessage(0x0B, msgId, fontId);
+ }, 1);
break;
case 0x93:
- // derive font
-
- var offset = 1;
-
- var msgId = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
-
- var font = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
-
- p2j.fonts.deriveFont(font);
-
- me.sendInt8BinaryMessage(0x0C, msgId, 1);
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ // derive font
+
+ var offset = 1;
+
+ var msgId = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+
+ var font = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+
+ p2j.fonts.deriveFont(font);
+
+ me.sendInt8BinaryMessage(0x0C, msgId, 1);
+ }, 1);
break;
case 0x94:
- // set cursor style
- var styleId = me.readInt32BinaryMessage(message, 1);
- var wid = me.readInt32BinaryMessage(message, 5);
- p2j.screen.setCursorStyle(styleId, wid);
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ // set cursor style
+ var styleId = me.readInt32BinaryMessage(mobj.message, 1);
+ var wid = me.readInt32BinaryMessage(mobj.message, 5);
+ p2j.screen.setCursorStyle(styleId, wid);
+ }, 1);
break;
case 0x95:
- // restack windows
- var num = me.readInt32BinaryMessage(message, 1);
- var winids = [];
- for (var i = 0; i < num; i++)
- {
- winids.push(me.readInt32BinaryMessage(message, 5 + (i * 4)));
- }
- p2j.screen.restackZOrderEntries(winids);
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ // restack windows
+ var num = me.readInt32BinaryMessage(mobj.message, 1);
+ var winids = [];
+ for (var i = 0; i < num; i++)
+ {
+ winids.push(me.readInt32BinaryMessage(mobj.message, 5 + (i * 4)));
+ }
+ p2j.screen.restackZOrderEntries(winids);
+ }, 1);
break;
case 0x96:
- // register/deregister widgets for mouse actions
-
- var offset = 1;
-
- // the number of windows with new widgets
- var windowNo = me.readInt16BinaryMessage(message, offset);
- offset = offset + 2;
-
- for (var j = 0; j < windowNo; j++)
- {
- // the window ID
- var windowID = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
-
- if (!p2j.screen.isExistingWindowId(windowID))
- {
- console.log("undefined window " + windowID);
- continue;
- }
-
- var theWindow = p2j.screen.getWindow(windowID);
-
- // the number of new widgets in this window
- var widgetNo = me.readInt16BinaryMessage(message, offset);
- offset = offset + 2;
-
- for (var k = 0; k < widgetNo; k++)
- {
- // the widget ID
- var wid = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
-
- // the coordinates
- var x = me.readInt16BinaryMessage(message, offset);
- offset = offset + 2;
-
- var y = me.readInt16BinaryMessage(message, offset);
- offset = offset + 2;
-
- // the size
- var width = me.readInt16BinaryMessage(message, offset);
- offset = offset + 2;
-
- var height = me.readInt16BinaryMessage(message, offset);
- offset = offset + 2;
-
- // bit-encoded mouse ops: each bit from 1 to 11, if set, represents a mouse
- // operation as defined in p2j.screen.mouseOps
- var actions = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
- theWindow.deregisterMouseWidget(wid);
- theWindow.registerMouseWidget(wid, x, y, width, height, actions);
- }
-
- var allWNo = me.readInt16BinaryMessage(message, offset);
- offset = offset + 2;
- var zOrder = [];
-
- for (var k = 0; k < allWNo; k++)
- {
- zOrder[k] = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
- }
-
- theWindow.setWidgetZOrder(zOrder);
- }
-
- // the number of windows with dead widgets
- windowNo = me.readInt16BinaryMessage(message, offset);
- offset = offset + 2;
-
- for (var j = 0; j < windowNo; j++)
- {
- // the window ID
- var windowID = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
-
- var theWindow = p2j.screen.getWindow(windowID);
-
- if (theWindow == undefined)
- {
- console.log("undefined window" + windowID);
- continue;
- }
-
- // the number of dead widgets in this window
- var widgetNo = me.readInt16BinaryMessage(message, offset);
- offset = offset + 2;
-
- for (var k = 0; k < widgetNo; k++)
- {
- // the widget ID
- var wid = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
-
- theWindow.deregisterMouseWidget(wid);
- }
- }
-
- // the number of windows with new "any widgets"
- windowNo = me.readInt16BinaryMessage(message, offset);
- offset = offset + 2;
-
- for (var j = 0; j < windowNo; j++)
- {
- // the window ID
- var windowID = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
-
- if (!p2j.screen.isExistingWindowId(windowID))
- {
- console.log("undefined window " + windowID);
- continue;
- }
-
- var theWindow = p2j.screen.getWindow(windowID);
-
- // the number of new "any widgets" in this window
- var widgetNo = me.readInt16BinaryMessage(message, offset);
- offset = offset + 2;
-
- for (var k = 0; k < widgetNo; k++)
- {
- // the widget ID
- var wid = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
- theWindow.deregisterAnyMouseWidget(wid);
- theWindow.registerAnyMouseWidget(wid);
- }
- }
-
- // the number of windows with dead "any widgets"
- windowNo = me.readInt16BinaryMessage(message, offset);
- offset = offset + 2;
-
- for (var j = 0; j < windowNo; j++)
- {
- // the window ID
- var windowID = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
-
- var theWindow = p2j.screen.getWindow(windowID);
-
- if (theWindow == undefined)
- {
- console.log("undefined window" + windowID);
- continue;
- }
-
- // the number of dead "any widgets" in this window
- var widgetNo = me.readInt16BinaryMessage(message, offset);
- offset = offset + 2;
-
- for (var k = 0; k < widgetNo; k++)
- {
- // the widget ID
- var wid = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
-
- theWindow.deregisterAnyMouseWidget(wid);
- }
- }
-
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ // register/deregister widgets for mouse actions
+
+ var offset = 1;
+
+ // the number of windows with new widgets
+ var windowNo = me.readInt16BinaryMessage(mobj.message, offset);
+ offset = offset + 2;
+
+ for (var j = 0; j < windowNo; j++)
+ {
+ // the window ID
+ var windowID = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+
+ if (!p2j.screen.isExistingWindowId(windowID))
+ {
+ console.log("undefined window " + windowID);
+ continue;
+ }
+
+ var theWindow = p2j.screen.getWindow(windowID);
+
+ // the number of new widgets in this window
+ var widgetNo = me.readInt16BinaryMessage(mobj.message, offset);
+ offset = offset + 2;
+
+ for (var k = 0; k < widgetNo; k++)
+ {
+ // the widget ID
+ var wid = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+
+ // the coordinates
+ var x = me.readInt16BinaryMessage(mobj.message, offset);
+ offset = offset + 2;
+
+ var y = me.readInt16BinaryMessage(mobj.message, offset);
+ offset = offset + 2;
+
+ // the size
+ var width = me.readInt16BinaryMessage(mobj.message, offset);
+ offset = offset + 2;
+
+ var height = me.readInt16BinaryMessage(mobj.message, offset);
+ offset = offset + 2;
+
+ // bit-encoded mouse ops: each bit from 1 to 11, if set, represents a mouse
+ // operation as defined in p2j.screen.mouseOps
+ var actions = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+ theWindow.deregisterMouseWidget(wid);
+ theWindow.registerMouseWidget(wid, x, y, width, height, actions);
+ }
+
+ var allWNo = me.readInt16BinaryMessage(mobj.message, offset);
+ offset = offset + 2;
+ var zOrder = [];
+
+ for (var k = 0; k < allWNo; k++)
+ {
+ zOrder[k] = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+ }
+
+ theWindow.setWidgetZOrder(zOrder);
+ }
+
+ // the number of windows with dead widgets
+ windowNo = me.readInt16BinaryMessage(mobj.message, offset);
+ offset = offset + 2;
+
+ for (var j = 0; j < windowNo; j++)
+ {
+ // the window ID
+ var windowID = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+
+ var theWindow = p2j.screen.getWindow(windowID);
+
+ if (theWindow == undefined)
+ {
+ console.log("undefined window" + windowID);
+ continue;
+ }
+
+ // the number of dead widgets in this window
+ var widgetNo = me.readInt16BinaryMessage(mobj.message, offset);
+ offset = offset + 2;
+
+ for (var k = 0; k < widgetNo; k++)
+ {
+ // the widget ID
+ var wid = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+
+ theWindow.deregisterMouseWidget(wid);
+ }
+ }
+
+ // the number of windows with new "any widgets"
+ windowNo = me.readInt16BinaryMessage(mobj.message, offset);
+ offset = offset + 2;
+
+ for (var j = 0; j < windowNo; j++)
+ {
+ // the window ID
+ var windowID = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+
+ if (!p2j.screen.isExistingWindowId(windowID))
+ {
+ console.log("undefined window " + windowID);
+ continue;
+ }
+
+ var theWindow = p2j.screen.getWindow(windowID);
+
+ // the number of new "any widgets" in this window
+ var widgetNo = me.readInt16BinaryMessage(mobj.message, offset);
+ offset = offset + 2;
+
+ for (var k = 0; k < widgetNo; k++)
+ {
+ // the widget ID
+ var wid = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+ theWindow.deregisterAnyMouseWidget(wid);
+ theWindow.registerAnyMouseWidget(wid);
+ }
+ }
+
+ // the number of windows with dead "any widgets"
+ windowNo = me.readInt16BinaryMessage(mobj.message, offset);
+ offset = offset + 2;
+
+ for (var j = 0; j < windowNo; j++)
+ {
+ // the window ID
+ var windowID = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+
+ var theWindow = p2j.screen.getWindow(windowID);
+
+ if (theWindow == undefined)
+ {
+ console.log("undefined window" + windowID);
+ continue;
+ }
+
+ // the number of dead "any widgets" in this window
+ var widgetNo = me.readInt16BinaryMessage(mobj.message, offset);
+ offset = offset + 2;
+
+ for (var k = 0; k < widgetNo; k++)
+ {
+ // the widget ID
+ var wid = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+
+ theWindow.deregisterAnyMouseWidget(wid);
+ }
+ }
+ }, 1);
break;
case 0x97:
- // enable/disable mouse events
- p2j.screen.captureMouseEvents(message[1] == 1);
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ // enable/disable mouse events
+ p2j.screen.captureMouseEvents(mobj.message[1] == 1);
+ }, 1);
break;
case 0x98:
- // enable/disable OS events
- var wid = me.readInt32BinaryMessage(message, 1);
- p2j.screen.enableOsEvents(wid, message[5] == 1);
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ // enable/disable OS events
+ var wid = me.readInt32BinaryMessage(mobj.message, 1);
+ p2j.screen.enableOsEvents(wid, mobj.message[5] == 1);
+ }, 1);
break;
case 0x99:
- // set window iconification state
- var offset = 1;
-
- var windowID = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
-
- var iconified = (message[offset] == 1);
- offset = offset + 1;
-
- var theWindow = p2j.screen.getWindow(windowID);
- //p2j.logger.log("recieved 0x99: iconified = " + iconified + " windowId=" + windowID);
- if (iconified)
- {
- theWindow.iconify();
- }
- else
- {
- theWindow.deiconify();
- }
-
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ // set window iconification state
+ var offset = 1;
+
+ var windowID = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+
+ var iconified = (mobj.message[offset] == 1);
+ offset = offset + 1;
+
+ var theWindow = p2j.screen.getWindow(windowID);
+ //p2j.logger.log("recieved 0x99: iconified = " + iconified + " windowId=" + windowID);
+ if (iconified)
+ {
+ theWindow.iconify();
+ }
+ else
+ {
+ theWindow.deiconify();
+ }
+ }, 1);
break;
case 0x9A:
- // resizeable window
- var offset = 1;
-
- var windowID = me.readInt32BinaryMessage(message, offset);
- offset = offset + 4;
-
- var theWindow = p2j.screen.getWindow(windowID);
-
- theWindow.resizeable = (message[offset] == 1);
- offset = offset + 1;
-
- if (theWindow.resizeable)
- {
- theWindow.minWidth = me.readInt16BinaryMessage(message, offset);
- offset = offset + 2;
- theWindow.minHeight = me.readInt16BinaryMessage(message, offset);
- offset = offset + 2;
-
- theWindow.maxWidth = me.readInt16BinaryMessage(message, offset);
- offset = offset + 2;
- theWindow.maxHeight = me.readInt16BinaryMessage(message, offset);
- offset = offset + 2;
- }
- else
- {
- var rect = theWindow.canvas.getBoundingClientRect();
-
- var rwidth = rect.right - rect.left + 1;
- var rheight = rect.bottom - rect.top + 1;
-
- theWindow.minWidth = rwidth;
- theWindow.minHeight = rheight;
-
- theWindow.maxWidth = rwidth;
- theWindow.maxHeight = rheight;
- }
-
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ // resizeable window
+ var offset = 1;
+
+ var windowID = me.readInt32BinaryMessage(mobj.message, offset);
+ offset = offset + 4;
+
+ var theWindow = p2j.screen.getWindow(windowID);
+
+ theWindow.resizeable = (mobj.message[offset] == 1);
+ offset = offset + 1;
+
+ if (theWindow.resizeable)
+ {
+ theWindow.minWidth = me.readInt16BinaryMessage(mobj.message, offset);
+ offset = offset + 2;
+ theWindow.minHeight = me.readInt16BinaryMessage(mobj.message, offset);
+ offset = offset + 2;
+
+ theWindow.maxWidth = me.readInt16BinaryMessage(mobj.message, offset);
+ offset = offset + 2;
+ theWindow.maxHeight = me.readInt16BinaryMessage(mobj.message, offset);
+ offset = offset + 2;
+ }
+ else
+ {
+ var rect = theWindow.canvas.getBoundingClientRect();
+
+ var rwidth = rect.right - rect.left + 1;
+ var rheight = rect.bottom - rect.top + 1;
+
+ theWindow.minWidth = rwidth;
+ theWindow.minHeight = rheight;
+
+ theWindow.maxWidth = rwidth;
+ theWindow.maxHeight = rheight;
+ }
+ }, 1);
break;
case 0x9B:
- // current editors selection is changed
- var text = me.readStringBinaryMessage(message, 1);
- p2j.clipboard.setSelection(text);
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ // current editors selection is changed
+ var text = me.readStringBinaryMessage(mobj.message, 1);
+ p2j.clipboard.setSelection(text);
+ }, 1);
break;
case 0x9C:
- var id = me.readInt32BinaryMessage(message, 1);
- p2j.screen.moveToTop(id);
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ var id = me.readInt32BinaryMessage(mobj.message, 1);
+ p2j.screen.moveToTop(id);
+ }, 1);
break;
case 0x9D:
- var id = me.readInt32BinaryMessage(message, 1);
- p2j.screen.moveToBottom(id);
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ var id = me.readInt32BinaryMessage(mobj.message, 1);
+ p2j.screen.moveToBottom(id);
+ }, 1);
break;
case 0x9E:
- // change sensitivity for top-level or child window
- var id = me.readInt32BinaryMessage(message, 1);
- var enabled = message[5] === 0 ? false : true;
- p2j.screen.setWindowEnabled(id, enabled);
+ var mobj = {message : message};
+ setTimeout(
+ function()
+ {
+ // change sensitivity for top-level or child window
+ var id = me.readInt32BinaryMessage(mobj.message, 1);
+ var enabled = mobj.message[5] === 0 ? false : true;
+ p2j.screen.setWindowEnabled(id, enabled);
+ }, 1);
break;
};
}
@@ -924,7 +1081,7 @@
{
case 0:
// color palette
- p2j.screen.palette = pay.p;
+ p2j.screen.palette = pay.p;
break;
};
}
@@ -945,7 +1102,7 @@
{
ws.close();
}
- };
+ };
}
else
{
=== modified file 'src/com/goldencode/p2j/ui/client/gui/driver/web/res/p2j.mouse.js'
--- src/com/goldencode/p2j/ui/client/gui/driver/web/res/p2j.mouse.js 2015-11-12 18:54:21 +0000
+++ src/com/goldencode/p2j/ui/client/gui/driver/web/res/p2j.mouse.js 2015-11-27 17:00:12 +0000
@@ -534,8 +534,14 @@
{
return;
}
- // resize canvas
+ // resize the offscreen canvas
win.resize(mThis.resizeArea.width, mThis.resizeArea.height);
+ // set dimension for the window canvas
+ win.canvas.width = mThis.resizeArea.width;
+ win.canvas.height = mThis.resizeArea.height;
+ // blast the offscreen image to the window canvas
+ win.ctx.drawImage(win.offscreenCanvas, 0, 0);
+
// set new location
win.canvas.style.left = mThis.resizeArea.left + "px";
win.canvas.style.top = mThis.resizeArea.top + "px";
=== modified file 'src/com/goldencode/p2j/ui/client/gui/driver/web/res/p2j.screen.js'
--- src/com/goldencode/p2j/ui/client/gui/driver/web/res/p2j.screen.js 2015-11-24 19:25:52 +0000
+++ src/com/goldencode/p2j/ui/client/gui/driver/web/res/p2j.screen.js 2015-11-27 20:22:54 +0000
@@ -337,8 +337,14 @@
/** Backing canvas on which all output for this window will be rendered. */
this.canvas = p2j.createCanvas(null, options);
+ this.canvas.style.visibility = "hidden";
+
this.resizeable = false;
-
+
+ /** The off screen canvas to be used to make batch drawing. */
+ this.offscreenCanvas = document.createElement('canvas');
+ this.offscreenContext = this.offscreenCanvas.getContext('2d', {alpha : true});
+
/** Canvas 2D graphics context. */
this.ctx = this.canvas.getContext('2d', {alpha : true});
@@ -355,7 +361,7 @@
this.iconHeight = 0;
/** Creates canvas renderer. */
- this.canvasRenderer = new CanvasRenderer(this.canvas, this.ctx, strokesManager,
+ this.canvasRenderer = new CanvasRenderer(this.offscreenCanvas, this.offscreenContext, strokesManager,
p2j.fonts, p2j.logger);
/**
@@ -849,9 +855,9 @@
var numOps = p2j.socket.readInt32BinaryMessage(message, 5);
p2j.logger.log("START DRAWING CYCLE FOR WINDOW " + this.id);
-
+
var idx = 9;
-
+
drawLoop:
for (var i = 0; i < numOps; i++)
{
@@ -904,7 +910,6 @@
y = p2j.socket.readInt32BinaryMessage(message, idx + offset);
offset = offset + 4;
-
this.canvasRenderer.drawText(text, x, y, centered);
extra = " text = " + text + "; x = " + x + "; y = " + y +
"; centered = " + centered;
@@ -932,7 +937,6 @@
var lheight = p2j.socket.readInt32BinaryMessage(message, idx + offset);
offset = offset + 4;
-
this.canvasRenderer.drawScaledText(currentFont, text, x, y, centered, lwidth, lheight);
extra = " text = " + text + "; x = " + x + "; y = " + y +
"; centered = " + centered +
@@ -960,9 +964,8 @@
offset = offset + 4;
// TODO: this might need to be 'bottom', too
- this.ctx.textBaseline = 'top';
-
- me.layoutParagraphWorker(this.ctx, text, fontId, x, y, width);
+ this.offscreenContext.textBaseline = 'top';
+ me.layoutParagraphWorker(this.offscreenContext, text, fontId, x, y, width);
break;
case ops.DRAW_LINE:
@@ -971,7 +974,8 @@
var x2 = p2j.socket.readInt32BinaryMessage(message, idx + 9);
var y2 = p2j.socket.readInt32BinaryMessage(message, idx + 13);
extra = " x1 = " + x1 + "; y1 = " + y1 + "; x2 = " + x2 + "; y2 = " + y2;
- this.canvasRenderer.strokeLineSegment(this.ctx, x1, y1, x2, y2, this.canvasRenderer.rawColor);
+ this.canvasRenderer.strokeLineSegment(this.offscreenContext,
+ x1, y1, x2, y2, this.canvasRenderer.rawColor);
break;
case ops.DRAW_RECT:
case ops.FILL_RECT:
@@ -979,9 +983,9 @@
y = p2j.socket.readInt32BinaryMessage(message, idx + 5);
width = p2j.socket.readInt32BinaryMessage(message, idx + 9);
height = p2j.socket.readInt32BinaryMessage(message, idx + 13);
+ filled = (type === ops.FILL_RECT);
extra = " x = " + x + "; y = " + y + "; width = " + width + "; height = " + height;
- filled = (type === ops.FILL_RECT);
- this.canvasRenderer.strokeRect(this.ctx, x, y, width, height,
+ this.canvasRenderer.strokeRect(this.offscreenContext, x, y, width, height,
this.canvasRenderer.rawColor, filled);
break;
case ops.DRAW_ROUND_RECT:
@@ -991,8 +995,9 @@
height = p2j.socket.readInt32BinaryMessage(message, idx + 13);
diameter = p2j.socket.readInt32BinaryMessage(message, idx + 17);
extra = " x = " + x + "; y = " + y + "; width = " + width + "; height = " + height
- + "; diameter = " + diameter;
- this.canvasRenderer.drawRoundRect(this.ctx, x, y, width, height, diameter,
+ + "; diameter = " + diameter;
+ this.canvasRenderer.drawRoundRect(this.offscreenContext, x, y,
+ width, height, diameter,
this.canvasRenderer.rawColor, false);
break;
case ops.DRAW_IMAGE:
@@ -1003,7 +1008,6 @@
height = p2j.socket.readInt32BinaryMessage(message, idx + 13);
extra = " x = " + x + "; y = " + y + "; width = " + width + "; height = " + height;
-
var encoding = message[idx + 17];
var key = p2j.socket.readInt32BinaryMessage(message, idx + 18);
var pixelsInBytes = width * height * 4;
@@ -1018,9 +1022,11 @@
{
imgData = message;
imgDataOffset = idx + 22;
- loadedImages.set(key, message.subarray(imgDataOffset, imgDataOffset + pixelsInBytes));
+ loadedImages.set(key, message.subarray(
+ imgDataOffset, imgDataOffset + pixelsInBytes));
}
- this.canvasRenderer.drawImage(this.ctx, x, y, width, height, imgData, imgDataOffset);
+ this.canvasRenderer.drawImage(this.offscreenContext, x, y, width, height,
+ imgData, imgDataOffset);
break;
case ops.FILL_ROUND_RECT:
x = p2j.socket.readInt32BinaryMessage(message, idx + 1);
@@ -1030,13 +1036,12 @@
diameter = p2j.socket.readInt32BinaryMessage(message, idx + 17);
extra = " x = " + x + "; y = " + y + "; width = " + width + "; height = " + height
+ "; diameter = " + diameter;
- this.canvasRenderer.drawRoundRect(this.ctx, x, y, width, height, diameter,
- this.canvasRenderer.rawColor, true);
+ this.canvasRenderer.drawRoundRect(this.offscreenContext, x, y, width, height,
+ diameter, this.canvasRenderer.rawColor, true);
break;
case ops.FILL_POLYGON:
offset = idx + 1;
var numPoints = p2j.socket.readInt32BinaryMessage(message, offset);
-
var xPoints = [];
var yPoints = [];
@@ -1048,8 +1053,8 @@
yPoints[j] = p2j.socket.readInt32BinaryMessage(message, offset);
}
- this.canvasRenderer.strokePolygon(this.ctx, xPoints, yPoints, numPoints,
- this.canvasRenderer.rawColor, true);
+ this.canvasRenderer.strokePolygon(this.offscreenContext, xPoints, yPoints,
+ numPoints, this.canvasRenderer.rawColor, true);
break;
case ops.DRAW_3D_RECT:
case ops.FILL_3D_RECT:
@@ -1060,8 +1065,8 @@
raised = (message[idx + 17] === 1);
filled = (type == ops.FILL_3D_RECT);
extra = " x = " + x +"; y = " + y + "; width = " + width + "; height = " +
- height + "; raised = " + raised;
- this.canvasRenderer.draw3DRect(this.ctx, x, y, width, height,
+ height + "; raised = " + raised;
+ this.canvasRenderer.draw3DRect(this.offscreenContext, x, y, width, height,
this.canvasRenderer.rawColor, filled, raised);
break;
case ops.SET_COLOR:
@@ -1079,22 +1084,21 @@
break;
case ops.SET_FONT:
fontId = p2j.socket.readInt32BinaryMessage(message, idx + 1);
-
- setFont(this.ctx, fontId);
+ setFont(this.offscreenContext, fontId);
break;
case ops.SET_FONT_STYLE:
var style = p2j.socket.readInt32BinaryMessage(message, idx + 1);
-
p2j.fonts.setFontStyle(currentFont, style);
fname = p2j.fonts.getFontName(currentFont);
- this.ctx.font = fname;
+ this.offscreenContext.font = fname;
break;
case ops.TRANSLATE_PUSH:
x = p2j.socket.readInt32BinaryMessage(message, idx + 1);
y = p2j.socket.readInt32BinaryMessage(message, idx + 5);
this.trans++;
- extra = " " + this.trans.toString() + "; x = " + x.toString() +"; y = " + y.toString();
- this.canvasRenderer.translate(x, y);
+ extra = " " + this.trans.toString() + "; x = " + x.toString()
+ + "; y = " + y.toString();
+ this.canvasRenderer.translate(x, y);
break;
case ops.TRANSLATE_POP:
x = p2j.socket.readInt32BinaryMessage(message, idx + 1);
@@ -1129,6 +1133,9 @@
width = p2j.socket.readInt32BinaryMessage(message, idx + 9);
height = p2j.socket.readInt32BinaryMessage(message, idx + 13);
this.resize(width, height);
+ this.canvas.width = width;
+ this.canvas.height = height;
+
extra = " x = " + x + "; y = " + y + "; width = " + width + "; height = " + height;
break;
case ops.SET_LOCATION:
@@ -1142,6 +1149,8 @@
width = p2j.socket.readInt32BinaryMessage(message, idx + 1);
height = p2j.socket.readInt32BinaryMessage(message, idx + 5);
this.resize(width, height);
+ this.canvas.width = width;
+ this.canvas.height = height;
extra = " width = " + width + "; height = " + height;
break;
case ops.DRAW_HIGHLIGHT:
@@ -1207,7 +1216,8 @@
p2j.logger.log("PaintPrimitives." + ops[type] + " " + extra);
idx += sz;
}
-
+ // to blast the offscreen image on the window canvas
+ this.ctx.drawImage(this.offscreenCanvas, 0, 0);
p2j.logger.log("END DRAWING CYCLE FOR WINDOW " + this.id);
};