Hi,

Series looks good to me, and is:

Reviewed-by: Hans de Goede <[email protected]>

Regards,

Hans


On 06/19/2014 05:45 AM, Peter Hutterer wrote:
> We'll need that later for conversion to mm.
> 
> Signed-off-by: Peter Hutterer <[email protected]>
> ---
>  src/evdev-mt-touchpad-buttons.c | 20 +++++++++++++-------
>  src/evdev-mt-touchpad.c         |  6 ++++--
>  src/evdev.c                     | 25 +++++++++++++------------
>  src/evdev.h                     |  2 +-
>  4 files changed, 31 insertions(+), 22 deletions(-)
> 
> diff --git a/src/evdev-mt-touchpad-buttons.c b/src/evdev-mt-touchpad-buttons.c
> index ce48ed0..45d5d70 100644
> --- a/src/evdev-mt-touchpad-buttons.c
> +++ b/src/evdev-mt-touchpad-buttons.c
> @@ -565,6 +565,7 @@ tp_init_buttons(struct tp_dispatch *tp,
>       struct tp_touch *t;
>       int width, height;
>       double diagonal;
> +     const struct input_absinfo *absinfo_x, *absinfo_y;
>  
>       tp->buttons.is_clickpad = libevdev_has_property(device->evdev,
>                                                       INPUT_PROP_BUTTONPAD);
> @@ -580,8 +581,11 @@ tp_init_buttons(struct tp_dispatch *tp,
>                       log_bug_kernel("non clickpad without right button?\n");
>       }
>  
> -     width = abs(device->abs.max_x - device->abs.min_x);
> -     height = abs(device->abs.max_y - device->abs.min_y);
> +     absinfo_x = device->abs.absinfo_x;
> +     absinfo_y = device->abs.absinfo_y;
> +
> +     width = abs(absinfo_x->maximum - absinfo_x->minimum);
> +     height = abs(absinfo_y->maximum - absinfo_y->minimum);
>       diagonal = sqrt(width*width + height*height);
>  
>       tp->buttons.motion_dist = diagonal * DEFAULT_BUTTON_MOTION_THRESHOLD;
> @@ -590,13 +594,15 @@ tp_init_buttons(struct tp_dispatch *tp,
>               tp->buttons.use_clickfinger = true;
>  
>       if (tp->buttons.is_clickpad && !tp->buttons.use_clickfinger) {
> -             tp->buttons.bottom_area.top_edge = height * .8 + 
> device->abs.min_y;
> -             tp->buttons.bottom_area.rightbutton_left_edge = width/2 + 
> device->abs.min_x;
> +             int xoffset = absinfo_x->minimum,
> +                 yoffset = absinfo_y->minimum;
> +             tp->buttons.bottom_area.top_edge = height * .8 + yoffset;
> +             tp->buttons.bottom_area.rightbutton_left_edge = width/2 + 
> xoffset;
>  
>               if (tp->buttons.has_topbuttons) {
> -                     tp->buttons.top_area.bottom_edge = height * .08 + 
> device->abs.min_y;
> -                     tp->buttons.top_area.rightbutton_left_edge = width * 
> .58 + device->abs.min_x;
> -                     tp->buttons.top_area.leftbutton_right_edge = width * 
> .42 + device->abs.min_x;
> +                     tp->buttons.top_area.bottom_edge = height * .08 + 
> yoffset;
> +                     tp->buttons.top_area.rightbutton_left_edge = width * 
> .58 + xoffset;
> +                     tp->buttons.top_area.leftbutton_right_edge = width * 
> .42 + xoffset;
>               } else {
>                       tp->buttons.top_area.bottom_edge = INT_MIN;
>               }
> diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
> index 92e0651..787afa4 100644
> --- a/src/evdev-mt-touchpad.c
> +++ b/src/evdev-mt-touchpad.c
> @@ -750,8 +750,10 @@ tp_init(struct tp_dispatch *tp,
>       if (tp_init_slots(tp, device) != 0)
>               return -1;
>  
> -     width = abs(device->abs.max_x - device->abs.min_x);
> -     height = abs(device->abs.max_y - device->abs.min_y);
> +     width = abs(device->abs.absinfo_x->maximum -
> +                 device->abs.absinfo_x->minimum);
> +     height = abs(device->abs.absinfo_y->maximum -
> +                  device->abs.absinfo_y->minimum);
>       diagonal = sqrt(width*width + height*height);
>  
>       tp->hysteresis.margin_x =
> diff --git a/src/evdev.c b/src/evdev.c
> index 51ad5e3..907d18e 100644
> --- a/src/evdev.c
> +++ b/src/evdev.c
> @@ -89,13 +89,19 @@ transform_absolute(struct evdev_device *device, int32_t 
> *x, int32_t *y)
>       }
>  }
>  
> +static inline double
> +scale_axis(const struct input_absinfo *absinfo, double val, double to_range)
> +{
> +     return (val - absinfo->minimum) * to_range /
> +             (absinfo->maximum - absinfo->minimum + 1);
> +}
> +
>  double
>  evdev_device_transform_x(struct evdev_device *device,
>                        double x,
>                        uint32_t width)
>  {
> -     return (x - device->abs.min_x) * width /
> -             (device->abs.max_x - device->abs.min_x + 1);
> +     return scale_axis(device->abs.absinfo_x, x, width);
>  }
>  
>  double
> @@ -103,8 +109,7 @@ evdev_device_transform_y(struct evdev_device *device,
>                        double y,
>                        uint32_t height)
>  {
> -     return (y - device->abs.min_y) * height /
> -             (device->abs.max_y - device->abs.min_y + 1);
> +     return scale_axis(device->abs.absinfo_y, y, height);
>  }
>  
>  static void
> @@ -606,13 +611,11 @@ evdev_configure_device(struct evdev_device *device)
>       if (libevdev_has_event_type(evdev, EV_ABS)) {
>  
>               if ((absinfo = libevdev_get_abs_info(evdev, ABS_X))) {
> -                     device->abs.min_x = absinfo->minimum;
> -                     device->abs.max_x = absinfo->maximum;
> +                     device->abs.absinfo_x = absinfo;
>                       has_abs = 1;
>               }
>               if ((absinfo = libevdev_get_abs_info(evdev, ABS_Y))) {
> -                     device->abs.min_y = absinfo->minimum;
> -                     device->abs.max_y = absinfo->maximum;
> +                     device->abs.absinfo_y = absinfo;
>                       has_abs = 1;
>               }
>                  /* We only handle the slotted Protocol B in weston.
> @@ -621,11 +624,9 @@ evdev_configure_device(struct evdev_device *device)
>               if (libevdev_has_event_code(evdev, EV_ABS, ABS_MT_POSITION_X) &&
>                   libevdev_has_event_code(evdev, EV_ABS, ABS_MT_POSITION_Y)) {
>                       absinfo = libevdev_get_abs_info(evdev, 
> ABS_MT_POSITION_X);
> -                     device->abs.min_x = absinfo->minimum;
> -                     device->abs.max_x = absinfo->maximum;
> +                     device->abs.absinfo_x = absinfo;
>                       absinfo = libevdev_get_abs_info(evdev, 
> ABS_MT_POSITION_Y);
> -                     device->abs.min_y = absinfo->minimum;
> -                     device->abs.max_y = absinfo->maximum;
> +                     device->abs.absinfo_y = absinfo;
>                       device->is_mt = 1;
>                       has_touch = 1;
>                       has_mt = 1;
> diff --git a/src/evdev.h b/src/evdev.h
> index d057010..03b6742 100644
> --- a/src/evdev.h
> +++ b/src/evdev.h
> @@ -66,7 +66,7 @@ struct evdev_device {
>       const char *devname;
>       int fd;
>       struct {
> -             int min_x, max_x, min_y, max_y;
> +             const struct input_absinfo *absinfo_x, *absinfo_y;
>               int32_t x, y;
>  
>               int32_t seat_slot;
> 
_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to