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);
 | |
| });
 |