Merge pull request #58 from santigimeno/xfixes_requests

Add some REGION-related XFIXES requests
This commit is contained in:
Andrey Sidorov 2014-03-20 10:38:21 +11:00
commit 140d92c339

View file

@ -3,6 +3,19 @@
var x11 = require('..');
// 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)
{
var X = display.client;
@ -35,6 +48,66 @@ exports.requireExt = function(display, callback)
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.major = vers[0];
ext.minor = vers[1];