fix Render.SetPictureFilter

This commit is contained in:
Andrey Sidorov 2015-10-23 10:41:30 +11:00
parent 51b03c5173
commit 31785d9a5b

View file

@ -152,10 +152,10 @@ exports.requireExt = function(display, callback)
}
ext.FreePicture = function(pid) {
X.seq_num++;
X.pack_stream.pack('CCSL', [ext.majorOpcode, 7, 2, pid]);
X.pack_stream.flush();
}
X.seq_num++;
X.pack_stream.pack('CCSL', [ext.majorOpcode, 7, 2, pid]);
X.pack_stream.flush();
};
function floatToFix(f)
{
@ -163,23 +163,42 @@ exports.requireExt = function(display, callback)
}
// see example of blur filter here: https://github.com/richoH/rxvt-unicode/blob/master/src/background.C
// TODO: not ready yet.
ext.SetPictureFilter = function(pid, name, filterParams)
{
if (filterParams === 0)
filterParams = [0];
if (!filterParams)
filterParams = [];
if (!Array.isArray(filterParams))
filterParams = [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));
var reqLen = 2;
var format = 'CCSLSxxp';
var params = [ext.majorOpcode, 30, reqLen, pid, name.length, name + '\0'];
reqLen += xutil.padded_length(name.length+3)/4 + filterParams.length;
if (name == 'nearest' || name == 'bilinear' || name == 'fast' || name == 'good' || name == 'best') {
if (filterParams.length != 0) {
throw 'Render.SetPictureFilter: "' + name + '" - unexpected parameters for filters";
}
} else if (name == 'convolution' || ) {
if (filterParams.length < 2 || filterParams[0]*filterParams[1] !== filterParams.length + 2) {
throw 'Render.SetPictureFilter: "convolution" - incorrect matrix dimensions. Must be flat array [ w, h, elem1, elem2, ... ]';
}
for (var i=0; i < filterParams.length; ++i) {
format += 'L';
params.push(floatToFix(filterParams[i]));
}
} else if (name == 'binomial' || name == 'gaussian') {
if (filterParams.length < 2) {
throw 'Render.SetPictureFilter: "' + name + '" - incorrect number of parameters, must be exactly 1 number, instead got: ' + filterParams;
}
format += 'L';
params.push(floatToFix(filterParams[0]));
} else {
throw 'Not implemented filter ' + name;
throw 'Render.SetPictureFilter: unknown filter "' + name + '"';
}
*/
params[2] = reqLen;
X.pack_stream.pack(format, params);
X.pack_stream.flush();