From 520be559e8b9741e519f67a0e524f401366b68bc Mon Sep 17 00:00:00 2001 From: Michael J M Thomson Date: Fri, 29 May 2015 11:17:34 +1000 Subject: [PATCH] Add function Rectangles. Fix function Mask --- lib/ext/shape.js | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/lib/ext/shape.js b/lib/ext/shape.js index f328c11..e9df1aa 100644 --- a/lib/ext/shape.js +++ b/lib/ext/shape.js @@ -21,7 +21,7 @@ exports.requireExt = function(display, callback) ext.Kind = { Bounding: 0, - Clip: 1, + Clip: 1, Input: 2 }; @@ -31,12 +31,19 @@ exports.requireExt = function(display, callback) Intersect: 2, Subtract: 3, Invert: 4 - } + }; + + ext.Ordering = { + Unsorted: 0, + YSorted: 1, + YXSorted: 2, + YXBanded: 3 + }; ext.QueryVersion = function(cb) { X.seq_num++; - captureStack(); +// captureStack(); X.pack_stream.pack('CCSLL', [ext.majorOpcode, 0, 1]); X.replies[X.seq_num] = [ function(buf, opt) { @@ -48,18 +55,36 @@ exports.requireExt = function(display, callback) 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 ) { X.seq_num++; - captureStack(); - X.pack_stream.pack('CCSCCxxLssL', [ext.majorOpcode, 2, 5, op, kind, x, y, bitmap]); +// captureStack(); + X.pack_stream.pack('CCSCCxxLssL', [ext.majorOpcode, 2, 5, op, kind, window, x, y, bitmap]); X.pack_stream.flush(); } ext.SelectInput = function( window, enable ) { X.seq_num++; - captureStack(); +// captureStack(); X.pack_stream.pack('CCSLCxxx', [ext.majorOpcode, 6, 3, window, enable ]); X.pack_stream.flush(); } @@ -67,7 +92,7 @@ exports.requireExt = function(display, callback) ext.InputSelected = function( window, cb ) { X.seq_num++; - captureStack(); +// captureStack(); X.pack_stream.pack('CCSL', [ext.majorOpcode, 7, 2, window ]); X.replies[X.seq_num] = [ function(buf, opt) {