Mon 21 Jul 22:43:21 CEST 2025

This commit is contained in:
sbosse 2025-07-21 23:06:47 +02:00
parent 8f0c925753
commit 491446d1c3

View File

@ -0,0 +1,87 @@
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);
});