[PATCH] xfree86: expose Option "TransformationMatrix"
Simon Thum
simon.thum at gmx.de
Sat Sep 10 04:20:30 PDT 2011
On 09/06/2011 02:18 AM, Peter Hutterer wrote:
> Recent changes to the server change the default absolute input device
> behaviour on zaphods to span the whole desktop too. Since these setups
> usually use an xorg.conf, allow the transformation matrix to be specified in
> the config as well.
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
If only because that initialization path is put to use,
Reviewed-by: Simon Thum <simon.thum at gmx.de>
> ---
> hw/xfree86/common/xf86Xinput.c | 29 +++++++++++++++++++++++++++++
> hw/xfree86/man/xorg.conf.man | 11 +++++++++++
> 2 files changed, 40 insertions(+), 0 deletions(-)
>
> diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
> index a45ac93..560dfc9 100644
> --- a/hw/xfree86/common/xf86Xinput.c
> +++ b/hw/xfree86/common/xf86Xinput.c
> @@ -266,6 +266,34 @@ ApplyAccelerationSettings(DeviceIntPtr dev){
> }
> }
>
> +static void
> +ApplyTransformationMatrix(DeviceIntPtr dev)
> +{
> + InputInfoPtr pInfo = (InputInfoPtr)dev->public.devicePrivate;
> + char *str;
> + int rc;
> + float matrix[9] = {0};
> +
> + if (!dev->valuator)
> + return;
> +
> + str = xf86SetStrOption(pInfo->options, "TransformationMatrix", NULL);
> + if (!str)
> + return;
> +
> + rc = sscanf(str, "%f %f %f %f %f %f %f %f %f", &matrix[0], &matrix[1], &matrix[2],
> + &matrix[3], &matrix[4], &matrix[5], &matrix[6], &matrix[7], &matrix[8]);
> + if (rc != 9) {
> + xf86Msg(X_ERROR, "%s: invalid format for transformation matrix. Ignoring configuration.\n",
> + pInfo->name);
> + return;
> + }
> +
> + XIChangeDeviceProperty(dev, XIGetKnownProperty(XI_PROP_TRANSFORM),
> + XIGetKnownProperty(XATOM_FLOAT), 32,
> + PropModeReplace, 9, matrix, FALSE);
> +}
> +
> /***********************************************************************
> *
> * xf86ProcessCommonOptions --
> @@ -755,6 +783,7 @@ xf86DeleteInput(InputInfoPtr pInp, int flags)
> static int
> xf86InputDevicePostInit(DeviceIntPtr dev) {
> ApplyAccelerationSettings(dev);
> + ApplyTransformationMatrix(dev);
> return Success;
> }
>
> diff --git a/hw/xfree86/man/xorg.conf.man b/hw/xfree86/man/xorg.conf.man
> index 6774dbc..6aae650 100644
> --- a/hw/xfree86/man/xorg.conf.man
> +++ b/hw/xfree86/man/xorg.conf.man
> @@ -948,6 +948,17 @@ is equivalent to
>
> This option controls the startup behavior only, a device
> may be reattached or set floating at runtime.
> +.TP 7
> +.BI "Option \*qTransformationMatrix\*q \*qa b c d e f g h i\*q
> +Specifies the 3x3 transformation matrix for absolute input devices. The
> +input device will be bound to the area given in the matrix. In most
> +configurations, "a" and "e" specify the width and height of the area the
> +device is bound to, and "c" and "f" specify the x and y offset of the area.
> +The value range is 0 to 1, where 1 represents the width or height of all
> +root windows together, 0.5 represents half the area, etc. The values
> +represent a 3x3 matrix, with the first, second and third group of three
> +values representing the first, second and third row of the matrix,
> +respectively. The identity matrix is "1 0 0 0 1 0 0 0 1".
> .SS POINTER ACCELERATION
> For pointing devices, the following options control how the pointer
> is accelerated or decelerated with respect to physical device motion. Most of
More information about the xorg-devel
mailing list