From fa9dbe20005e939db529e3f1c1be169ca2ff722c Mon Sep 17 00:00:00 2001 From: Andrey Sidorov Date: Wed, 4 Nov 2015 16:44:25 +1100 Subject: [PATCH] add Render.AddTraps request --- examples/smoketest/trapezoids.js | 75 ++++++++++++++++++++++++++++++++ lib/ext/render.js | 24 +++++++--- 2 files changed, 94 insertions(+), 5 deletions(-) create mode 100644 examples/smoketest/trapezoids.js diff --git a/examples/smoketest/trapezoids.js b/examples/smoketest/trapezoids.js new file mode 100644 index 0000000..42be062 --- /dev/null +++ b/examples/smoketest/trapezoids.js @@ -0,0 +1,75 @@ +var x11 = require('../../lib'); +var Exposure = x11.eventMask.Exposure; +var PointerMotion = x11.eventMask.PointerMotion; + +var draw; + +x11.createClient({ debug: true}, function(err, display) { + + var X = display.client; + var root = display.screen[0].root; + + var wid = X.AllocID(); + X.CreateWindow( + wid, root, + 0, 0, 800, 600, + 0, 0, 0, 0, + { + eventMask: Exposure|PointerMotion + } + ); + X.MapWindow(wid); + + + X.require('render', function(err, Render) { + + var pixMask = X.AllocID(); + X.CreatePixmap(pixMask, wid, 8, 600, 600); + var pictTraps = X.AllocID(); + Render.CreatePicture(pictTraps, pixMask, Render.a8); + + var pictWin = X.AllocID(); + Render.CreatePicture(pictWin, wid, Render.rgb24); + + var pictSolid = X.AllocID(); + r = 0.2; g = 0.2; b = 0.2; a = 1; + Render.CreateSolidFill(pictSolid, r, g, b, a); + + draw = function(x, y) { + var r, g, b, a; + + // fill window + //r = x/1000; g = x/1000; b = x/1000; a = 0.5; + r = 1; g = 1; b = 1; a = 0.5; + Render.FillRectangles(1, pictWin, [r, g, b, a], [0, 0, 1000, 1000]) + + // fill traps + r = 0; g = 0; b = 0; a = 0; + Render.FillRectangles(1, pictTraps, [r, g, b, a], [0, 0, 1000, 1000]) + + Render.AddTraps(pictTraps, 0, 0, [ + x, 200, y, + //150, 200, 50, + 5, 250, 300, + 110, 200, 310, + 50, 150, 500 + ]); + + + // (op, src, mask, dst, srcX, srcY, maskX, maskY, dstX, dstY, width, height) + //Render.Composite(Render.PictOp.Over, pictSolid, pictTraps, pictWin, 0, 0, 0, 0, 0, 0, 800, 600); + //Render.PictOp.Over + + Render.Composite(Render.PictOp.Over, pictSolid, pictTraps, pictWin, 0, 0, 0, 0, 0, 0, 800, 600); + }; + + }); + +}).on('error', function(err) { + //console.log(err); +}).on('event', function(ev) { + //console.log(ev); + if (ev.name == 'MotionNotify') { + draw(ev.x, ev.y); + } +}); diff --git a/lib/ext/render.js b/lib/ext/render.js index a51f458..30dc6f8 100644 --- a/lib/ext/render.js +++ b/lib/ext/render.js @@ -159,7 +159,7 @@ exports.requireExt = function(display, callback) function floatToFix(f) { - return parseInt(f*65536); + return parseInt(f*65535); } ext.SetPictureTransform = function(pid, matrix) { @@ -331,7 +331,7 @@ exports.requireExt = function(display, callback) var format = 'CCSCxxxLSSSS'; var params = [ext.majorOpcode, 26, reqLen, op, pid]; for (var j=0; j < 4; ++j) - params.push(color[j]); + params.push(floatToFix(color[j])); for (var i=0; i < rects.length; i+=4) { format += 'ssSS'; @@ -354,12 +354,13 @@ exports.requireExt = function(display, callback) .flush(); } + // note that Trapezoids is considered deprecated by Render extension ext.Trapezoids = function(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) + for (var i=0; i < trapz.length; i++) { format += 'llllllllll'; for (var j=0; j < 10; ++j) @@ -367,7 +368,20 @@ exports.requireExt = function(display, callback) } X.pack_stream.pack(format, params); X.pack_stream.flush(); - } + }; + + ext.AddTraps = function(pic, offX, offY, trapList) { + X.seq_num++; + var format = 'CCSLss'; + var params = [ext.majorOpcode, 32, 3+trapList.length, pic, offX, offY]; + for (var i=0; i < trapList.length; i++) + { + format += 'l'; + params.push(floatToFix(trapList[i])); + } + X.pack_stream.pack(format, params); + X.pack_stream.flush(); + }; ext.Triangles = function(op, src, srcX, srcY, dst, maskFormat, tris) { @@ -691,7 +705,7 @@ exports.requireExt = function(display, callback) }; ext.Subpixel = { - Unknown: 0 + Unknown: 0, HorizontalRGB: 1, HorizontalBGR: 2, VerticalRGB : 3,