diff --git a/examples/asteroids/asteroids.js b/examples/asteroids/asteroids.js
deleted file mode 100644
index 0c7b36e..0000000
--- a/examples/asteroids/asteroids.js
+++ /dev/null
@@ -1,103 +0,0 @@
-var x11 = require('../../lib/x11');
-var watchMobile = require('./staticserver');
-var PointerMotion = x11.eventMask.PointerMotion;
-
-var X, Render;
-var rocketX = 400;
-var rocketY = 300;
-var speedX = 0;
-var speedY = 0;
-var angle = 0;
-var acc = 0;
-
-
-var xclient = x11.createClient(function(display) {
- X = display.client;
- var root = display.screen[0].root;
- X.require('render', function(rendExt) {
-
-
- Render = rendExt;
- var wid = X.AllocID();
-
- var white = display.screen[0].white_pixel;
- var black = display.screen[0].black_pixel;
- X.CreateWindow(wid, root, 10, 10, 900, 600, 1, 1, 0, { backgroundPixel: white, eventMask: PointerMotion });
- X.MapWindow(wid);
-
- var gc = X.AllocID();
- X.CreateGC(gc, wid, { foreground: white, background: black } );
-
- var pict = X.AllocID();
- Render.CreatePicture(pict, wid, Render.rgb24);
- var pictGrad = X.AllocID();
- Render.RadialGradient(pictGrad, [50,56], [50,50], 0, 50,
- [
- [0, [0,0,0xffff,0xffff ] ],
- [0.95, [0,0,0,0x00ff00 ] ],
- [0.997, [0xffff, 0xf, 0, 0x1] ],
- [1, [0xffff, 0xffff, 0, 0x0] ]
- ]);
-
- var solid = Render.SolidFill
- var dark_grad = X.AllocID();
- Render.LinearGradient(dark_grad, [0,0], [1000,100],
- [
- [0, [0,0,0,0x0 ] ],
- [0.1, [0xfff, 0, 0xffff, 0] ] ,
- [0.25, [0xfff, 0, 0xfff, 0] ] ,
- [0.5, [0xfff, 0, 0xffff, 0] ] ,
- [1, [0xfff, 0xffff, 0, 0] ]
- ]);
-
- function draw(x, y) {
-
- X.PolyFillRectangle(wid, gc, [0, 0, 1000, 1000]);
- Render.Composite(3, pictGrad, 0, pict, 0, 0, 0, 0, rocketX - 50, rocketY - 50, 100, 100);
- // draw directed triangle
-
- //
- //
- //
- var pts = [
- rocketX + Math.cos(angle)*50, rocketY + Math.sin(angle)*50,
- rocketX + Math.cos(angle + 1)*50, rocketY + Math.sin(angle+1)*50,
- rocketX + Math.cos(angle + 2)*50, rocketY + Math.sin(angle+2)*50,
-
- ];
- //Render.Triangles(3, dark_grad, 0, 0, dark_grad, 0, pts);
- X.PolyLine(0, wid, gc, pts);
- }
-
- X.on('event', function(ev) {
- //draw(ev.x, ev.y);
- });
-
- watchMobile(function(x, y, z) {
- //console.log([x, y, z]);
- //console.log(x);
- angle = 2*Math.PI*(y/360);
- acc = 90 - z;
- draw();
- });
-
-function updateScene()
-{
- rocketX += speedX;
- rocketY += speedY;
- speedX += Math.cos(angle + 1)*acc/500;
- speedY += Math.sin(angle + 1)*acc/500;
- console.log(acc);
- if (rocketX+100 > 900)
- speedX = -speedX;
- if (rocketX-100 < 0)
- speedX = -speedX;
- if (rocketY+100 > 600)
- speedY = -speedY;
- if (rocketY-100 < 0)
- speedY = -speedY;
-}
- setInterval(updateScene, 50);
- });
-});
-
diff --git a/examples/asteroids/orientation b/examples/asteroids/orientation
deleted file mode 160000
index aa529ee..0000000
--- a/examples/asteroids/orientation
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit aa529ee711d3c0704c9721710f164acedc5b2fc7
diff --git a/examples/asteroids/orientation.html b/examples/asteroids/orientation.html
deleted file mode 100644
index 789bad0..0000000
--- a/examples/asteroids/orientation.html
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/asteroids/staticserver.js b/examples/asteroids/staticserver.js
deleted file mode 100644
index bafe401..0000000
--- a/examples/asteroids/staticserver.js
+++ /dev/null
@@ -1,45 +0,0 @@
-var http = require("http"),
- url = require("url"),
- path = require("path"),
- fs = require("fs")
- port = process.argv[2] || 8888;
-
-module.exports = function(cb)
-{
-console.log('here');
-http.createServer(function(request, response) {
-
- var uri = url.parse(request.url).pathname
- , filename = path.join(process.cwd(), uri);
-
- path.exists(filename, function(exists) {
- if(!exists) {
- var params = filename.split('_');
- console.log(params);
- if (params.length == 4)
- cb(params[1], params[2], params[3]);
- response.writeHead(404, {"Content-Type": "text/plain"});
- response.write("404 Not Found\n");
- response.end();
- return;
- }
-
- if (fs.statSync(filename).isDirectory()) filename += '/index.html';
-
- fs.readFile(filename, "binary", function(err, file) {
- if(err) {
- response.writeHead(500, {"Content-Type": "text/plain"});
- response.write(err + "\n");
- response.end();
- return;
- }
-
- response.writeHead(200);
- response.write(file, "binary");
- response.end();
- });
- });
-}).listen(parseInt(port, 10));
-
-console.log("Static file server running at\n => http://localhost:" + port + "/\nCTRL + C to shutdown");
-}
diff --git a/examples/render.js b/examples/render.js
deleted file mode 100644
index c25ac7a..0000000
--- a/examples/render.js
+++ /dev/null
@@ -1,482 +0,0 @@
-// this will be eventually moved to lib/node-x11/extensions
-
-var x11 = require('../lib/x11');
-
-// adding XRender functions manually from
-// http://cgit.freedesktop.org/xcb/proto/tree/src/render.xml?id=HEAD
-// and http://www.x.org/releases/X11R7.6/doc/renderproto/renderproto.txt
-// TODO: move to templates
-x11.createClient(
- function(display) {
- var X = display.client;
- X.QueryExtension('RENDER', function(ext) {
-
- console.log(ext);
-
- function RenderQueryVersion(clientMaj, clientMin, callback)
- {
- X.seq_num++;
- X.pack_stream.pack('CCSLL', [ext.majorOpcode, 0, 3, clientMaj, clientMin]);
- X.replies[X.seq_num] = [
- function(buf, opt) {
- var res = buf.unpack('LL');
- return res;
- },
- callback
- ];
- X.pack_stream.flush();
- }
-
- function RenderQueryPictFormat(callback)
- {
- X.seq_num++;
- X.pack_stream.pack('CCS', [ext.majorOpcode, 1, 1]);
- X.replies[X.seq_num] = [
- function (buf, opt) {
- var res = {};
- var res1 = buf.unpack('LLLLL');
- var num_formats = res1[0];
- var num_screens = res1[1];
- var num_depths = res1[2];
- var num_visuals = res1[3];
- var num_subpixel = res1[4];
- // formats list:
- var offset = 24;
- res.formats = [];
- for (var i=0; i < num_formats; ++i)
- {
- var format = {};
- var f = buf.unpack('LCCxxSSSSSSSSL', offset);
- res.formats.push(f);
- offset += 28;
- }
- return res;
- },
- callback
- ];
- X.pack_stream.flush();
- }
-
- function RenderQueryFilters(callback)
- {
- X.seq_num++;
- X.pack_stream.pack('CCSL', [ext.majorOpcode, 29, 2, display.screen[0].root]);
- X.replies[X.seq_num] = [
- function(buf, opt) {
- var h = buf.unpack('LL');
- var num_aliases = h[0];
- var num_filters = h[1];
- var aliases = [];
- var offset = 24; // LL + 16 bytes pad
- for (var i=0; i < num_aliases; ++i)
- {
- aliases.push(buf.unpack('S', offset)[0]);
- offset+=2;
- }
- var filters = [];
- for (var i=0; i < num_filters; ++i)
- {
- var len = buf.unpack('C', offset)[0];
- //if (!len) break;
- offset++;
- filters.push(buf.toString('ascii', offset, offset+len));
- offset+=len;
- }
- return [aliases, filters];
- },
- callback
- ];
- X.pack_stream.flush();
- }
-
- var valueList = [
- ['repeat', 'C'],
- ['alphaMap', 'L'],
- ['alphaXOrigin', 's'],
- ['alphaYOrigin', 's'],
- ['clipXOrigin', 's'],
- ['clipYOrigin', 's'],
- ['clipMask', 'L'],
- ['graphicsExposures', 'C'],
- ['subwindowMode', 'C'],
- ['polyEdge', 'C'],
- ['polyMode', 'C'],
- ['dither', 'L'],
- ['componentAlpha', 'C']
- ];
-
- var argumentLength = {
- C: 1,
- S: 2,
- s: 2,
- L: 4,
- x: 1
- };
-
- function RenderCreatePicture(pid, drawable, pictformat, values)
- {
- X.seq_num++;
- var mask = 0;
- var reqLen = 5; // + (values + pad)/4
- var format = 'CCSLLLL';
- var params = [ext.majorOpcode, 4, reqLen, pid, drawable, pictformat, mask];
-
- if (values)
- {
- var valuesLength = 0;
- for (var i=0; i < valueList.length; ++i)
- {
- var val = values[valueList[i][0]];
- if (val) {
- mask |= (1 << i);
- params.push(val);
- var valueFormat = valueList[i][1];
- format += valueFormat;
- valuesLength += argumentLength[valueFormat];
- }
- }
- var pad4 = (valuesLength + 3) >> 2;
- var toPad = (pad4 << 2) - valuesLength;
- for (var i=0; i < toPad; ++i)
- format += 'x';
- reqLen += pad4;
- params[2] = reqLen;
- params[6] = mask;
- }
- X.pack_stream.pack(format, params);
- X.pack_stream.flush();
- }
-
- function floatToFix(f)
- {
- return parseInt(f*65536);
- }
-
- // see example of blur filter here: https://github.com/richoH/rxvt-unicode/blob/master/src/background.C
- // TODO: not ready yet.
- function RenderSetPictureFilter(pid, name, filterParams)
- {
- X.seq_num++;
- var reqLen = 2; //header + params + 1xStopfix+2xColors
- var format = 'CCSLa';
- var params = [ext.majorOpcode, 30, reqLen, pid];
- /*
- if (name == 'convolution')
- {
- reqLen += 2;
- format += 'L';
- params.push(floatToFix(filterParams));
- } else {
- throw 'Not implemented filter ' + name;
- }
- */
- params[2] = reqLen;
- //console.log([format, params]);
- X.pack_stream.pack(format, params);
- X.pack_stream.flush();
- }
-
- function RenderRadialGradient(pid, p1, p2, r1, r2, stops)
- {
- // TODO: merge with linear gradient
- X.seq_num++;
- var reqLen = 9+stops.length*3; //header + params + 1xStopfix+2xColors
- var format = 'CCSLLLLLLLL';
- var params = [ext.majorOpcode, 35, reqLen, pid];
- params.push(floatToFix(p1[0])); // L
- params.push(floatToFix(p1[1]));
- params.push(floatToFix(p2[0]));
- params.push(floatToFix(p2[1])); // L
- params.push(floatToFix(r1)); // L
- params.push(floatToFix(r2)); // L
- params.push(stops.length);
-
- // [ [float stopDist, [float r, g, b, a] ], ...]
- // stop distances
- for (var i=0; i < stops.length; ++i)
- {
- format += 'L';
- // TODO: we know total params length in advance. ? params[index] =
- params.push(floatToFix(stops[i][0]))
- }
- // colors
- for (var i=0; i < stops.length; ++i)
- {
- format += 'SSSS';
- for (var j=0; j < 4; ++j)
- params.push(stops[i][1][j]);
- }
- //console.log([format, params]);
- X.pack_stream.pack(format, params);
- X.pack_stream.flush();
- }
-
- function RenderLinearGradient(pid, p1, p2, stops)
- {
- X.seq_num++;
- var reqLen = 7+stops.length*3; //header + params + 1xStopfix+2xColors
- var format = 'CCSLLLLLL';
- var params = [ext.majorOpcode, 34, reqLen, pid];
- params.push(floatToFix(p1[0])); // L
- params.push(floatToFix(p1[1]));
- params.push(floatToFix(p2[0]));
- params.push(floatToFix(p2[1])); // L
-
- params.push(stops.length);
-
- // [ [float stopDist, [float r, g, b, a] ], ...]
- // stop distances
- for (var i=0; i < stops.length; ++i)
- {
- format += 'L';
- // TODO: we know total params length in advance. ? params[index] =
- params.push(floatToFix(stops[i][0]))
- }
- // colors
- for (var i=0; i < stops.length; ++i)
- {
- format += 'SSSS';
- for (var j=0; j < 4; ++j)
- params.push(stops[i][1][j]);
- }
- //console.log([format, params]);
- X.pack_stream.pack(format, params);
- X.pack_stream.flush();
- }
-
- function RenderConicalGradient(pid, center, angle, stops)
- {
- X.seq_num++;
- var reqLen = 6+stops.length*3; //header + params + 1xStopfix+2xColors
- var format = 'CCSLLLLL';
- var params = [ext.majorOpcode, 36, reqLen, pid];
- params.push(floatToFix(center[0])); // L
- params.push(floatToFix(center[1]));
- params.push(floatToFix(angle)); // L
-
- params.push(stops.length);
-
- // [ [float stopDist, [float r, g, b, a] ], ...]
- // stop distances
- for (var i=0; i < stops.length; ++i)
- {
- format += 'L';
- // TODO: we know total params length in advance. ? params[index] =
- params.push(floatToFix(stops[i][0]))
- }
- // colors
- for (var i=0; i < stops.length; ++i)
- {
- format += 'SSSS';
- for (var j=0; j < 4; ++j)
- params.push(stops[i][1][j]);
- }
- //console.log([format, params]);
- X.pack_stream.pack(format, params);
- X.pack_stream.flush();
- }
-
- function RenderFillRectangles(op, pid, color, rects)
- {
- X.seq_num++;
- var reqLen = 5+rects.length/2;
- var format = 'CCSCxxxLSSSS';
- var params = [ext.majorOpcode, 26, reqLen, op, pid];
- for (var j=0; j < 4; ++j)
- params.push(color[j]);
- for (var i=0; i < rects.length; i+=4)
- {
- format += 'ssSS';
- params.push(rects[i*4]);
- params.push(rects[i*4 + 1]);
- params.push(rects[i*4 + 2]);
- params.push(rects[i*4 + 3]);
- }
- //console.log([format, params]);
- X.pack_stream.pack(format, params);
- X.pack_stream.flush();
- }
-
- function RenderComposite(op, src, mask, dst, srcX, srcY, maskX, maskY, dstX, dstY, width, height)
- {
- X.seq_num++;
- X.pack_stream.pack(
- 'CCSCxxxLLLssssssSS',
- [ext.majorOpcode, 8, 9, op, src, mask, dst, srcX, srcY, maskX, maskY, dstX, dstY, width, height]
- )
- .flush();
- //console.log([ 'CCSCxxxLLLssssssSS',
- // [ext.majorOpcode, 8, 9, op, src, mask, dst, srcX, srcY, maskX, maskY, dstX, dstY, width, height]]);
- }
-
- function RenderTrapezoids(op, src, srcX, srcY, dst, maskFormat, trapz)
- {
- X.seq_num++;
- var format = 'CCSCxxxLLLss';
- var params = [ext.majorOpcode, 10, 6+trapz.length, op, src, dst, maskFormat, srcX, srcY];
- for (var i=0; i < trapz.length; i+=10)
- {
- format += 'llllllllll';
- for (var j=0; j < 10; ++j)
- params.push(floatToFix(trapz[i*10 + j]));
- }
- //console.log([format, params]);
- X.pack_stream.pack(format, params);
- X.pack_stream.flush();
- }
-
- function RenderTriangles(op, src, srcX, srcY, dst, maskFormat, tris)
- {
- X.seq_num++;
- var format = 'CCSCxxxLLLss';
- var params = [ext.majorOpcode, 11, 6+tris.length, op, src, dst, maskFormat, srcX, srcY];
- for (var i=0; i < tris.length; i+=6)
- {
- format += 'llllll';
- //TODO: Array.copy
- params.push(floatToFix(tris[i*6 + 0])); // x1
- params.push(floatToFix(tris[i*6 + 1])); // y1
- params.push(floatToFix(tris[i*6 + 2])); // x2
- params.push(floatToFix(tris[i*6 + 3])); // y2
- params.push(floatToFix(tris[i*6 + 4])); // x3
- params.push(floatToFix(tris[i*6 + 5])); // y3
- }
- X.pack_stream.pack(format, params);
- X.pack_stream.flush();
- }
-
- var root = display.screen[0].root;
- var win = X.AllocID();
- var white = display.screen[0].white_pixel;
- var black = display.screen[0].black_pixel;
- X.CreateWindow(win, root, 0, 0, 500, 500, 4, 1, 0,
- {
- backgroundPixel: white,
- eventMask: x11.eventMask.Exposure | x11.eventMask.ButtonPress | x11.eventMask.PointerMotion
- });
- X.MapWindow(win);
-
- RenderQueryPictFormat(function(formats) {
- var mono1, rgb24, rgba32;
- for (var i=0; i < formats.formats.length; ++i) {
- var f = formats.formats[i];
- if (f[2] == 1 && f[10] == 1)
- mono1 = f[0] ;
- if (f[2] == 24 && f[3] == 16 && f[5] == 8 && f[7] == 0)
- rgb24 = f[0];
- if (f[2] == 32 && f[3] == 16 && f[5] == 8 && f[7] == 0 && f[9] == 24)
- rgba32 = f[0] ;
- }
-
- var picture = X.AllocID();
- RenderCreatePicture(picture, win, rgb24, { polyEdge: 1, polyMode: 0 } );
- var pixmap = X.AllocID();
- X.CreatePixmap(pixmap, win, 32, 500, 500);
- var pix_pict = X.AllocID();
- RenderCreatePicture(pix_pict, pixmap, rgba32, { polyEdge: 1, polyMode: 0 });
-
- var pic_grad = X.AllocID();
- RenderLinearGradient(pic_grad, [0,0], [1000,100],
- //RenderRadialGradient(pic_grad, [0,0], [1000,100], 10, 1000,
- //RenderConicalGradient(pic_grad, [250,250], 360,
- [
- [0, [0,0,0,0x3000 ] ],
- [0.1, [0xfff, 0, 0xffff, 0x1000] ] ,
- [0.25, [0xffff, 0, 0xfff, 0x3000] ] ,
- [0.5, [0xffff, 0, 0xffff, 0x4000] ] ,
- [1, [0xffff, 0xffff, 0, 0x8000] ]
- ]);
-
- var pic_grad1 = X.AllocID();
-
- RenderConicalGradient(pic_grad1, [250,250], 10,
- [
- [0, [0,0,0,0x5000 ] ],
- [0.1, [0xfff, 0, 0xffff, 0x3000] ] ,
- [0.25, [0xffff, 0, 0xfff, 0x2000] ] ,
- [0.5, [0xffff, 0, 0xffff, 0x1000] ] ,
- [1, [0xffff, 0xffff, 0, 0x8000] ]
- ]);
-
- var pic_grad2 = X.AllocID();
- RenderRadialGradient(pic_grad2, [250,250], [250,250], 0, 250,
- [
- [0, [0,0,0,0x5000 ] ],
- [0.99, [0xffff, 0xffff, 0, 0xffff] ],
- [1, [0xffff, 0xffff, 0, 0x0] ]
- ]);
-
- var pixmap1 = X.AllocID();
- X.CreatePixmap(pixmap1, win, 32, 500, 500);
- var pix_pict1 = X.AllocID();
- RenderCreatePicture(pix_pict1, pixmap1, rgba32, { polyEdge: 1, polyMode: 0 });
- RenderComposite(3, pic_grad2, 0, pix_pict1, 0, 0, 0, 0, 0, 0, 500, 500);
-
- var pixmap2 = X.AllocID();
- X.CreatePixmap(pixmap2, win, 32, 500, 500);
- var pix_pict2 = X.AllocID();
- RenderCreatePicture(pix_pict2, pixmap2, rgba32, { polyEdge: 1, polyMode: 0 });
- for(var i=0; i < 100; ++i)
- {
- var pts = [];
- for (var coord = 0; coord < 6; coord++)
- pts.push(Math.random()*500);
- RenderTriangles(3, pic_grad, Math.random()*600, Math.random()*500, pix_pict2, 0, pts);
- }
-
- function update()
- {
- RenderFillRectangles(1, pix_pict, [0xffff, 0xffff, 0xffff, 0xffff], [0, 0, 500, 500]);
- RenderComposite(3, pix_pict2, 0, pix_pict, 0, 0, 0, 0, X.x1, X.y1, 500, 500);
- //RenderComposite(3, pic_grad, 0, pix_pict, 0, 0, 0, 0, 0, 0, 500, 500);
- RenderComposite(3, pix_pict1, 0, pix_pict, 0, 0, 0, 0, X.x2, X.y2, 500, 500);
- }
-
- function draw()
- {
- RenderComposite(3, pix_pict, 0, picture, 0, 0, 0, 0, 0, 0, 500, 500);
- }
-
- X.x1 = X.y1 = X.x2 = X.y2 = 0;
- update();
- draw();
-
- X.on('event', function(ev) {
- if (ev.type == 4)
- {
- if (ev.keycode == 4)
- X.x1 += 10;
- else
- X.x1 -= 10;
- update();
- draw();
- } else if (ev.type == 6) // mouse move
- {
- X.x2 = ev.x - 250;
- X.y2 = ev.y - 250;
- update();
- draw();
- } else {
- draw();
- }
-
- //RenderFillRectangles(1, picture, [0xffff, 0xffff, 0xffff, 0xffff], [0, 0, 500, 500]);
- //RenderFillRectangles(1, picture, [0xffff, 0xffff, 0x0000, 0xffff], [10, 10, 50, 50]);
-
- //RenderTriangles(3, pic_grad, 0, 0, picture, 0, [0, 0, 500, 0, 0, 500]);
- //RenderTriangles(3, pic_grad, 0, 0, picture, 0, [0, 500, 500, 500, 500, 0]);
- //RenderTrapezoids(3, pic_grad, 0, 0, picture, 0, [100, 500, 240, 0, 0, 500, 500, 500, 260, 0]);
- //RenderTrapezoids(3, pic_grad, 0, 0, picture, 0, [0, 500, 0, 0, 0, 500, 500, 500, 500, 0]);
- //RenderSetPictureFilter(pix_pict, 'convolution', [3, 3, 0, 0, 0, 0, 9, 0, 0, 0, 0]);
- //RenderComposite(3, pix_pict, 0, picture, 0, 0, 0, 0, 0, 0, 500, 500);
- //RenderComposite(3, pic_grad, 0, picture, 0, 0, 0, 0, 0, 0, 500, 500);
- });
- });
-
-
- }); // <- everything above is a body of callback to QueryPictFormats
- }
-
-).on('error', function(err) {
- console.log(['error! : ', err]);
-});
diff --git a/examples/simple/alloccolor.js b/examples/simple/alloccolor.js
new file mode 100644
index 0000000..d11e33d
--- /dev/null
+++ b/examples/simple/alloccolor.js
@@ -0,0 +1,34 @@
+var x11 = require('../lib/x11');
+
+var Exposure = x11.eventMask.Exposure;
+
+x11.createClient(function(display) {
+ var repaint;
+ var X = display.client;
+ var root = display.screen[0].root;
+ var white = display.screen[0].white_pixel;
+ var black = display.screen[0].black_pixel;
+
+ var wid = X.AllocID();
+ X.CreateWindow(
+ wid, root,
+ 10, 10, 400, 300
+ );
+ X.MapWindow(wid);
+
+ // parameters: colormap, red, green, blue
+ X.AllocColor(display.screen[0].default_colormap, 0xffff, 0xffff, 0, function(err, color) {
+ var gc = X.AllocID();
+ X.CreateGC(gc, wid, { foreground: color.pixel, background: black } );
+ repaint = setInterval(function() {
+ X.PolyFillRectangle(wid, gc, [100, 100, 200, 100]);
+ }, 1000);
+ });
+ X.on('error', function(e) {
+ console.log(e);
+ });
+ X.on('end', function() {
+ console.log('client destroyed');
+ clearInterval(repaint);
+ });
+});
diff --git a/examples/simple/createwindow.js b/examples/simple/createwindow.js
new file mode 100644
index 0000000..907b573
--- /dev/null
+++ b/examples/simple/createwindow.js
@@ -0,0 +1,7 @@
+var x11 = require('../../lib/x11');
+x11.createClient(function(display) {
+ var X = display.client;
+ var wid = X.AllocID();
+ X.CreateWindow(wid, display.screen[0].root, 100, 100, 400, 300);
+ X.MapWindow(wid);
+});
diff --git a/examples/simple/events.js b/examples/simple/events.js
new file mode 100644
index 0000000..09be199
--- /dev/null
+++ b/examples/simple/events.js
@@ -0,0 +1,13 @@
+var x11 = require('../../lib/x11');
+x11.createClient(function(display) {
+ var X = display.client;
+ var wid = X.AllocID();
+ X.CreateWindow(wid, display.screen[0].root, 100, 100, 400, 300);
+ X.ChangeWindowAttributes(wid, { eventMask: x11.eventMask.PointerMotion|x11.eventMask.KeyPress });
+ X.MapWindow(wid)
+ X.on('event', function(ev) {
+ if (ev.type === 2) // keypress
+ X.terminate();
+ console.log(ev);
+ });
+});
diff --git a/examples/simple/hello.js b/examples/simple/hello.js
new file mode 100644
index 0000000..6ad9ba1
--- /dev/null
+++ b/examples/simple/hello.js
@@ -0,0 +1,5 @@
+var x11 = require('../../lib/x11');
+x11.createClient(function(display) {
+ console.log('succesfully connected to \"' + display.vendor + '\" server');
+ display.client.terminate();
+});
diff --git a/examples/simple/lsatoms.js b/examples/simple/lsatoms.js
new file mode 100644
index 0000000..61e16c4
--- /dev/null
+++ b/examples/simple/lsatoms.js
@@ -0,0 +1,26 @@
+var x11 = require('../../lib/x11');
+x11.createClient(function(display) {
+ var maxstd = 0;
+ var atomName;
+ for (atomName in display.atoms)
+ {
+ var id = display.atoms[atomName];
+ console.log(id + '\t' + atomName);
+ if (id > maxstd)
+ maxstd = id;
+ }
+ (
+ function getAtoms(atomId)
+ {
+ display.client.GetAtomName(atomId, function(err, atom) {
+ if (err) {
+ display.client.terminate();
+ return true;
+ } else {
+ console.log(atomId + '\t' + atom);
+ getAtoms(atomId +1);
+ }
+ });
+ }
+ )(maxstd+1);
+});
diff --git a/examples/simple/lsatomsp.js b/examples/simple/lsatomsp.js
new file mode 100644
index 0000000..dd9ce75
--- /dev/null
+++ b/examples/simple/lsatomsp.js
@@ -0,0 +1,36 @@
+var x11 = require('../../lib/x11');
+x11.createClient(function(display) {
+ var maxstd = 0;
+ var atomName;
+ for (atomName in display.client.atoms)
+ {
+ var id = display.client.atoms[atomName];
+ console.log(id + '\t' + atomName);
+ if (id > maxstd)
+ maxstd = id;
+ }
+ (
+ function getAtoms(atomIdStart, atomIdEnd)
+ {
+ var atomId;
+ var numInBatch = atomIdEnd - atomIdStart;
+ for (atomId = atomIdStart; atomId < atomIdEnd; atomId++)
+ {
+ (function(id) {
+ display.client.GetAtomName(id, function(err, atom) {
+ if (err) {
+ display.client.terminate();
+ return true;
+ } else {
+ console.log(id + '\t' + atom);
+ numInBatch--;
+ if (numInBatch === 0) {
+ getAtoms(atomIdStart + 100, atomIdEnd+ 100);
+ }
+ }
+ });
+ })(atomId);
+ }
+ }
+ )(maxstd+1, maxstd+100);
+});
diff --git a/test/rendertest.js b/examples/simple/render.js
similarity index 85%
rename from test/rendertest.js
rename to examples/simple/render.js
index 0f95921..7cfaefa 100644
--- a/test/rendertest.js
+++ b/examples/simple/render.js
@@ -1,15 +1,14 @@
-var x11 = require('../lib/x11');
+var x11 = require('../../lib/x11');
var PointerMotion = x11.eventMask.PointerMotion;
var xclient = x11.createClient(function(display) {
var X = display.client;
var root = display.screen[0].root;
display.client.require('render', function(Render) {
- console.log(Render);
var wid = X.AllocID();
var white = display.screen[0].white_pixel;
varblack = display.screen[0].black_pixel;
- X.CreateWindow(wid, root, 10, 10, 400, 300, 1, 1, 0, { backgroundPixel: white, eventMask: PointerMotion });
+ X.CreateWindow(wid, root, 10, 10, 400, 300, 0, 0, 0, 0, { backgroundPixel: white, eventMask: PointerMotion });
X.MapWindow(wid);
var pict = X.AllocID();
diff --git a/examples/wm/wm.js b/examples/windowmanager/wm.js
similarity index 100%
rename from examples/wm/wm.js
rename to examples/windowmanager/wm.js
diff --git a/test/alloccolor.js b/test/alloccolor.js
deleted file mode 100644
index 0e9afb1..0000000
--- a/test/alloccolor.js
+++ /dev/null
@@ -1,48 +0,0 @@
-var x11 = require('../lib/x11');
-
-var xclient = x11.createClient();
-var Exposure = x11.eventMask.Exposure;
-var PointerMotion = x11.eventMask.PointerMotion;
-var pts = [];
-
-xclient.on('connect', function(display) {
- var X = this;
- var root = display.screen[0].root;
- var white = display.screen[0].white_pixel;
- var black = display.screen[0].black_pixel;
-
- var wid = X.AllocID();
- X.CreateWindow(
- wid, root,
- 10, 10, 400, 300,
- 1, 1, 0,
- {
- backgroundPixel: white, eventMask: Exposure|PointerMotion
- }
- );
- X.MapWindow(wid);
-
- var gc = X.AllocID();
- X.AllocColor(display.screen[0].default_colormap, 0xffff, 0, 0, function(redcolor) {
- // todo: it is possible for PolyLine to be called before CreateGC!
- console.log(redcolor);
- X.CreateGC(gc, wid, { foreground: redcolor.pixel, background: white } );
- });
-
- X.on('event', function(ev) {
- if (ev.type == 12)
- {
- if (pts.length > 4)
- X.PolyLine(0, wid, gc, pts);
- } else if (ev.type == 6) {
- pts.push(ev.x);
- pts.push(ev.y);
- if (pts.length > 4)
- X.PolyLine(0, wid, gc, pts.slice(-4));
- }
- });
-
- X.on('error', function(e) {
- console.log(e);
- });
-});
diff --git a/test/atom_benchmark_buffered.js b/test/atom_benchmark_buffered.js
deleted file mode 100644
index 7b97c86..0000000
--- a/test/atom_benchmark_buffered.js
+++ /dev/null
@@ -1,51 +0,0 @@
-// WinServ2008R2 64bit, Intel(R) Core(TM) i7 CPU 870 @2.93GHz, Xming 6.9.0.31
-// 0.4.3/cygwin 32bit: 12000 +/-1000 InternAtom/sec
-// 0.5.1/win32 : 12000 +/-1000
-
-// Ubuntu 11.04 32bit, Intel(R) Core(TM)2 Duo CPU T7250 @2.00GHz, XOrg 1:7.6+4ubuntu3.1
-// 0.4.9pre: 23300 +/-200
-
-
-var x11 = require('../lib/x11');
-
-var xclient = x11.createClient();
-var counter = 0;
-var t = +new Date();
-var t0 = t;
-var num = 100000;
-xclient.on('connect', function(display) {
- console.log(display);
- process.exit(0);
- var X = this;
- for (var i=0; i < num; ++i)
- {
- var hello = 'Hello, node.js ' + i;
- X.InternAtom(false, hello, function(atomId) {
- if (counter == 0)
- {
- var t1 = +new Date();
- console.log('first reply after sending %d atoms in %d ms', num, t1-t);
- t = t1;
- }
- //console.log('atom %d saved on server', atomId);
-
- if ((counter % 10000) == 0)
- {
- var t1 = +new Date();
- console.log('received 10000 (up to %d) atom ids in %d ms', counter, t1 - t);
- t = t1;
- }
-
- counter++;
- if (counter == (num-1))
- {
- var t1 = +new Date();
- var delta = t1 - t0;
- console.log(delta);
- console.log('reqs/msec: ' + num/delta);
- console.log('msec per req: ' + delta/num);
- process.exit(0); // TODO: X.end() ?
- }
- });
- }
-});
diff --git a/test/atom_benchmark_parallel.js b/test/atom_benchmark_parallel.js
deleted file mode 100644
index afde735..0000000
--- a/test/atom_benchmark_parallel.js
+++ /dev/null
@@ -1,63 +0,0 @@
-// test results:
-
-// WinServ2008R2, Intel(R) Core(TM) i7 CPU 870 @ 2.93GHz + Xming 6.9.0.31
-//
-// 0.4.3/cygwin 32bit : 8500 +/- 2000 InternAtom/sec
-// 0.5.1/win32 : N/A
-//
-// Ubuntu 11.04 32bit, Intel(R) Core(TM)2 Duo CPU T7250 @2.00GHz, XOrg 1:7.6+4ubuntu3.1
-// 0.4.9pre: 16700 +/-300
-
-
-var x11 = require('../lib/x11');
-
-var xclient = x11.createClient();
-var reqcounter = 0;
-var rescounter = 0;
-
-var num = 400000;
-var X;
-
-var t0 = +new Date();
-
-function benchmarkAtoms()
-{
- if (reqcounter > num)
- return;
-
- X.InternAtom(false, 'test ' + reqcounter, function(atomId) {
- rescounter++;
- //console.log('%d received', rescounter);
- if ( (rescounter % 10000) == 0)
- {
- var t2 = X.t1;
- X.t1 = +new Date();
- var delta = X.t1 - t2;
- console.log(reqcounter - rescounter);
- console.log('reqs/msec: ' + 10000/delta);
- console.log('msec per req: ' + delta/10000);
- }
- if (rescounter == (num-2))
- {
- var t1 = +new Date();
- var delta = t1 - t0;
- console.log(delta);
- console.log('reqs/msec: ' + num/delta);
- console.log('msec per req: ' + delta/num);
-
- process.exit(0);
- }
- });
-
- reqcounter++;
- //console.log('%d sent', reqcounter);
- process.nextTick(benchmarkAtoms);
-}
-
-
-
-xclient.on('connect', function(display) {
- X = this;
- X.t1 = +new Date();
- benchmarkAtoms();
-});
diff --git a/test/c-tests/Makefile b/test/c-tests/Makefile
deleted file mode 100644
index 9b00c85..0000000
--- a/test/c-tests/Makefile
+++ /dev/null
@@ -1,3 +0,0 @@
-LDFLAGS=-lX11
-
-simplewin: simplewin.o
diff --git a/test/c-tests/simplewin.c b/test/c-tests/simplewin.c
deleted file mode 100644
index a3f3926..0000000
--- a/test/c-tests/simplewin.c
+++ /dev/null
@@ -1,42 +0,0 @@
-#include
-#include
-#include
-#include
-
-int main(void) {
- Display *d;
- Window w, w1;
- XEvent e;
- char *msg = "Hello, world!";
- int s;
-
- d = XOpenDisplay(NULL);
- if (d == NULL) {
- fprintf(stderr, "Cannot open display\n");
- exit(1);
- }
-
- s = DefaultScreen(d);
- w = XCreateSimpleWindow(d, RootWindow(d, s), 10, 10, 100, 100, 1,
- BlackPixel(d, s), WhitePixel(d, s));
-
- w1 = XCreateSimpleWindow(d, RootWindow(d, s), 50, 50, 50, 50, 1,
- BlackPixel(d, s), WhitePixel(d, s));
- XSelectInput(d, w, ExposureMask | KeyPressMask);
- XSelectInput(d, w1, ExposureMask);
- XMapWindow(d, w);
- XMapWindow(d, w1);
-
- while (1) {
- XNextEvent(d, &e);
- if (e.type == Expose) {
- XFillRectangle(e.xany.display, e.xany.window, DefaultGC(d, s), 20, 20, 10, 10);
- XDrawString(e.xany.display, e.xany.window, DefaultGC(d, s), 10, 50, msg, strlen(msg));
- }
- if (e.type == KeyPress)
- break;
- }
-
- XCloseDisplay(d);
- return 0;
-}
diff --git a/test/creategc.js b/test/creategc.js
deleted file mode 100644
index d5b052b..0000000
--- a/test/creategc.js
+++ /dev/null
@@ -1,17 +0,0 @@
-var x11 = require('../lib/x11');
-
-var xclient = x11.createClient();
-var PointerMotion = x11.eventMask.PointerMotion;
-var mapped = true;
-
-xclient.on('connect', function(display) {
- var X = this;
- var root = display.screen[0].root;
- var white = display.screen[0].white_pixel;
- var black = display.screen[0].black_pixel;
-
- var wid = X.AllocID();
- X.CreateWindow(wid, root, 10, 10, 400, 300, 1, 1, 0, { backgroundPixel: white, eventMask: PointerMotion });
- var cid = X.AllocID();
- X.CreateGC(cid, wid);
-});
\ No newline at end of file
diff --git a/test/createwindow.js b/test/createwindow.js
deleted file mode 100644
index 9bab395..0000000
--- a/test/createwindow.js
+++ /dev/null
@@ -1,32 +0,0 @@
-var x11 = require('../lib/x11');
-
-var xclient = x11.createClient();
-var PointerMotion = x11.eventMask.PointerMotion;
-var Button1Motion = x11.eventMask.Button1Motion;
-var Button2Motion = x11.eventMask.Button2Motion;
-var Button3Motion = x11.eventMask.Button3Motion;
-var Button4Motion = x11.eventMask.Button4Motion;
-var Button5Motion = x11.eventMask.Button5Motion;
-var ButtonPress = x11.eventMask.ButtonPress;
-var ButtonRelease = x11.eventMask.ButtonRelease;
-var EnterWindow = x11.eventMask.EnterWindow;
-var LeaveWindow = x11.eventMask.LeaveWindow;
-
-//var mask = PointerMotion|Button1Motion|Button2Motion|Button3Motion|Button4Motion|Button5Motion|ButtonPress|ButtonRelease;
-//var mask = Button1Motion|Button2Motion|Button3Motion|Button4Motion|Button5Motion|ButtonPress|ButtonRelease;
-var mask = Button1Motion|ButtonPress|EnterWindow|LeaveWindow;
-
-xclient.on('connect', function(display) {
- var X = this;
- var root = display.screen[0].root;
- var wid = X.AllocID();
- var white = display.screen[0].white_pixel;
- var black = display.screen[0].black_pixel;
-
- X.CreateWindow(wid, root, 10, 10, 400, 300, 1, 1, 0, { backgroundPixel: white, eventMask: mask });
- X.MapWindow(wid);
-});
-
-xclient.on('event', function(ev) {
- console.log(ev);
-});
\ No newline at end of file
diff --git a/test/genstdatoms.js b/test/genstdatoms.js
deleted file mode 100644
index 795a96e..0000000
--- a/test/genstdatoms.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var x11 = require('../lib/x11');
-
-var xclient = x11.createClient();
-var atomId = 1;
-xclient.on('connect', function(display) {
- var X = this;
- function listAtoms()
- {
- function getAtom(a)
- {
- X.GetAtomName(a, function(str) {
- if (a == 1)
- console.log('module.exports = {')
- if (a != 68)
- console.log(' %s: %d,', str, a);
- else
- console.log(' %s: %d\n}', str, a);
- listAtoms();
- });
- }
- if (atomId <= 68)
- getAtom(atomId);
- else
- X.terminate();
- atomId++;
- }
- listAtoms();
-});
diff --git a/test/getprop.js b/test/getprop.js
deleted file mode 100644
index b350d00..0000000
--- a/test/getprop.js
+++ /dev/null
@@ -1,30 +0,0 @@
-var x11 = require('../lib/x11');
-
-var xclient = x11.createClient();
-var PropertyChange = x11.eventMask.PropertyChange;
-
-xclient.on('connect', function(display) {
- var X = this;
- var root = display.screen[0].root;
- var wid = X.AllocID();
- var white = display.screen[0].white_pixel;
- var black = display.screen[0].black_pixel;
-
- X.CreateWindow(wid, root, 10, 10, 400, 300, 1, 1, 0, { backgroundPixel: white, eventMask: PropertyChange });
- X.MapWindow(wid);
-
- // mode: 0 replace, 1 prepend, 2 append
- // mode, wid, name, type, format, data
- X.ChangeProperty(0, wid, xclient.atoms.WM_NAME, xclient.atoms.STRING, 8, 'Hello, NodeJS');
- setInterval(function() {
- X.ChangeProperty(0, wid, xclient.atoms.WM_NAME, xclient.atoms.STRING, 8, 'Hello, NodeJS ' + new Date());
- }, 1000);
-
- xclient.on('event', function(ev) {
- X.GetProperty(0, wid, xclient.atoms.WM_NAME, xclient.atoms.STRING, 0, 10000000, function(prop) {
- if (prop.type == xclient.atoms.STRING)
- prop.data = prop.data.toString();
- console.log(prop.data);
- });
- });
-});
\ No newline at end of file
diff --git a/test/query_pointer_benchmark_parallel.js b/test/query_pointer_benchmark_parallel.js
deleted file mode 100644
index 5bada4d..0000000
--- a/test/query_pointer_benchmark_parallel.js
+++ /dev/null
@@ -1,53 +0,0 @@
-// test results:
-
-// WinServ2008R2, Intel(R) Core(TM) i7 CPU 870 @ 2.93GHz + Xming 6.9.0.31
-//
-// 0.4.3/cygwin 32bit : 6900 +/- 200 req/sec
-// 0.5.1/win32 : 3700 +/- 200 req/sec
-// cygwin x11perf -sync -pointer : 2800 +/- 200 req/sec
-// cygwin x11perf -pointer : 5600 +/- 200 req/sec
-
-//
-// Ubuntu 11.04 32bit, Intel(R) Core(TM)2 Duo CPU T7250 @2.00GHz, XOrg 1:7.6+4ubuntu3.1
-// 0.4.9pre :
-// x11perf -sync -pointer :
-// x11perf -pointer :
-
-var x11 = require('../lib/x11');
-var X = x11.createClient();
-
-var total = 50000;
-var num_qp_resp_left = total;
-var num_qp_req_left = total;
-var start = +new Date();
-var wid;
-
-function benchmarkQP()
-{
- num_qp_req_left--;
- X.QueryPointer(wid, function(res) {
- num_qp_resp_left--;
- if (num_qp_resp_left == 0)
- {
- var end = +new Date();
- var delta = (end - start)/1000
- console.error( 'Finished ' + total + ' requests in ' + delta + ' sec, ' + total/delta + ' req/sec');
- X.terminate();
- }
- });
-
- if (num_qp_req_left > 0)
- process.nextTick(benchmarkQP);
-}
-
-X.on('connect', function(display) {
- var screen = display.screen[0];
- wid = X.AllocID();
- X.CreateWindow(wid, screen.root, 10, 10, 400, 300, 1, 1, 0, { backgroundPixel: screen.white_pixel });
- X.MapWindow(wid);
- benchmarkQP(wid);
-});
-
-X.on('error', function(err) {
- console.log(err);
-});
diff --git a/test/query_pointer_benchmark_sync.js b/test/query_pointer_benchmark_sync.js
deleted file mode 100644
index 3e786fa..0000000
--- a/test/query_pointer_benchmark_sync.js
+++ /dev/null
@@ -1,48 +0,0 @@
-// test results:
-
-// WinServ2008R2, Intel(R) Core(TM) i7 CPU 870 @ 2.93GHz + Xming 6.9.0.31
-//
-// 0.4.3/cygwin 32bit : 2900 +/- 300 req/sec
-// 0.5.1/win32 : 5500 +/- 1000 req/sec
-// cygwin x11perf -sync -pointer : 2800 +/- 200 req/sec
-// cygwin x11perf -pointer : 5600 +/- 200 req/sec
-
-//
-// Ubuntu 11.04 32bit, Intel(R) Core(TM)2 Duo CPU T7250 @2.00GHz, XOrg 1:7.6+4ubuntu3.1
-// 0.4.9pre :
-// x11perf -sync -pointer :
-// x11perf -pointer :
-
-var x11 = require('../lib/x11');
-var X = x11.createClient();
-
-var total = 50000;
-var num_qp_left = total;
-var start = +new Date();
-
-function benchmarkQP(wid)
-{
- X.QueryPointer(wid, function(res) {
- num_qp_left--;
- if (num_qp_left > 0)
- benchmarkQP(wid);
- else {
- var end = +new Date();
- var delta = (end - start)/1000
- console.log( 'Finished ' + total + ' requests in ' + delta + ' sec, ' + total/delta + ' req/sec');
- X.terminate();
- }
- });
-}
-
-X.on('connect', function(display) {
- var screen = display.screen[0];
- var wid = X.AllocID();
- X.CreateWindow(wid, screen.root, 10, 10, 400, 300, 1, 1, 0, { backgroundPixel: screen.white_pixel });
- X.MapWindow(wid);
- benchmarkQP(wid);
-});
-
-X.on('error', function(err) {
- console.log(err);
-});
diff --git a/test/render-simplest.pl b/test/render-simplest.pl
deleted file mode 100644
index 31e1fca..0000000
--- a/test/render-simplest.pl
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/perl
-
-use X11::Protocol;
-use strict;
-use IO::Select;
-my $X = new X11::Protocol;
-$X->init_extension("RENDER") or die;
-
-my($rgb24, $rgba32);
-
-$rgb24 = 71;
-$rgba32 = 69;
-
-my $win = $X->new_rsrc;
-$X->CreateWindow($win, $X->root, 'InputOutput', $X->root_depth,
- 'CopyFromParent', (0, 0), 500, 500, 4,
- 'event_mask' => $X->pack_event_mask('Exposure'));
-
-$X->MapWindow($win);
-my $picture = $X->new_rsrc;
-$X->RenderCreatePicture($picture, $win, $rgb24, 'poly_edge' => 'Smooth', 'poly_mode' => 'Precise');
-
-my $pixmap = $X->new_rsrc;
-$X->CreatePixmap($pixmap, $win, 32, 1000, 1000);
-my $pix_pict = $X->new_rsrc;
-$X->RenderCreatePicture($pix_pict, $pixmap, $rgba32, 'poly_edge' => 'Smooth', 'poly_mode' => 'Precise');
-$X->RenderFillRectangles('Src', $pix_pict, [0xffff, 0, 0, 0x8000], [0, 0, 1000, 1000]);
-
-$X->event_handler('queue');
-#my $fds = IO::Select->new($X->connection->fh);
-
-sub draw {
- $X->RenderFillRectangles('Src', $picture, [(0xffff)x4], [0, 0, 500, 500]);
-
- $X->RenderSetPictureFilter($pix_pict, "nearest");
- $X->RenderTriangles('Over', $pix_pict, 500, 500, $picture, 0, [(250, 100), (100, 350), (400, 350), (175, 100), (185, 100), (180, 0)]);
- #$X->RenderFillRectangles('Src', $picture, [(0xffff, 0, 0, 0xffff)], [10, 10, 50, 50]);
-}
-
-for (;;) {
- my %e;
- $X->handle_input;
- if (%e = $X->dequeue_event) {
- if ($e{'name'} eq "Expose") {
- draw();
- }
- }
-}
diff --git a/test/render.h b/test/render.h
deleted file mode 100644
index 56f19a7..0000000
--- a/test/render.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * $XFree86: xc/include/extensions/render.h,v 1.11 2002/11/23 02:34:45 keithp Exp $
- *
- * Copyright © 2000 SuSE, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-
-#ifndef _RENDER_H_
-#define _RENDER_H_
-
-typedef unsigned long Glyph;
-typedef unsigned long GlyphSet;
-typedef unsigned long Picture;
-typedef unsigned long PictFormat;
-
-#define RENDER_NAME "RENDER"
-#define RENDER_MAJOR 0
-#define RENDER_MINOR 8
-
-#define X_RenderQueryVersion 0
-#define X_RenderQueryPictFormats 1
-#define X_RenderQueryPictIndexValues 2 /* 0.7 */
-#define X_RenderQueryDithers 3
-#define X_RenderCreatePicture 4
-#define X_RenderChangePicture 5
-#define X_RenderSetPictureClipRectangles 6
-#define X_RenderFreePicture 7
-#define X_RenderComposite 8
-#define X_RenderScale 9
-#define X_RenderTrapezoids 10
-#define X_RenderTriangles 11
-#define X_RenderTriStrip 12
-#define X_RenderTriFan 13
-#define X_RenderColorTrapezoids 14
-#define X_RenderColorTriangles 15
-/* #define X_RenderTransform 16 */
-#define X_RenderCreateGlyphSet 17
-#define X_RenderReferenceGlyphSet 18
-#define X_RenderFreeGlyphSet 19
-#define X_RenderAddGlyphs 20
-#define X_RenderAddGlyphsFromPicture 21
-#define X_RenderFreeGlyphs 22
-#define X_RenderCompositeGlyphs8 23
-#define X_RenderCompositeGlyphs16 24
-#define X_RenderCompositeGlyphs32 25
-#define X_RenderFillRectangles 26
-/* 0.5 */
-#define X_RenderCreateCursor 27
-/* 0.6 */
-#define X_RenderSetPictureTransform 28
-#define X_RenderQueryFilters 29
-#define X_RenderSetPictureFilter 30
-#define X_RenderCreateAnimCursor 31
-#define RenderNumberRequests (X_RenderCreateAnimCursor+1)
-
-#define BadPictFormat 0
-#define BadPicture 1
-#define BadPictOp 2
-#define BadGlyphSet 3
-#define BadGlyph 4
-#define RenderNumberErrors (BadGlyph+1)
-
-#define PictTypeIndexed 0
-#define PictTypeDirect 1
-
-#define PictOpMinimum 0
-#define PictOpClear 0
-#define PictOpSrc 1
-#define PictOpDst 2
-#define PictOpOver 3
-#define PictOpOverReverse 4
-#define PictOpIn 5
-#define PictOpInReverse 6
-#define PictOpOut 7
-#define PictOpOutReverse 8
-#define PictOpAtop 9
-#define PictOpAtopReverse 10
-#define PictOpXor 11
-#define PictOpAdd 12
-#define PictOpSaturate 13
-#define PictOpMaximum 13
-
-/*
- * Operators only available in version 0.2
- */
-#define PictOpDisjointMinimum 0x10
-#define PictOpDisjointClear 0x10
-#define PictOpDisjointSrc 0x11
-#define PictOpDisjointDst 0x12
-#define PictOpDisjointOver 0x13
-#define PictOpDisjointOverReverse 0x14
-#define PictOpDisjointIn 0x15
-#define PictOpDisjointInReverse 0x16
-#define PictOpDisjointOut 0x17
-#define PictOpDisjointOutReverse 0x18
-#define PictOpDisjointAtop 0x19
-#define PictOpDisjointAtopReverse 0x1a
-#define PictOpDisjointXor 0x1b
-#define PictOpDisjointMaximum 0x1b
-
-#define PictOpConjointMinimum 0x20
-#define PictOpConjointClear 0x20
-#define PictOpConjointSrc 0x21
-#define PictOpConjointDst 0x22
-#define PictOpConjointOver 0x23
-#define PictOpConjointOverReverse 0x24
-#define PictOpConjointIn 0x25
-#define PictOpConjointInReverse 0x26
-#define PictOpConjointOut 0x27
-#define PictOpConjointOutReverse 0x28
-#define PictOpConjointAtop 0x29
-#define PictOpConjointAtopReverse 0x2a
-#define PictOpConjointXor 0x2b
-#define PictOpConjointMaximum 0x2b
-
-#define PolyEdgeSharp 0
-#define PolyEdgeSmooth 1
-
-#define PolyModePrecise 0
-#define PolyModeImprecise 1
-
-#define CPRepeat (1 << 0)
-#define CPAlphaMap (1 << 1)
-#define CPAlphaXOrigin (1 << 2)
-#define CPAlphaYOrigin (1 << 3)
-#define CPClipXOrigin (1 << 4)
-#define CPClipYOrigin (1 << 5)
-#define CPClipMask (1 << 6)
-#define CPGraphicsExposure (1 << 7)
-#define CPSubwindowMode (1 << 8)
-#define CPPolyEdge (1 << 9)
-#define CPPolyMode (1 << 10)
-#define CPDither (1 << 11)
-#define CPComponentAlpha (1 << 12)
-#define CPLastBit 11
-
-/* Filters included in 0.6 */
-#define FilterNearest "nearest"
-#define FilterBilinear "bilinear"
-
-#define FilterFast "fast"
-#define FilterGood "good"
-#define FilterBest "best"
-
-#define FilterAliasNone -1
-
-/* Subpixel orders included in 0.6 */
-#define SubPixelUnknown 0
-#define SubPixelHorizontalRGB 1
-#define SubPixelHorizontalBGR 2
-#define SubPixelVerticalRGB 3
-#define SubPixelVerticalBGR 4
-#define SubPixelNone 5
-
-#endif /* _RENDER_H_ */
\ No newline at end of file
diff --git a/test/resisewindow.js b/test/resisewindow.js
deleted file mode 100644
index 311694a..0000000
--- a/test/resisewindow.js
+++ /dev/null
@@ -1,14 +0,0 @@
-var x11 = require('../lib/x11');
-x11.createClient(function(display) {
- var X = display.client;
- var root = display.screen[0].root;
- var wid = X.AllocID();
- X.CreateWindow(wid, root, 10, 10, 400, 300, 1, 1, 0);
- X.MapWindow(wid);
- setInterval( function() {
- X.ResiseWindow(wid, 800, 200);
- }, 1200);
- setInterval( function() {
- X.ResiseWindow(wid, 400, 300);
- }, 510);
-});
diff --git a/test/sketch.js b/test/sketch.js
deleted file mode 100644
index 9baa5c5..0000000
--- a/test/sketch.js
+++ /dev/null
@@ -1,43 +0,0 @@
-var x11 = require('../lib/x11');
-var Window = require('./wndwrap');
-
-x11.createClient(function(display) {
-
- var pts = [];
- new Window(display.client, 0, 0, 700, 500)
- .handle({
-
- mousemove: function(ev) {
- if (this.pressed)
- {
- var lastpoly = pts[pts.length - 1];
- lastpoly.push(ev.x);
- lastpoly.push(ev.y);
- if (lastpoly.length > 3)
- this.gc.polyLine(lastpoly.slice(-4));
- }
- },
-
- mousedown: function(ev) {
- if (ev.keycode == 1) // left button
- {
- this.pressed = true;
- pts.push([]);
- }
- },
-
- mouseup: function(ev) {
- if (ev.keycode == 1) // left button
- this.pressed = false;
- },
-
- expose: function(ev) {
- for (var i=0; i < pts.length ; ++i) {
- this.gc.polyLine(pts[i]);
- }
- }
-
- })
- .map()
- .title = 'Hello, world!';
-});
diff --git a/test/test_ext_render.js b/test/test_ext_render.js
deleted file mode 100644
index e8ad2e6..0000000
--- a/test/test_ext_render.js
+++ /dev/null
@@ -1,199 +0,0 @@
-var x11 = require('../lib/x11');
-
-// adding XRender functions manually from
-// http://cgit.freedesktop.org/xcb/proto/tree/src/render.xml?id=HEAD
-// and http://www.x.org/releases/X11R7.6/doc/renderproto/renderproto.txt
-// TODO: move to templates
-x11.createClient(
- function(display) {
- var X = display.client;
- X.QueryExtension('RENDER', function(ext) {
- function RenderQueryVersion(clientMaj, clientMin, callback)
- {
- X.seq_num++;
- X.pack_stream.pack('CCSLL', [ext.majorOpcode, 0, 3, clientMaj, clientMin]);
- X.replies[X.seq_num] = [
- function(buf, opt) {
- var res = buf.unpack('LL');
- return res;
- },
- callback
- ];
- X.pack_stream.flush();
- }
-
- function RenderQueryFilters(callback)
- {
- X.seq_num++;
- X.pack_stream.pack('CCSL', [ext.majorOpcode, 29, 2, display.screen[0].root]);
- X.replies[X.seq_num] = [
- function(buf, opt) {
- var h = buf.unpack('LL');
- var num_aliases = h[0];
- var num_filters = h[1];
- var aliases = [];
- var offset = 24; // LL + 16 bytes pad
- for (var i=0; i < num_aliases; ++i)
- {
- aliases.push(buf.unpack('S', offset)[0]);
- offset+=2;
- }
- var filters = [];
- for (var i=0; i < num_filters; ++i)
- {
- var len = buf.unpack('C', offset)[0];
- //if (!len) break;
- offset++;
- filters.push(buf.toString('ascii', offset, offset+len));
- offset+=len;
- }
- return [aliases, filters];
- },
- callback
- ];
- X.pack_stream.flush();
- }
-
- var valueList = [
- ['repeat', 'C'],
- ['alphaMap', 'L'],
- ['alphaXOrigin', 's'],
- ['alphaYOrigin', 's'],
- ['clipMask', 'L'],
- ['graphicsExposures', 'C'],
- ['subwindowMode', 'C'],
- ['polyEdge', 'C'],
- ['polyMode', 'C'],
- ['dither', 'L'],
- ['componentAlpha', 'C']
- ];
-
- var argumentLength = {
- C: 1,
- S: 2,
- s: 2,
- L: 4,
- x: 1
- };
-
- function RenderCreatePicture(pid, drawable, pictformat, values)
- {
- X.seq_num++;
- var mask = 0;
- var reqLen = 5; // + (values + pad)/4
- var format = 'CCSLLLL';
- var params = [ext.majorOpcode, 4, reqLen, pid, drawable, pictformat, mask];
-
- if (values)
- {
- var valuesLength = 0;
- for (var i=0; i < valueList.length; ++i)
- {
- var val = values[valueList[i][0]];
- if (val) {
- mask |= (1 << i);
- params.push(val);
- var valueFormat = valueList[i][1];
- format += valueFormat;
- valuesLength += argumentLength[valueFormat];
- }
- }
- var pad4 = (valuesLength + 3) >> 2;
- var toPad = (pad4 << 2) - valuesLength;
- for (var i=0; i < toPad; ++i)
- format += 'x';
- reqLen += pad4;
- params[2] = reqLen;
- params[6] = mask;
- }
- console.log([format, params]);
- X.pack_stream.pack(format, params);
- X.pack_stream.flush();
- }
-
- function floatToFix(f)
- {
- return parseInt(f*(1<<16));
- }
-
- function RenderLinearGradient(pid, p1, p2, stops)
- {
- X.seq_num++;
- var reqLen = 7+stops.length*3; //header + params + 1xStopfix+2xColors
- var format = 'CCSLLLLLL';
- var params = [ext.majorOpcode, 34, reqLen, pid];
- params.push(floatToFix(p1[0])); // L
- params.push(floatToFix(p1[1]));
- params.push(floatToFix(p2[0]));
- params.push(floatToFix(p2[1])); // L
-
- params.push(stops.length);
-
- // [ [float stopDist, [float r, g, b, a] ], ...]
- // stop distances
- for (var i=0; i < stops.length; ++i)
- {
- format += 'L';
- // TODO: we know total params length in advance. ? params[index] =
- params.push(floatToFix(stops[i][0]))
- }
- // colors
- for (var i=0; i < stops.length; ++i)
- {
- format += 'SSSS';
- for (var j=0; j < 4; ++j)
- params.push(stops[i][1][j]);
- }
- console.log([format, params]);
- X.pack_stream.pack(format, params);
- X.pack_stream.flush();
- }
-
- function RenderFillRectangles(op, pid, color, rects)
- {
- X.seq_num++;
- var reqLen = 5+rects.length*2;
- var format = 'CCSCxxxLSSSS';
- var params = [ext.majorOpcode, 26, reqLen, op, pid];
- for (var j=0; j < 4; ++j)
- params.push(color[j]);
- for (var i=0; i < rects.length; i+=4)
- {
- format += 'ssSS';
- params.push(rects[i*4]);
- params.push(rects[i*4 + 1]);
- params.push(rects[i*4 + 2]);
- params.push(rects[i*4 + 3]);
- }
- console.log([format, params]);
- X.pack_stream.pack(format, params);
- X.pack_stream.flush();
- }
-
- //RenderQueryVersion(0,9, function(serverVersion) { console.log(serverVersion); });
- //RenderQueryFilters(function(resp) { console.log(resp); });
-
- var root = display.screen[0].root;
- var wid = X.AllocID();
- var white = display.screen[0].white_pixel;
- var black = display.screen[0].black_pixel;
- X.CreateWindow(wid, root, 10, 10, 400, 300, 1, 1, 0, { backgroundPixel: white, eventMask: x11.eventMask.Exposure });
- var pid = X.AllocID();
- RenderCreatePicture(pid, wid, 71, { repeat: 1} );
- var pidGrad = X.AllocID();
-
- //RenderLinearGradient(pidGrad, [0,0], [100,100], [ [0, [0,0,0,0xffff]], [100, [0xffff, 0xffff, 0xffff, 0xffff]]]);
-
- X.MapWindow(wid);
-
- X.on('event', function(ev) {
- console.log(ev);
- //RenderFillRectangles(1, pid, [0, 0, 0, 0x8000], [0, 0, 400, 500]);
- RenderFillRectangles(1, pid, [0, 0x8000, 0, 0xffff], [100, 200, 400, 500]);
- });
- });
- }
-
-).on('error', function(err) {
- console.log(err);
-});
diff --git a/test/xlsatoms.js b/test/xlsatoms.js
deleted file mode 100644
index b9328f6..0000000
--- a/test/xlsatoms.js
+++ /dev/null
@@ -1,25 +0,0 @@
-var x11 = require('../lib/x11');
-
-var xclient = x11.createClient();
-var atomId = 10;
-xclient.on('connect', function(display) {
- var X = this;
- function listAtoms()
- {
- function getAtom(a)
- {
- X.GetAtomName(a, function(str) {
- if (typeof str != 'string') // 'Bad atom' error
- {
- X.terminate();
- return;
- }
- console.log(a + ' ' + str);
- listAtoms();
- });
- }
- getAtom(atomId);
- atomId++;
- }
- listAtoms();
-});