mirror of
https://github.com/danbulant/node-x11
synced 2026-06-15 20:51:30 +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('..');
|
||||
// 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];
|
||||
|
|
|
|||
Loading…
Reference in a new issue