Add option to change X11 scaling filter

This commit is contained in:
kevin 2019-06-27 08:12:57 -04:00
parent ed7ba36704
commit 44ec8d98cf
4 changed files with 27 additions and 4 deletions

View File

@ -8,6 +8,7 @@ hgx11::hgx11(QHash<QString, QString> opts)
unsigned short port = 19444;
unsigned short scale = 8;
unsigned short frameskip = 0;
const char * filter = FilterNearest;
QString redAdjust = "", greenAdjust = "", blueAdjust = "";
QString temperature = "", threshold = "", transform = "";
QHashIterator<QString, QString> i(opts);
@ -37,6 +38,21 @@ hgx11::hgx11(QHash<QString, QString> opts)
threshold = _parseColorArr(i.value(), 0);
} else if ((i.key() == "l" || i.key() == "transform") && _parseColorArr(i.value(), 0) != "") {
transform = i.value();
} else if ((i.key() == "x" || i.key() == "filter") && i.value().toInt()) {
switch (i.value().toInt()) {
case 1:
filter = FilterBilinear;
break;
case 2:
filter = FilterFast;
break;
case 3:
filter = FilterGood;
break;
case 4:
filter = FilterBest;
break;
}
}
}
@ -46,7 +62,7 @@ hgx11::hgx11(QHash<QString, QString> opts)
return;
}
_grabber_p = new hgx11grab(_display_p, scale);
_grabber_p = new hgx11grab(_display_p, scale, filter);
_hclient_p = new hgx11net(addr, port);
_damage_p = new hgx11damage(&_grabbed_m, frameskip);
if (_inactiveXss_m) {

View File

@ -2,8 +2,9 @@
// public
hgx11grab::hgx11grab(Display *display, unsigned short scaleDivisor)
hgx11grab::hgx11grab(Display *display, unsigned short scaleDivisor, const char *filter)
{
_filter_p = filter;
_display_p = display;
if (!XShmQueryExtension(_display_p)) {
@ -140,7 +141,7 @@ void hgx11grab::grabFrame()
_srcPicture_m = XRenderCreatePicture(_display_p, _window_m, _srcFormat_p, CPRepeat, &_pictAttr_m);
_dstPicture_m = XRenderCreatePicture(_display_p, _pixmap_m, _dstFormat_p, CPRepeat, &_pictAttr_m);
XRenderSetPictureFilter(_display_p, _srcPicture_m, FilterFast, nullptr, 0);
XRenderSetPictureFilter(_display_p, _srcPicture_m, _filter_p, nullptr, 0);
XRenderSetPictureTransform(_display_p, _srcPicture_m, &_mTransform_m);
XRenderComposite(

View File

@ -14,7 +14,7 @@ class hgx11grab : public QObject
public:
QString imgdata_m;
hgx11grab(Display *, unsigned short);
hgx11grab(Display *, unsigned short, const char *);
~hgx11grab();
int getDest_width() const;
@ -40,6 +40,7 @@ private:
int _imgSize_m;
double _scale_m;
bool _freed_m = 0;
const char *_filter_p;
bool _getWinAttr();
void _freeResources();

View File

@ -86,6 +86,11 @@ int main(int argc, char *argv[])
QCoreApplication::translate("main", "adjusts luminance / saturation")
);
parser.addOption(transform);
QCommandLineOption filter(QStringList() << "x" << "scalefilter",
QCoreApplication::translate("main", "X11 scaling filter to use (see X11's render.h). 0 nearest (default), 1 bilinear, 2 fast, 3 good, 4 best"),
QCoreApplication::translate("main", "X11 scaling filter")
);
parser.addOption(filter);
parser.process(*qapp);
if (!parser.isSet("address")) {