mirror of
https://github.com/danbulant/node-x11
synced 2026-07-09 21:21:04 +00:00
Merge pull request #70 from Champii/master
CreateCursor, valueMask and format
This commit is contained in:
commit
3e3846d6e6
42 changed files with 500 additions and 412 deletions
|
|
@ -26,9 +26,9 @@ var kk2name = {};
|
|||
x11.createClient(function(err, display)
|
||||
{
|
||||
var X = display.client;
|
||||
X.require('big-requests', function(BigReq)
|
||||
X.require('big-requests', function(err, BigReq)
|
||||
{
|
||||
X.require('render', function(Render) {
|
||||
X.require('render', function(err, Render) {
|
||||
X.Render = Render;
|
||||
BigReq.Enable(function(err, maxLen)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -294,7 +294,7 @@ x11.createClient(function(error, display) {
|
|||
var root = display.screen[0].root;
|
||||
var width = 500;
|
||||
var height = 500;
|
||||
X.require('glx', function(GLX) {
|
||||
X.require('glx', function(err, GLX) {
|
||||
var depth = 24;
|
||||
findBestVisual(display, function(err, visual) {
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ var listId = 1;
|
|||
x11.createClient(function(err, display) {
|
||||
var X = display.client;
|
||||
var root = display.screen[0].root;
|
||||
X.require('glx', function(GLX) {
|
||||
X.require('glx', function(err, GLX) {
|
||||
var visual = 0;
|
||||
var visuals = display.screen[0].depths[24];
|
||||
for (visual in visuals) {
|
||||
|
|
|
|||
|
|
@ -304,7 +304,7 @@ x11.createClient(function(err, display) {
|
|||
var root = display.screen[0].root;
|
||||
var width = 1000;
|
||||
var height = 1000;
|
||||
X.require('glx', function(GLX) {
|
||||
X.require('glx', function(err, GLX) {
|
||||
var visual = 0xa1;
|
||||
var win = X.AllocID();
|
||||
X.CreateWindow(win, root, 0, 0, width, height, 0, 0, 0, 0, { eventMask: eventmask });
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ for(var i=0; i < 20000; ++i) {
|
|||
var xclient = x11.createClient(function(err, display) {
|
||||
var X = display.client;
|
||||
var root = display.screen[0].root;
|
||||
X.require('glx', function(GLX) {
|
||||
X.require('glx', function(err, GLX) {
|
||||
var screen = 0;
|
||||
var isDirect = 0;
|
||||
var ctx = X.AllocID();
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ var gradNo = 0;
|
|||
var xclient = x11.createClient(function(err, display) {
|
||||
X = display.client;
|
||||
var root = display.screen[0].root;
|
||||
X.require('render', function(rendExt) {
|
||||
X.require('render', function(err, rendExt) {
|
||||
Render = rendExt;
|
||||
var wid = X.AllocID();
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ var Exposure = x11.eventMask.Exposure;
|
|||
x11.createClient(function(err, display)
|
||||
{
|
||||
var X = display.client;
|
||||
X.require('render', function(Render) {
|
||||
X.require('render', function(err, Render) {
|
||||
var root = display.screen[0].root;
|
||||
main(root, X, Render);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ var x11 = require('../../lib');
|
|||
x11.createClient(
|
||||
function(err, display) {
|
||||
var X = display.client;
|
||||
X.require('render', function(Render) {
|
||||
X.require('render', function(err, Render) {
|
||||
|
||||
var root = display.screen[0].root;
|
||||
var win = X.AllocID();
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ var PointerMotion = x11.eventMask.PointerMotion;
|
|||
var xclient = x11.createClient(function(err, display) {
|
||||
var X = display.client;
|
||||
var root = display.screen[0].root;
|
||||
display.client.require('render', function(Render) {
|
||||
display.client.require('render', function(err, Render) {
|
||||
var wid = X.AllocID();
|
||||
var white = display.screen[0].white_pixel;
|
||||
varblack = display.screen[0].black_pixel;
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ function padWidth(buf, width) {
|
|||
var xclient = x11.createClient({ debug: true }, function(err, display) {
|
||||
var X = display.client;
|
||||
var root = display.screen[0].root;
|
||||
display.client.require('render', function(Render) {
|
||||
display.client.require('render', function(err, Render) {
|
||||
var wid = X.AllocID();
|
||||
var white = display.screen[0].white_pixel;
|
||||
varblack = display.screen[0].black_pixel;
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ var x11 = require('../../lib');
|
|||
x11.createClient(function(err, display) {
|
||||
var X = display.client;
|
||||
var root = display.screen[0].root;
|
||||
X.require('apple-wm', function(AppleWM) {
|
||||
X.require('apple-wm', function(err, AppleWM) {
|
||||
//AppleWM.SetFrontProcess();
|
||||
//AppleWM.CanQuit(true);
|
||||
AppleWM.SelectInput(AppleWM.NotifyMask.All)
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@ var x11 = require('../../lib');
|
|||
x11.createClient(function(err, display) {
|
||||
var X = display.client;
|
||||
var root = display.screen[0].root;
|
||||
X.require('composite', function(Composite) {
|
||||
X.require('damage', function(Damage) {
|
||||
X.require('composite', function(err, Composite) {
|
||||
X.require('damage', function(err, Damage) {
|
||||
var wid = parseInt(process.argv[2]);
|
||||
//Composite.GetOverlayWindow(wid, function(err, overlayid) {
|
||||
// console.log("OVERLAY:", err, overlayid);
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ var x11 = require('../../lib');
|
|||
x11.createClient(function(err, display) {
|
||||
var X = display.client;
|
||||
var root = display.screen[0].root;
|
||||
X.require('damage', function(Damage) {
|
||||
X.require('damage', function(err, Damage) {
|
||||
console.log(Damage);
|
||||
var id = parseInt(process.argv[2]);
|
||||
var damage = X.AllocID();
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ var x11 = require('../../lib');
|
|||
x11.createClient(function(err, display) {
|
||||
var X = display.client;
|
||||
var root = display.screen[0].root;
|
||||
X.require('fixes', function(Fixes) {
|
||||
X.require('fixes', function(err, Fixes) {
|
||||
console.log(Fixes);
|
||||
var win = X.AllocID();
|
||||
X.CreateWindow(win, root, 0, 0, 100, 100);
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ x11.createClient(function(err, display) {
|
|||
if (err) throw err;
|
||||
|
||||
var X = display.client;
|
||||
X.require('render', function(Render) {
|
||||
X.require('render', function(err, Render) {
|
||||
|
||||
var root = display.screen[0].root;
|
||||
var white = display.screen[0].white_pixel;
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ var x11 = require('../../lib');
|
|||
x11.createClient(function(err, display) {
|
||||
var X = display.client;
|
||||
var root = display.screen[0].root;
|
||||
X.require('randr', function(Randr) {
|
||||
X.require('randr', function(err, Randr) {
|
||||
//console.log(Randr);
|
||||
//Randr.QueryVersion(1, 4, console.log);
|
||||
Randr.SelectInput(root, Randr.NotifyMask.ScreenChange);
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ var x11 = require('../../lib');
|
|||
x11.createClient(function(err, display) {
|
||||
var X = display.client;
|
||||
var root = display.screen[0].root;
|
||||
X.require('shape', function(Shape) {
|
||||
X.require('shape', function(err, Shape) {
|
||||
var win = X.AllocID();
|
||||
X.CreateWindow(win, root, 0, 0, 200, 200);
|
||||
var gc = X.AllocID();
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ x11.createClient(function(err, display) {
|
|||
X.SetScreenSaver(20, 10, 2, 2);
|
||||
|
||||
|
||||
X.require('screen-saver', function(SS) {
|
||||
X.require('screen-saver', function(err, SS) {
|
||||
SS.SelectInput(root, SS.eventMask.Notify|SS.eventMask.Cycle);
|
||||
//console.log(SS);
|
||||
//setTimeout(function() {
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ x11.createClient(function(err, display) {
|
|||
X.MapWindow(wid);
|
||||
|
||||
var gc = X.AllocID();
|
||||
X.require('render', function(Render) {
|
||||
X.require('render', function(err, Render) {
|
||||
|
||||
var pict = X.AllocID();
|
||||
Render.CreatePicture(pict, wid, Render.rgba32);
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ var x11 = require('../../lib');
|
|||
x11.createClient(function(err, display) {
|
||||
var X = display.client;
|
||||
var root = display.screen[0].root;
|
||||
X.require('xc-misc', function(Misc) {
|
||||
X.require('xc-misc', function(err, Misc) {
|
||||
var xid = X.AllocID();
|
||||
console.log("first ID from connection: " + xid);
|
||||
debugger;
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ var x11 = require('../../lib');
|
|||
var xclient = x11.createClient(function(err, display) {
|
||||
var X = display.client;
|
||||
var root = display.screen[0].root;
|
||||
display.client.require('xtest', function(Test) {
|
||||
display.client.require('xtest', function(err, Test) {
|
||||
console.log(Test);
|
||||
setInterval(function() {
|
||||
Test.FakeInput(Test.KeyPress, 65, 0, root, 0, 0); // space
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ var KeyRelease = x11.eventMask.KeyRelease;
|
|||
|
||||
x11.createClient(function(err, display) {
|
||||
var X = display.client;
|
||||
X.require('big-requests', function(BigReq) {
|
||||
X.require('big-requests', function(err, BigReq) {
|
||||
BigReq.Enable(function(err, maxLen) {
|
||||
var keycode2keysym = [];
|
||||
var min = display.min_keycode;
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ function ManageWindow(wid)
|
|||
|
||||
x11.createClient(function(err, display) {
|
||||
X = display.client;
|
||||
X.require('render', function(Render) {
|
||||
X.require('render', function(err, Render) {
|
||||
X.Render = Render;
|
||||
|
||||
root = display.screen[0].root;
|
||||
|
|
|
|||
386
lib/corereqs.js
386
lib/corereqs.js
|
|
@ -6,70 +6,207 @@ var hexy = require('./hexy').hexy;
|
|||
|
||||
var valueMask = {
|
||||
CreateWindow: {
|
||||
backgroundPixmap: 0x00000001,
|
||||
backgroundPixel : 0x00000002,
|
||||
borderPixmap : 0x00000004,
|
||||
borderPixel : 0x00000008,
|
||||
bitGravity : 0x00000010,
|
||||
winGravity : 0x00000020,
|
||||
backingStore : 0x00000040,
|
||||
backingPlanes : 0x00000080,
|
||||
backingPixel : 0x00000100,
|
||||
overrideRedirect: 0x00000200,
|
||||
saveUnder : 0x00000400,
|
||||
eventMask : 0x00000800,
|
||||
doNotPropagateMask: 0x00001000,
|
||||
colormap : 0x00002000,
|
||||
cursor : 0x00004000
|
||||
backgroundPixmap : {
|
||||
mask: 0x00000001,
|
||||
format: 'L'
|
||||
},
|
||||
backgroundPixel : {
|
||||
mask: 0x00000002,
|
||||
format: 'L'
|
||||
},
|
||||
borderPixmap : {
|
||||
mask: 0x00000004,
|
||||
format: 'L'
|
||||
},
|
||||
borderPixel : {
|
||||
mask: 0x00000008,
|
||||
format: 'L'
|
||||
},
|
||||
bitGravity : {
|
||||
mask: 0x00000010,
|
||||
format: 'C'
|
||||
},
|
||||
winGravity : {
|
||||
mask: 0x00000020,
|
||||
format: 'C'
|
||||
},
|
||||
backingStore : {
|
||||
mask: 0x00000040,
|
||||
format: 'C'
|
||||
},
|
||||
backingPlanes : {
|
||||
mask: 0x00000080,
|
||||
format: 'L'
|
||||
},
|
||||
backingPixel : {
|
||||
mask: 0x00000100,
|
||||
format: 'L'
|
||||
},
|
||||
overrideRedirect : {
|
||||
mask: 0x00000200,
|
||||
format: 'C'
|
||||
},
|
||||
saveUnder : {
|
||||
mask: 0x00000400,
|
||||
format: 'C'
|
||||
},
|
||||
eventMask : {
|
||||
mask: 0x00000800,
|
||||
format: 'L'
|
||||
},
|
||||
doNotPropagateMask : {
|
||||
mask: 0x00001000,
|
||||
format: 'L'
|
||||
},
|
||||
colormap : {
|
||||
mask: 0x00002000,
|
||||
format: 'L'
|
||||
},
|
||||
cursor : {
|
||||
mask: 0x00004000,
|
||||
format: 'L'
|
||||
}
|
||||
},
|
||||
CreateGC: {
|
||||
'function' : 0x00000001, // TODO: alias? _function?
|
||||
planeMask : 0x00000002,
|
||||
foreground : 0x00000004,
|
||||
background : 0x00000008,
|
||||
lineWidth : 0x00000010,
|
||||
lineStyle : 0x00000020,
|
||||
capStyle : 0x00000040,
|
||||
joinStyle : 0x00000080,
|
||||
fillStyle : 0x00000100,
|
||||
fillRule : 0x00000200,
|
||||
tile : 0x00000400,
|
||||
stipple : 0x00000800,
|
||||
tileStippleXOrigin: 0x00001000,
|
||||
tileStippleYOrigin: 0x00002000,
|
||||
font : 0x00004000,
|
||||
subwindowMode: 0x00008000,
|
||||
graphicsExposures: 0x00010000,
|
||||
clipXOrigin : 0x00020000,
|
||||
clipYOrigin : 0x00040000,
|
||||
clipMask : 0x00080000,
|
||||
dashOffset : 0x00100000,
|
||||
dashes : 0x00200000,
|
||||
arcMode : 0x00400000
|
||||
'function' : { // TODO: alias? _function?
|
||||
mask: 0x00000001,
|
||||
format: 'C'
|
||||
},
|
||||
planeMask : {
|
||||
mask: 0x00000002,
|
||||
format: 'L'
|
||||
},
|
||||
foreground : {
|
||||
mask: 0x00000004,
|
||||
format: 'L'
|
||||
},
|
||||
background : {
|
||||
mask: 0x00000008,
|
||||
format: 'L'
|
||||
},
|
||||
lineWidth : {
|
||||
mask: 0x00000010,
|
||||
format: 'S'
|
||||
},
|
||||
lineStyle : {
|
||||
mask: 0x00000020,
|
||||
format: 'C'
|
||||
},
|
||||
capStyle : {
|
||||
mask: 0x00000040,
|
||||
format: 'C'
|
||||
},
|
||||
joinStyle : {
|
||||
mask: 0x00000080,
|
||||
format: 'C'
|
||||
},
|
||||
fillStyle : {
|
||||
mask: 0x00000100,
|
||||
format: 'C'
|
||||
},
|
||||
fillRule : {
|
||||
mask: 0x00000200,
|
||||
format: 'C'
|
||||
},
|
||||
tile : {
|
||||
mask: 0x00000400,
|
||||
format: 'L'
|
||||
},
|
||||
stipple : {
|
||||
mask: 0x00000800,
|
||||
format: 'L'
|
||||
},
|
||||
tileStippleXOrigin : {
|
||||
mask: 0x00001000,
|
||||
format: 's'
|
||||
},
|
||||
tileStippleYOrigin : {
|
||||
mask: 0x00002000,
|
||||
format: 's'
|
||||
},
|
||||
font : {
|
||||
mask: 0x00004000,
|
||||
format: 'L'
|
||||
},
|
||||
subwindowMode : {
|
||||
mask: 0x00008000,
|
||||
format: 'C'
|
||||
},
|
||||
graphicsExposures : {
|
||||
mask: 0x00010000,
|
||||
format: 'C'
|
||||
},
|
||||
clipXOrigin : {
|
||||
mask: 0x00020000,
|
||||
format: 'S'
|
||||
},
|
||||
clipYOrigin : {
|
||||
mask: 0x00040000,
|
||||
format: 'S'
|
||||
},
|
||||
clipMask : {
|
||||
mask: 0x00080000,
|
||||
format: 'L'
|
||||
},
|
||||
dashOffset : {
|
||||
mask: 0x00100000,
|
||||
format: 'S'
|
||||
},
|
||||
dashes : {
|
||||
mask: 0x00200000,
|
||||
format: 'C'
|
||||
},
|
||||
arcMode : {
|
||||
mask: 0x00400000,
|
||||
format: 'C'
|
||||
}
|
||||
},
|
||||
ConfigureWindow: {
|
||||
x: 0x000001,
|
||||
y: 0x000002,
|
||||
width: 0x000004,
|
||||
height: 0x000008,
|
||||
borderWidth: 0x000010,
|
||||
sibling: 0x000020,
|
||||
stackMode: 0x000040
|
||||
x : {
|
||||
mask: 0x000001,
|
||||
format: 'sxx'
|
||||
},
|
||||
y : {
|
||||
mask: 0x000002,
|
||||
format: 'sxx'
|
||||
},
|
||||
width : {
|
||||
mask: 0x000004,
|
||||
format: 'Sxx'
|
||||
},
|
||||
height : {
|
||||
mask: 0x000008,
|
||||
format: 'Sxx'
|
||||
},
|
||||
borderWidth : {
|
||||
mask: 0x000010,
|
||||
format: 'Sxx'
|
||||
},
|
||||
sibling : {
|
||||
mask: 0x000020,
|
||||
format: 'L'
|
||||
},
|
||||
stackMode : {
|
||||
mask: 0x000040,
|
||||
format: 'Cxxx'
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
var valueMaskName = {};
|
||||
for (var req in valueMask) {
|
||||
var masks = valueMask[req];
|
||||
var names = valueMaskName[req] = {};
|
||||
for (var m in masks)
|
||||
names[masks[m]] = m;
|
||||
names[masks[m].mask] = m;
|
||||
}
|
||||
|
||||
function packValueMask(reqname, values)
|
||||
{
|
||||
var bitmask = 0;
|
||||
var masksList = [];
|
||||
var format = '';
|
||||
var reqValueMask = valueMask[reqname];
|
||||
var reqValueMaskName = valueMaskName[reqname];
|
||||
|
||||
|
|
@ -78,7 +215,7 @@ function packValueMask(reqname, values)
|
|||
|
||||
for (var v in values)
|
||||
{
|
||||
var valueBit = reqValueMask[v];
|
||||
var valueBit = reqValueMask[v].mask;
|
||||
if (!valueBit)
|
||||
throw new Error(reqname + ': incorrect value param ' + v);
|
||||
masksList.push(valueBit);
|
||||
|
|
@ -89,9 +226,10 @@ function packValueMask(reqname, values)
|
|||
for (m in masksList)
|
||||
{
|
||||
var valueName = reqValueMaskName[masksList[m]];
|
||||
format += reqValueMask[valueName].format
|
||||
args.push( values[valueName] );
|
||||
}
|
||||
return [bitmask, args]
|
||||
return [format, bitmask, args]
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -132,45 +270,21 @@ var templates = {
|
|||
if (values === undefined)
|
||||
values = {}
|
||||
|
||||
var packetLength = 8 + (values ? Object.keys(values).length : 0);
|
||||
var format = 'CCSLLssSSSSLL';
|
||||
|
||||
// create bitmask
|
||||
var bitmask = 0;
|
||||
// TODO: slice from function arguments?
|
||||
var args = [1, depth, packetLength, id, parentId, x, y, width, height, borderWidth, _class, visual];
|
||||
|
||||
// TODO: the code is a little bit mess
|
||||
// additional values need to be packed in the following way:
|
||||
// bitmask (bytes #24 to #31 in the packet) - 32 bit indicating what adittional arguments we supply
|
||||
// values list (bytes #32 .. #32+4*num_values) in order of corresponding bits TODO: it's actually not 4*num. Some values are 4b ytes, some - 1 byte
|
||||
|
||||
|
||||
// TODO: replace with packValueMask
|
||||
var masksList = [];
|
||||
for (var v in values)
|
||||
{
|
||||
var valueBit = valueMask['CreateWindow'][v];
|
||||
if (!valueBit)
|
||||
{
|
||||
throw new Error('CreateWindow: incorrect value param ' + v);
|
||||
}
|
||||
masksList.push(valueBit);
|
||||
bitmask |= valueBit;
|
||||
format += 'L'; // TODO: not all values are 4 bytes CARD32!!!
|
||||
}
|
||||
// values packed in order of corresponding bit
|
||||
masksList.sort();
|
||||
// set bits to indicate additional values we are sending in this request
|
||||
args.push(bitmask);
|
||||
|
||||
// add values in the order of the bits
|
||||
// TODO: maybe it's better just to scan all 32 bits anstead of sorting parameters we are actually have?
|
||||
for (var m in masksList)
|
||||
{
|
||||
var valueName = valueMaskName['CreateWindow'][masksList[m]];
|
||||
args.push( values[valueName] );
|
||||
}
|
||||
var vals = packValueMask('CreateWindow', values);
|
||||
var packetLength = 8 + (values ? vals[2].length : 0);
|
||||
var args = [1, depth, packetLength, id, parentId, x, y, width, height, borderWidth, _class, visual];
|
||||
format += vals[0];
|
||||
args.push(vals[1]);
|
||||
args = args.concat(vals[2]);
|
||||
return [format, args];
|
||||
}
|
||||
|
||||
|
|
@ -178,16 +292,13 @@ var templates = {
|
|||
|
||||
ChangeWindowAttributes:[
|
||||
function(wid, values) {
|
||||
var format = 'CxSLL';
|
||||
var packetLength = 3 + (values ? Object.keys(values).length : 0);
|
||||
var format = 'CxSLSxx';
|
||||
var vals = packValueMask('CreateWindow', values);
|
||||
var args = [2, packetLength, wid, vals[0]];
|
||||
var valArr = vals[1];
|
||||
for (var v in valArr)
|
||||
{
|
||||
format += 'L';
|
||||
args.push(valArr[v]);
|
||||
}
|
||||
var packetLength = 3 + (values ? vals[2].length : 0);
|
||||
var args = [2, packetLength, wid, vals[1]];
|
||||
var valArr = vals[2];
|
||||
format += vals[0];
|
||||
args = args.concat(valArr);
|
||||
return [format, args];
|
||||
}
|
||||
],
|
||||
|
|
@ -248,60 +359,11 @@ var templates = {
|
|||
* }
|
||||
*/
|
||||
function(win, options) {
|
||||
var format = 'CxSLSxx';
|
||||
var n = 3;
|
||||
var mask = 0;
|
||||
var params = [];
|
||||
if (options.x !== undefined) {
|
||||
mask |= valueMask.ConfigureWindow.x;
|
||||
format += 'sxx';
|
||||
params.push(options.x);
|
||||
++ n;
|
||||
}
|
||||
|
||||
if (options.y !== undefined) {
|
||||
mask |= valueMask.ConfigureWindow.y;
|
||||
format += 'sxx';
|
||||
params.push(options.y);
|
||||
++ n;
|
||||
}
|
||||
|
||||
if (options.width !== undefined) {
|
||||
mask |= valueMask.ConfigureWindow.width;
|
||||
format += 'Sxx';
|
||||
params.push(options.width);
|
||||
++ n;
|
||||
}
|
||||
|
||||
if (options.height !== undefined) {
|
||||
mask |= valueMask.ConfigureWindow.height;
|
||||
format += 'Sxx';
|
||||
params.push(options.height);
|
||||
++ n;
|
||||
}
|
||||
|
||||
if (options.borderWidth !== undefined) {
|
||||
mask |= valueMask.ConfigureWindow.borderWidth;
|
||||
format += 'Sxx';
|
||||
params.push(options.borderWidth);
|
||||
++ n;
|
||||
}
|
||||
|
||||
if (options.sibling !== undefined) {
|
||||
mask |= valueMask.ConfigureWindow.sibling;
|
||||
format += 'L';
|
||||
params.push(options.sibling);
|
||||
++ n;
|
||||
}
|
||||
|
||||
if (options.stackMode !== undefined) {
|
||||
mask |= valueMask.ConfigureWindow.stackMode;
|
||||
format += 'Cxxx';
|
||||
params.push(options.stackMode);
|
||||
++ n;
|
||||
}
|
||||
|
||||
return [format, [12, n, win, mask].concat(params)];
|
||||
var vals = packValueMask('ConfigureWindow', options);
|
||||
var format = 'CxSLSxx' + vals[0];
|
||||
var args = [12, vals[2].length + 3, win, vals[1]];
|
||||
args = args.concat(vals[2]);
|
||||
return [format, args];
|
||||
}
|
||||
],
|
||||
|
||||
|
|
@ -412,7 +474,7 @@ var templates = {
|
|||
},
|
||||
|
||||
function(buf, format) {
|
||||
var res = buf.unpack('LLL');
|
||||
var res = buf.unpack('LLL');
|
||||
var prop = {};
|
||||
prop.type = res[0];
|
||||
prop.bytesAfter = res[1];
|
||||
|
|
@ -651,19 +713,35 @@ var templates = {
|
|||
}
|
||||
],
|
||||
|
||||
FreePixmap: [
|
||||
function (pixmap) {
|
||||
return [ 'CxSL', [54, 2, pixmap] ];
|
||||
}
|
||||
],
|
||||
|
||||
CreateCursor: [
|
||||
function(cid, source, mask, foreRGB, backRGB, x, y) {
|
||||
foreR = foreRGB.R
|
||||
foreG = foreRGB.G
|
||||
foreB = foreRGB.B
|
||||
|
||||
backR = backRGB.R
|
||||
backG = backRGB.G
|
||||
backB = backRGB.B
|
||||
return [ 'CxSLLLSSSSSSSS', [93, 8, cid, source, mask, foreR, foreG, foreB, backR, backG, backB, x, y] ];
|
||||
}
|
||||
],
|
||||
|
||||
// opcode 55
|
||||
CreateGC: [
|
||||
function(cid, drawable, values) {
|
||||
var format = 'CxSLLL';
|
||||
var packetLength = 4 + (values ? Object.keys(values).length : 0);
|
||||
var args = [55, packetLength, cid, drawable];
|
||||
var vals = packValueMask('CreateGC', values);
|
||||
args.push(vals[0]); // values bitmask
|
||||
var valArr = vals[1];
|
||||
for (var v in valArr)
|
||||
{
|
||||
format += 'L'; // TODO: we know format string length in advance and += inefficient for string
|
||||
args.push(valArr[v]);
|
||||
}
|
||||
var packetLength = 4 + (values ? vals[2].length : 0);
|
||||
var args = [55, packetLength, cid, drawable];
|
||||
format += vals[0]
|
||||
args.push(vals[1]); // values bitmask
|
||||
args = args.concat(vals[2])
|
||||
return [format, args];
|
||||
}
|
||||
],
|
||||
|
|
@ -671,9 +749,9 @@ var templates = {
|
|||
ChangeGC: [
|
||||
function(cid, values) {
|
||||
var format = 'CxSLL';
|
||||
var packetLength = 3 + (values ? Object.keys(values).length : 0);
|
||||
var args = [56, packetLength, cid];
|
||||
var vals = packValueMask('CreateGC', values);
|
||||
var packetLength = 3 + (values ? vals[2].length : 0);
|
||||
var args = [56, packetLength, cid];
|
||||
args.push(vals[0]); // values bitmask
|
||||
var valArr = vals[1];
|
||||
for (var v in valArr)
|
||||
|
|
@ -776,7 +854,7 @@ var templates = {
|
|||
return {
|
||||
depth: depth,
|
||||
visualId: visualId,
|
||||
data: buf.slice(20)
|
||||
data: buf.slice(24)
|
||||
};
|
||||
}
|
||||
],
|
||||
|
|
|
|||
|
|
@ -209,13 +209,13 @@ exports.requireExt = function(display, callback)
|
|||
X.pack_stream.flush();
|
||||
}
|
||||
|
||||
callback(ext);
|
||||
callback(null, ext);
|
||||
/*
|
||||
ext.QueryVersion(function(err, vers) {
|
||||
ext.major = vers[0];
|
||||
ext.minor = vers[1];
|
||||
ext.patch = vers[2];
|
||||
callback(ext);
|
||||
callback(null, ext);
|
||||
});
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,6 @@ exports.requireExt = function(display, callback)
|
|||
];
|
||||
X.pack_stream.flush();
|
||||
}
|
||||
callback(ext);
|
||||
callback(null, ext);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -106,9 +106,12 @@ exports.requireExt = function(display, callback)
|
|||
|
||||
// currently version 0.4 TODO: bump up with coordinate translations
|
||||
ext.QueryVersion(0, 4, function(err, vers) {
|
||||
if (err)
|
||||
return callback(err);
|
||||
|
||||
ext.major = vers[0];
|
||||
ext.minor = vers[1];
|
||||
callback(ext);
|
||||
callback(null, ext);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,9 +61,11 @@ exports.requireExt = function(display, callback)
|
|||
}
|
||||
|
||||
ext.QueryVersion(1, 1, function(err, vers) {
|
||||
if (err)
|
||||
return callback(err);
|
||||
ext.major = vers[0];
|
||||
ext.minor = vers[1];
|
||||
callback(ext);
|
||||
callback(null, ext);
|
||||
});
|
||||
|
||||
ext.events = {
|
||||
|
|
|
|||
|
|
@ -94,7 +94,7 @@ exports.requireExt = function(display, callback)
|
|||
X.pack_stream.flush();
|
||||
};
|
||||
|
||||
callback(ext);
|
||||
callback(null, ext);
|
||||
});
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -120,9 +120,11 @@ exports.requireExt = function(display, callback)
|
|||
}
|
||||
|
||||
ext.QueryVersion(5, 0, function(err, vers) {
|
||||
if (err)
|
||||
return callback(err);
|
||||
ext.major = vers[0];
|
||||
ext.minor = vers[1];
|
||||
callback(ext);
|
||||
callback(null, ext);
|
||||
});
|
||||
|
||||
ext.events = {
|
||||
|
|
|
|||
|
|
@ -319,7 +319,7 @@ exports.requireExt = function(display, callback)
|
|||
};
|
||||
});
|
||||
|
||||
callback(ext);
|
||||
callback(null, ext);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -263,6 +263,6 @@ exports.requireExt = function(display, callback)
|
|||
return event;
|
||||
};
|
||||
|
||||
callback(ext);
|
||||
callback(null, ext);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -530,6 +530,8 @@ exports.requireExt = function(display, callback)
|
|||
// 11 - colormap or none
|
||||
|
||||
ext.QueryPictFormat(function(err, formats) {
|
||||
if (err)
|
||||
return callback(err);
|
||||
for (var i=0; i < formats.formats.length; ++i) {
|
||||
var f = formats.formats[i];
|
||||
if (f[2] == 1 && f[10] == 1)
|
||||
|
|
@ -542,7 +544,7 @@ exports.requireExt = function(display, callback)
|
|||
if (f[2] == 8 && f[10] == 255)
|
||||
ext.a8 = f[0];
|
||||
}
|
||||
callback(ext);
|
||||
callback(null, ext);
|
||||
});
|
||||
|
||||
[
|
||||
|
|
|
|||
|
|
@ -73,10 +73,11 @@ exports.requireExt = function(display, callback)
|
|||
}
|
||||
|
||||
ext.QueryVersion(1, 1, function(err, vers) {
|
||||
|
||||
if (err)
|
||||
return callback(err);
|
||||
ext.major = vers[0];
|
||||
ext.minor = vers[1];
|
||||
callback(ext);
|
||||
callback(null, ext);
|
||||
});
|
||||
|
||||
ext.events = {
|
||||
|
|
|
|||
|
|
@ -78,13 +78,13 @@ exports.requireExt = function(display, callback)
|
|||
X.pack_stream.flush();
|
||||
}
|
||||
|
||||
callback(ext);
|
||||
callback(null, ext);
|
||||
|
||||
/*
|
||||
ext.QueryVersion(function(err, version) {
|
||||
ext.major = version[0];
|
||||
ext.minor = version[1];
|
||||
callback(ext);
|
||||
callback(null, ext);
|
||||
});
|
||||
*/
|
||||
});
|
||||
|
|
|
|||
|
|
@ -60,9 +60,11 @@ exports.requireExt = function(display, callback)
|
|||
}
|
||||
|
||||
ext.QueryVersion(1, 1, function(err, vers) {
|
||||
if (err)
|
||||
return callback(err);
|
||||
ext.major = vers[0];
|
||||
ext.minor = vers[1];
|
||||
callback(ext);
|
||||
callback(null, ext);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ exports.requireExt = function(display, callback)
|
|||
X.pack_stream.flush();
|
||||
}
|
||||
|
||||
callback(ext);
|
||||
callback(null, ext);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -592,7 +592,9 @@ module.exports.createClient = function(options, initCb)
|
|||
client.on('connect', function(display) {
|
||||
// opt-in BigReq
|
||||
if (!options.disableBigRequests) {
|
||||
client.require('big-requests', function(BigReq) {
|
||||
client.require('big-requests', function(err, BigReq) {
|
||||
if (err)
|
||||
return initCb(err)
|
||||
BigReq.Enable(function(err, maxLen) {
|
||||
display.max_request_length = maxLen;
|
||||
cbCalled = true;
|
||||
|
|
|
|||
|
|
@ -22,34 +22,35 @@ describe('ConfigureWindow', function() {
|
|||
});
|
||||
});
|
||||
|
||||
client.on('error', done);
|
||||
client.on('error', function (err) {
|
||||
console.error('Error : ', err);
|
||||
});
|
||||
});
|
||||
|
||||
it('should ResizeWindow correctly to 200x300 pixels', function(done) {
|
||||
var self = this;
|
||||
this.X.ResizeWindow(this.wid, 200, 300);
|
||||
this.X.once('event', function(ev) {
|
||||
ev.type.should.equal(22); /* ConfigureNotify */
|
||||
ev.height.should.equal(300);
|
||||
ev.width.should.equal(200);
|
||||
done();
|
||||
});
|
||||
this.X.ResizeWindow(this.wid, 200, 300);
|
||||
});
|
||||
|
||||
it('should MoveWindow correctly to x: 100, y: 150 pixels', function(done) {
|
||||
var self = this;
|
||||
this.X.MoveWindow(this.wid, 100, 150);
|
||||
this.X.once('event', function(ev) {
|
||||
ev.type.should.equal(22); /* ConfigureNotify */
|
||||
ev.x.should.equal(100);
|
||||
ev.y.should.equal(150);
|
||||
done();
|
||||
});
|
||||
this.X.MoveWindow(this.wid, 100, 150);
|
||||
});
|
||||
|
||||
it('should MoveResizeWindow correctly to x: 200, y: 250 and 500x100 pixels', function(done) {
|
||||
var self = this;
|
||||
this.X.MoveResizeWindow(this.wid, 200, 250, 500, 100);
|
||||
this.X.once('event', function(ev) {
|
||||
ev.type.should.equal(22); /* ConfigureNotify */
|
||||
ev.x.should.equal(200);
|
||||
|
|
@ -58,22 +59,23 @@ describe('ConfigureWindow', function() {
|
|||
ev.width.should.equal(500);
|
||||
done();
|
||||
});
|
||||
this.X.MoveResizeWindow(this.wid, 200, 250, 500, 100);
|
||||
});
|
||||
|
||||
it('should RaiseWindow correctly', function(done) {
|
||||
var self = this;
|
||||
this.X.RaiseWindow(this.wid);
|
||||
this.X.once('event', function(ev) {
|
||||
ev.type.should.equal(22); /* ConfigureNotify */
|
||||
ev.aboveSibling.should.equal(self.wid_helper);
|
||||
done();
|
||||
});
|
||||
this.X.RaiseWindow(this.wid);
|
||||
});
|
||||
|
||||
after(function(done) {
|
||||
this.X.DestroyWindow(this.wid);
|
||||
this.X.DestroyWindow(this.wid_helper);
|
||||
this.X.terminate();
|
||||
this.X.on('end', done);
|
||||
this.X.terminate();
|
||||
});
|
||||
});
|
||||
|
|
|
|||
11
test/dpms.js
11
test/dpms.js
|
|
@ -12,13 +12,10 @@ describe('DPMS extension', function() {
|
|||
if (!err) {
|
||||
display = dpy;
|
||||
X = display.client;
|
||||
X.require('dpms', function(ext) {
|
||||
if (util.isError(ext)) {
|
||||
done(ext);
|
||||
} else {
|
||||
dpms = ext;
|
||||
done();
|
||||
}
|
||||
X.require('dpms', function(err, ext) {
|
||||
should.not.exist(err);
|
||||
dpms = ext;
|
||||
done();
|
||||
});
|
||||
} else {
|
||||
done(err);
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ describe('RANDR extension', function() {
|
|||
self.X = dpy.client;
|
||||
self.screen = dpy.screen[0];
|
||||
self.root = self.screen.root;
|
||||
self.X.require('randr', function(ext) {
|
||||
util.isError(ext).should.equal(false);
|
||||
self.X.require('randr', function(err, ext) {
|
||||
err.should.equal(null);
|
||||
self.randr = ext;
|
||||
/* We HAVE to QueryVersion before using it. Otherwise it does not work as expected */
|
||||
self.randr.QueryVersion(1, 2, done);
|
||||
|
|
|
|||
|
|
@ -12,13 +12,10 @@ describe('XTEST extension', function() {
|
|||
if (!err) {
|
||||
display = dpy;
|
||||
X = display.client;
|
||||
X.require('xtest', function(ext) {
|
||||
if (util.isError(ext)) {
|
||||
done(ext);
|
||||
} else {
|
||||
xtest = ext;
|
||||
done();
|
||||
}
|
||||
X.require('xtest', function(err, ext) {
|
||||
should.not.exist(err);
|
||||
xtest = ext;
|
||||
done();
|
||||
});
|
||||
} else {
|
||||
done(err);
|
||||
|
|
|
|||
Loading…
Reference in a new issue