88 lines
3.3 KiB
JavaScript
88 lines
3.3 KiB
JavaScript
var x11 = require('../lib');
|
|
var wid = process.argv[2];
|
|
console.log(wid);
|
|
|
|
x11.createClient(function(err, display) {
|
|
var X = display.client;
|
|
var root = display.screen[0].root;
|
|
|
|
var id = wid ? wid : root;
|
|
var gc = X.AllocID();
|
|
X.CreateGC(gc, id);
|
|
var width = 0;
|
|
var hwight = 0;
|
|
X.GetGeometry(id, function(err, clientGeom) {
|
|
width = clientGeom.width;
|
|
height = clientGeom.height;
|
|
|
|
|
|
var dispwin = X.AllocID();
|
|
X.CreateWindow(dispwin, root, 0, 0, width, height, 0, 0, 0, 0, { eventMask: x11.eventMask.Exposure });
|
|
X.MapWindow(dispwin);
|
|
//X.CopyArea(idScreenshot, dispwin, gc, 0, 0, 0, 0, width, height);
|
|
|
|
|
|
//var idScreenshot = X.AllocID();
|
|
//X.CreatePixmap(idScreenshot, root, 24, clientGeom.width, clientGeom.height);
|
|
// ask recursively each window to copy itself to pixmap
|
|
|
|
function drawWithKids(list, cb)
|
|
{
|
|
if (list.length == 0)
|
|
return cb();
|
|
var p = list.pop();
|
|
var win = p.win;
|
|
if (win == dispwin)
|
|
return drawWithKids(list, cb);
|
|
|
|
X.GetWindowAttributes(win, function(err, res) {
|
|
if (res[8] == 0)
|
|
return drawWithKids(list, cb);
|
|
X.GetGeometry(win, function(err, geom) {
|
|
// (srcDrawable, dstDrawable, gc, srcX, srcY, dstX, dstY, width, height)
|
|
if (win != root)
|
|
X.CopyArea(win, dispwin, gc, 0, 0, p.x + geom.xPos, p.y + geom.yPos, geom.width, geom.height);
|
|
//X.CopyArea(win, idScreenshot, gc, 0, 0, p.x + geom.xPos, p.y + geom.yPos, geom.width, geom.height);
|
|
X.QueryTree(win, function(tree) {
|
|
tree.children.reverse().forEach(function(subwin) {
|
|
list.push({win: subwin, x: p.x + geom.xPos, y: p.y + geom.yPos});
|
|
});
|
|
drawWithKids(list, cb);
|
|
});
|
|
});
|
|
});
|
|
};
|
|
|
|
/*
|
|
//setInterval(function() {
|
|
var list = [{win: id, x: 0, y: 0}];
|
|
drawWithKids(list, function() {
|
|
// (format, drawable, x, y, width, height, planeMask)
|
|
//X.GetImage(2, dispwin, 0, 0, width, height, 0xffffffff, function(data) {
|
|
//X.GetImage(2, root, 0, 0, width, height, 0xffffffff, function(data) {
|
|
// console.log(data);
|
|
//});
|
|
console.log('DONE! ready');
|
|
X.terminate();
|
|
//var dispwin = X.AllocID();
|
|
//X.CreateWindow(dispwin, root, 0, 0, width, height, 1, 1, 0, { eventMask: x11.eventMask.Exposure });
|
|
//X.MapWindow(dispwin);
|
|
//X.CopyArea(idScreenshot, dispwin, gc, 0, 0, 0, 0, width, height);
|
|
|
|
});
|
|
*/
|
|
X.GetImage(2, id, 0, 0, width, height, 0xffffffff, function(err, image) {
|
|
if (err) {
|
|
console.log(err);
|
|
process.exit(1);
|
|
}
|
|
console.log(image);
|
|
// format, drawable, gc, width, height, dstX, dstY, leftPad, depth, data
|
|
X.PutImage(2, dispwin, gc, width, height, 0, 0, 0, 24, image.data);
|
|
});
|
|
//}, 1000);
|
|
});
|
|
}).on('error', function(err) {
|
|
console.log(err);
|
|
});
|