Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> --- tools/xsetwacom.c | 62 +++++++++++++++++++++++++++++++--------------------- 1 files changed, 37 insertions(+), 25 deletions(-)
Changes to v1: - use width/height, not x/y for width and height diff --git a/tools/xsetwacom.c b/tools/xsetwacom.c index 47518ee..c0cf707 100644 --- a/tools/xsetwacom.c +++ b/tools/xsetwacom.c @@ -1963,6 +1963,41 @@ static void _set_matrix_prop(Display *dpy, XDevice *dev, const float fmatrix[9]) XFlush(dpy); } +/** + * Set the matrix for the given device for the screen defined by offset and + * dimensions. + */ +static void _set_matrix(Display *dpy, XDevice *dev, + int offset_x, int offset_y, + int screen_width, int screen_height) +{ + int width = DisplayWidth(dpy, DefaultScreen(dpy)); + int height = DisplayHeight(dpy, DefaultScreen(dpy)); + + /* offset */ + float x = 1.0 * offset_x/width; + float y = 1.0 * offset_y/height; + + /* mapping */ + float w = 1.0 * screen_width/width; + float h = 1.0 * screen_height/height; + + float matrix[9] = { 1, 0, 0, + 0, 1, 0, + 0, 0, 1}; + matrix[2] = x; + matrix[5] = y; + matrix[0] = w; + matrix[4] = h; + + TRACE("Transformation matrix:\n"); + TRACE(" [ %f %f %f ]\n", matrix[0], matrix[1], matrix[2]); + TRACE(" [ %f %f %f ]\n", matrix[3], matrix[4], matrix[5]); + TRACE(" [ %f %f %f ]\n", matrix[6], matrix[7], matrix[8]); + + _set_matrix_prop(dpy, dev, matrix); +} + static void set_output_xrandr(Display *dpy, XDevice *dev, param_t *param, int argc, char **argv) { int min, maj; @@ -2014,31 +2049,8 @@ static void set_output_xrandr(Display *dpy, XDevice *dev, param_t *param, int ar /* crtc holds our screen info, need to compare to actual screen size */ if (found) { - int width = DisplayWidth(dpy, DefaultScreen(dpy)); - int height = DisplayHeight(dpy, DefaultScreen(dpy)); - - /* offset */ - float x = 1.0 * crtc_info->x/width; - float y = 1.0 * crtc_info->y/height; - - /* mapping */ - float w = 1.0 * crtc_info->width/width; - float h = 1.0 * crtc_info->height/height; - - float matrix[9] = { 1, 0, 0, - 0, 1, 0, - 0, 0, 1}; - matrix[2] = x; - matrix[5] = y; - matrix[0] = w; - matrix[4] = h; - - TRACE("Transformation matrix:\n"); - TRACE(" [ %f %f %f ]\n", matrix[0], matrix[1], matrix[2]); - TRACE(" [ %f %f %f ]\n", matrix[3], matrix[4], matrix[5]); - TRACE(" [ %f %f %f ]\n", matrix[6], matrix[7], matrix[8]); - - _set_matrix_prop(dpy, dev, matrix); + _set_matrix(dpy, dev, crtc_info->x, crtc_info->y, + crtc_info->width, crtc_info->height); } else printf("Unable to find output '%s'. " "Output may not be connected.\n", output_name); -- 1.7.5.4 ------------------------------------------------------------------------------ Simplify data backup and recovery for your virtual environment with vRanger. Installation's a snap, and flexible recovery options mean your data is safe, secure and there when you need it. Data protection magic? Nope - It's vRanger. Get your free trial download today. http://p.sf.net/sfu/quest-sfdev2dev _______________________________________________ Linuxwacom-devel mailing list Linuxwacom-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel