Mon 21 Jul 22:43:21 CEST 2025
This commit is contained in:
parent
fc5a28f116
commit
7a367b2832
80
js/x11/examples/png/test1.js
Normal file
80
js/x11/examples/png/test1.js
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
//var logo = require('./node-png').readPng('./node-logo.png');
|
||||||
|
var fs = require('fs');
|
||||||
|
var Decoder = require('./png-decoder');
|
||||||
|
var decoder = new Decoder();
|
||||||
|
|
||||||
|
var logo = {
|
||||||
|
data : Buffer.from(decoder.parse(fs.readFileSync('./screen.png'))),
|
||||||
|
width : decoder._IHDR.width,
|
||||||
|
height : decoder._IHDR.height
|
||||||
|
};
|
||||||
|
|
||||||
|
var x11 = require('../../lib');
|
||||||
|
|
||||||
|
var Exposure = x11.eventMask.Exposure;
|
||||||
|
|
||||||
|
x11.createClient(function(err, display)
|
||||||
|
{
|
||||||
|
var X = display.client;
|
||||||
|
X.require('render', function(err, Render) {
|
||||||
|
var root = display.screen[0].root;
|
||||||
|
main(root, X, Render, display);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
function main(root, X, Render, display) {
|
||||||
|
|
||||||
|
var win, picWin, pic, gc;
|
||||||
|
|
||||||
|
win = X.AllocID();
|
||||||
|
X.CreateWindow(
|
||||||
|
win, root,
|
||||||
|
0, 0, logo.width, logo.height,
|
||||||
|
0, 0, 0, 0,
|
||||||
|
{ eventMask: Exposure }
|
||||||
|
);
|
||||||
|
X.MapWindow(win);
|
||||||
|
|
||||||
|
gc = X.AllocID();
|
||||||
|
X.CreateGC(gc, win);
|
||||||
|
|
||||||
|
var logoPixmap = X.AllocID();
|
||||||
|
X.CreatePixmap(logoPixmap, win, 24, logo.width, logo.height);
|
||||||
|
|
||||||
|
var rscreen = display.screen[0];
|
||||||
|
var screen =
|
||||||
|
rscreen.depths[rscreen.root_depth][
|
||||||
|
Object.keys(rscreen.depths[rscreen.root_depth])[0]];
|
||||||
|
|
||||||
|
var rmask = parseInt(screen.red_mask, 10);
|
||||||
|
var gmask = parseInt(screen.green_mask, 10);
|
||||||
|
var bmask = parseInt(screen.blue_mask, 10);
|
||||||
|
|
||||||
|
for (var y = 0; y < logo.height; y++) {
|
||||||
|
for (var x = 0; x < logo.width; x++) {
|
||||||
|
var pixel = Buffer.from([
|
||||||
|
logo.data[(x + logo.width * y) * 4],
|
||||||
|
logo.data[(x + logo.width * y) * 4 + 1],
|
||||||
|
logo.data[(x + logo.width * y) * 4 + 2], 0]).readInt32LE();
|
||||||
|
|
||||||
|
logo.data[(x + logo.width * y) * 4 ] = (pixel & rmask) >> 16;
|
||||||
|
logo.data[(x + logo.width * y) * 4 + 1] = (pixel & gmask) >> 8;
|
||||||
|
logo.data[(x + logo.width * y) * 4 + 2] = (pixel & bmask) >> 0;
|
||||||
|
logo.data[(x + logo.width * y) * 4 + 3] = 0x00;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
X.PutImage(2, logoPixmap, gc, logo.width, logo.height, 0, 0, 0, 24, logo.data);
|
||||||
|
|
||||||
|
var logoPicture = X.AllocID();
|
||||||
|
Render.CreatePicture(logoPicture, logoPixmap, Render.rgb24);
|
||||||
|
var winPicture = X.AllocID();
|
||||||
|
Render.CreatePicture(winPicture, win, Render.rgb24);
|
||||||
|
|
||||||
|
X.on('event', function(ev) {
|
||||||
|
if (ev.name == 'Expose') {
|
||||||
|
Render.Composite(3, logoPicture, 0, winPicture, 0, 0, 0, 0, 0, 0, logo.width, logo.height);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user