mirror of
https://github.com/danbulant/node-x11
synced 2026-07-05 19:20:54 +00:00
Merge pull request #93 from megadonkey/shape
Adds Shape extension request Rectangles; fixes Mask
This commit is contained in:
commit
90ea482119
3 changed files with 67 additions and 15 deletions
22
examples/smoketest/shape-rectangles.js
Normal file
22
examples/smoketest/shape-rectangles.js
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
var x11 = require('../../lib');
|
||||||
|
|
||||||
|
var Expose = 12;
|
||||||
|
|
||||||
|
x11.createClient(function(err, display) {
|
||||||
|
var X = display.client;
|
||||||
|
var root = display.screen[0].root;
|
||||||
|
X.require('shape', function(err, Shape) {
|
||||||
|
var win = X.AllocID();
|
||||||
|
X.CreateWindow(win, root, 0, 0, 200, 200);
|
||||||
|
X.ChangeWindowAttributes(win, { backgroundPixel: display.screen[0].black_pixel });
|
||||||
|
X.MapWindow(win);
|
||||||
|
Shape.Rectangles(Shape.Op.Set, Shape.Kind.Bounding, win, 0, 0, [
|
||||||
|
[40, 40, 40, 40], [120, 40, 40, 40],
|
||||||
|
[0, 120, 20, 20], [180, 120, 20, 20],
|
||||||
|
[20, 140, 30, 20], [150, 140, 30, 20],
|
||||||
|
[50, 160, 100, 20]
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
X.on('error', function(err) { console.log(err); });
|
||||||
|
|
||||||
|
});
|
||||||
|
|
@ -6,17 +6,22 @@ x11.createClient(function(err, display) {
|
||||||
X.require('shape', function(err, Shape) {
|
X.require('shape', function(err, Shape) {
|
||||||
var win = X.AllocID();
|
var win = X.AllocID();
|
||||||
X.CreateWindow(win, root, 0, 0, 200, 200);
|
X.CreateWindow(win, root, 0, 0, 200, 200);
|
||||||
var gc = X.AllocID();
|
X.ChangeWindowAttributes(win, { backgroundPixel: display.screen[0].white_pixel });
|
||||||
X.CreateGC(gc, win);
|
X.MapWindow(win);
|
||||||
//X.MapWindow(win);
|
X.ClearArea(win, 0, 0, 200, 200, false);
|
||||||
Shape.SelectInput(win, 1);
|
|
||||||
|
Shape.SelectInput(win, true);
|
||||||
Shape.InputSelected(win, function(err, isSelected) {
|
Shape.InputSelected(win, function(err, isSelected) {
|
||||||
console.log("IsSelected: " + isSelected);
|
console.log("IsSelected: " + isSelected);
|
||||||
});
|
});
|
||||||
//var pid = X.AllocID();
|
|
||||||
//X.CreatePixmap(pid, win, 2, 200, 200);
|
var bitmap = X.AllocID();
|
||||||
//X.PolyText8(pid, gc, 0, 0, ['Hello, Node.JS!', ' Hello, world!']);
|
X.CreatePixmap(bitmap, win, 1, 200, 200);
|
||||||
//Shape.Mask(Shape.Op.Set, Shape.Kind.Input, win, 0, 0, pid);
|
var gc = X.AllocID();
|
||||||
|
X.CreateGC(gc, bitmap, { foreground: 1 });
|
||||||
|
// X.PolyText8(bitmap, gc, 0, 0, ['Hello, Node.JS!', ' Hello, world!']);
|
||||||
|
X.PolyFillArc(bitmap, gc, [0, 0, 200, 200, 0, 360 * 64]);
|
||||||
|
Shape.Mask(Shape.Op.Set, Shape.Kind.Bounding, win, 0, 0, bitmap);
|
||||||
|
|
||||||
X.on('event', function(ev) {
|
X.on('event', function(ev) {
|
||||||
console.log(ev);
|
console.log(ev);
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ exports.requireExt = function(display, callback)
|
||||||
|
|
||||||
ext.Kind = {
|
ext.Kind = {
|
||||||
Bounding: 0,
|
Bounding: 0,
|
||||||
Clip: 1,
|
Clip: 1,
|
||||||
Input: 2
|
Input: 2
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -31,12 +31,19 @@ exports.requireExt = function(display, callback)
|
||||||
Intersect: 2,
|
Intersect: 2,
|
||||||
Subtract: 3,
|
Subtract: 3,
|
||||||
Invert: 4
|
Invert: 4
|
||||||
}
|
};
|
||||||
|
|
||||||
|
ext.Ordering = {
|
||||||
|
Unsorted: 0,
|
||||||
|
YSorted: 1,
|
||||||
|
YXSorted: 2,
|
||||||
|
YXBanded: 3
|
||||||
|
};
|
||||||
|
|
||||||
ext.QueryVersion = function(cb)
|
ext.QueryVersion = function(cb)
|
||||||
{
|
{
|
||||||
X.seq_num++;
|
X.seq_num++;
|
||||||
captureStack();
|
// captureStack();
|
||||||
X.pack_stream.pack('CCSLL', [ext.majorOpcode, 0, 1]);
|
X.pack_stream.pack('CCSLL', [ext.majorOpcode, 0, 1]);
|
||||||
X.replies[X.seq_num] = [
|
X.replies[X.seq_num] = [
|
||||||
function(buf, opt) {
|
function(buf, opt) {
|
||||||
|
|
@ -48,18 +55,36 @@ exports.requireExt = function(display, callback)
|
||||||
X.pack_stream.flush();
|
X.pack_stream.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Accepts rectangles as [[x, y, width, height]]
|
||||||
|
ext.Rectangles = function( op, kind, window, x, y, rectangles, ordering /* = Ordering.Unsorted */ )
|
||||||
|
{
|
||||||
|
if (ordering === undefined)
|
||||||
|
ordering = ext.Ordering.Unsorted;
|
||||||
|
|
||||||
|
var length = 4 + rectangles.length * 2;
|
||||||
|
|
||||||
|
X.seq_num++;
|
||||||
|
// captureStack();
|
||||||
|
X.pack_stream.pack('CCSCCCxLss', [ext.majorOpcode, 1, length, op, kind, ordering, window, x, y]);
|
||||||
|
for (var i = 0; i < rectangles.length; ++i) {
|
||||||
|
var r = rectangles[i];
|
||||||
|
X.pack_stream.pack('ssSS', r);
|
||||||
|
}
|
||||||
|
X.pack_stream.flush();
|
||||||
|
}
|
||||||
|
|
||||||
ext.Mask = function( op, kind, window, x, y, bitmap )
|
ext.Mask = function( op, kind, window, x, y, bitmap )
|
||||||
{
|
{
|
||||||
X.seq_num++;
|
X.seq_num++;
|
||||||
captureStack();
|
// captureStack();
|
||||||
X.pack_stream.pack('CCSCCxxLssL', [ext.majorOpcode, 2, 5, op, kind, x, y, bitmap]);
|
X.pack_stream.pack('CCSCCxxLssL', [ext.majorOpcode, 2, 5, op, kind, window, x, y, bitmap]);
|
||||||
X.pack_stream.flush();
|
X.pack_stream.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
ext.SelectInput = function( window, enable )
|
ext.SelectInput = function( window, enable )
|
||||||
{
|
{
|
||||||
X.seq_num++;
|
X.seq_num++;
|
||||||
captureStack();
|
// captureStack();
|
||||||
X.pack_stream.pack('CCSLCxxx', [ext.majorOpcode, 6, 3, window, enable ]);
|
X.pack_stream.pack('CCSLCxxx', [ext.majorOpcode, 6, 3, window, enable ]);
|
||||||
X.pack_stream.flush();
|
X.pack_stream.flush();
|
||||||
}
|
}
|
||||||
|
|
@ -67,7 +92,7 @@ exports.requireExt = function(display, callback)
|
||||||
ext.InputSelected = function( window, cb )
|
ext.InputSelected = function( window, cb )
|
||||||
{
|
{
|
||||||
X.seq_num++;
|
X.seq_num++;
|
||||||
captureStack();
|
// captureStack();
|
||||||
X.pack_stream.pack('CCSL', [ext.majorOpcode, 7, 2, window ]);
|
X.pack_stream.pack('CCSL', [ext.majorOpcode, 7, 2, window ]);
|
||||||
X.replies[X.seq_num] = [
|
X.replies[X.seq_num] = [
|
||||||
function(buf, opt) {
|
function(buf, opt) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue