mirror of
https://github.com/danbulant/node-x11
synced 2026-06-24 17:21:47 +00:00
Merge pull request #58 from santigimeno/xfixes_requests
Add some REGION-related XFIXES requests
This commit is contained in:
commit
140d92c339
1 changed files with 73 additions and 0 deletions
|
|
@ -3,6 +3,19 @@
|
||||||
var x11 = require('..');
|
var x11 = require('..');
|
||||||
// TODO: move to templates
|
// TODO: move to templates
|
||||||
|
|
||||||
|
function parse_rectangle(buf, pos) {
|
||||||
|
if (!pos) {
|
||||||
|
pos = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
x : buf[pos],
|
||||||
|
y : buf[pos + 1],
|
||||||
|
width : buf[pos + 2],
|
||||||
|
height : buf[pos + 3]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
exports.requireExt = function(display, callback)
|
exports.requireExt = function(display, callback)
|
||||||
{
|
{
|
||||||
var X = display.client;
|
var X = display.client;
|
||||||
|
|
@ -35,6 +48,66 @@ exports.requireExt = function(display, callback)
|
||||||
X.pack_stream.flush();
|
X.pack_stream.flush();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ext.CreateRegion = function(region, rects) {
|
||||||
|
X.seq_num ++;
|
||||||
|
var format = 'CCSL';
|
||||||
|
format += Array(rects.length + 1).join('ssSS');
|
||||||
|
var args = [ ext.majorOpcode, 5, 2 + (rects.length << 1), region ];
|
||||||
|
rects.forEach(function(rect) {
|
||||||
|
args.push(rect.x);
|
||||||
|
args.push(rect.y);
|
||||||
|
args.push(rect.width);
|
||||||
|
args.push(rect.height);
|
||||||
|
});
|
||||||
|
|
||||||
|
X.pack_stream.pack(format, args);
|
||||||
|
X.pack_stream.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
ext.DestroyRegion = function(region) {
|
||||||
|
X.seq_num ++;
|
||||||
|
X.pack_stream.pack('CCSL', [ ext.majorOpcode, 10, 2, region ]);
|
||||||
|
X.pack_stream.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
ext.UnionRegion = function(src1, src2, dst) {
|
||||||
|
X.seq_num ++;
|
||||||
|
X.pack_stream.pack('CCSLLL', [ ext.majorOpcode, 13, 4, src1, src2, dst ]);
|
||||||
|
X.pack_stream.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
ext.TranslateRegion = function(region, dx, dy) {
|
||||||
|
X.seq_num ++;
|
||||||
|
X.pack_stream.pack('CCSLss', [ ext.majorOpcode, 17, 3, region, dx, dy ]);
|
||||||
|
X.pack_stream.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
ext.FetchRegion = function(region, cb) {
|
||||||
|
X.seq_num ++;
|
||||||
|
X.pack_stream.pack('CCSL', [ ext.majorOpcode, 19, 2, region ]);
|
||||||
|
X.replies[X.seq_num] = [
|
||||||
|
function(buf, opt) {
|
||||||
|
var n_rectangles = (buf.length - 24) >> 3;
|
||||||
|
var format = 'ssSSxxxxxxxxxxxxxxxx';
|
||||||
|
format += Array(n_rectangles + 1).join('ssSS');
|
||||||
|
var res = buf.unpack(format);
|
||||||
|
var reg = {
|
||||||
|
extents : parse_rectangle(res),
|
||||||
|
rectangles : []
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var i = 0; i < n_rectangles; ++ i) {
|
||||||
|
reg.rectangles.push(parse_rectangle(res, 4 + (i << 2)));
|
||||||
|
}
|
||||||
|
|
||||||
|
return reg;
|
||||||
|
},
|
||||||
|
cb
|
||||||
|
];
|
||||||
|
|
||||||
|
X.pack_stream.flush();
|
||||||
|
}
|
||||||
|
|
||||||
ext.QueryVersion(5, 0, function(err, vers) {
|
ext.QueryVersion(5, 0, function(err, vers) {
|
||||||
ext.major = vers[0];
|
ext.major = vers[0];
|
||||||
ext.minor = vers[1];
|
ext.minor = vers[1];
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue