diff --git a/js/x11/examples/smoketest/trapezoids.js b/js/x11/examples/smoketest/trapezoids.js new file mode 100644 index 0000000..7361629 --- /dev/null +++ b/js/x11/examples/smoketest/trapezoids.js @@ -0,0 +1,125 @@ +var _ = require('underscore'); +var x11 = require('../../lib'); +var Exposure = x11.eventMask.Exposure; +var PointerMotion = x11.eventMask.PointerMotion; +var ButtonPress = x11.eventMask.ButtonPress; + +var draw; + +var useConvo3 = true; + +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|ButtonPress + } + ); + X.MapWindow(wid); + + + X.require('render', function(err, Render) { + + Render.QueryFilters(console.log); + + 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); + + var pixBuff = X.AllocID(); + X.CreatePixmap(pixBuff, wid, 24, 600, 600); + var pictBuff = X.AllocID(); + Render.CreatePicture(pictBuff, pixBuff, Render.rgb24); + + var convo5 = [ 5, 5, 0.0030, 0.0133, 0.0219, 0.0133, 0.0030, + 0.0133, 0.0596, 0.0983, 0.0596, 0.0133, + 0.0219, 0.0983, 0.1621, 0.0983, 0.0219, + 0.0133, 0.0596, 0.0983, 0.0596, 0.0133, + 0.0030, 0.0133, 0.0219, 0.0133, 0.0030]; + var convo3 = [3, 3, 0.01, 0.08, 0.01, 0.08, 0.64, 0.08, 0.01, 0.08, 0.01]; + + var convo5 = [21, 21].concat(require('./blur-convolution')(21, 11)); + + //Render.SetPictureFilter(pictBuff, 'convolution', convo3); + //Render.SetPictureFilter(pictTraps, 'convolution', convo3); + //Render.SetPictureFilter(pictBuff, 'bilinear', []); + Render.SetPictureFilter(pictBuff, 'best', []); + + draw1 = function(x, y) { + console.log('draw 1', x, y); + var r = 3 + 2*Math.floor(x / 100); + var convo = [r, r].concat(require('./blur-convolution')(r, r)); + Render.SetPictureFilter(pictBuff, 'convolution', convo); + + var a = (x-400)/500; + var m = [ + Math.cos(a), Math.sin(a), 0, + -Math.sin(a), Math.cos(a), 0, + 0, 0, 1 + ]; + // Render.SetPictureTransform(pictTraps, m) + + var r, g, b; + + // fill window + r = 1; g = 1; b = 1; a = 0.5; + Render.FillRectangles(1, pictBuff, [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, pictBuff, 0, 0, 0, 0, 0, 0, 800, 600); + Render.Composite(Render.PictOp.Over, pictBuff, 0, pictWin, 0, 0, 0, 0, 0, 0, 800, 600); + + }; + + draw = function(x, y) { + var f = _.debounce(function() { + draw1(x, y); + }, 100); + f(); + }; + + }); + +}).on('error', function(err) { + console.log(err); +}).on('event', function(ev) { + //console.log(ev); + if (ev.name == 'MotionNotify') { + draw(ev.x, ev.y); + } else if (ev.name == 'ButtonPress') { + useConvo3 = !useConvo3; + draw(ev.x, ev.y); + //console.log(ev); + } +});