From a157fc11a9ce3788c3c7530959f85fda4a603f4d Mon Sep 17 00:00:00 2001 From: Tiago Vignatti Date: Mon, 21 Nov 2011 16:39:55 +0200 Subject: [PATCH] evdev: use a separate struct for abs information Signed-off-by: Tiago Vignatti --- compositor/evdev.c | 52 ++++++++++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/compositor/evdev.c b/compositor/evdev.c index 5138c09..48e8d7c 100644 --- a/compositor/evdev.c +++ b/compositor/evdev.c @@ -44,8 +44,11 @@ struct evdev_input_device { char *devnode; int tool; int fd; - int min_x, max_x, min_y, max_y; - int is_touchpad, old_x_value, old_y_value, reset_x_value, reset_y_value; + struct { + int min_x, max_x, min_y, max_y; + int old_x, old_y, reset_x, reset_y; + } abs; + int is_touchpad; }; static inline void @@ -67,8 +70,8 @@ evdev_process_key(struct evdev_input_device *device, device->tool = e->value ? e->code : 0; if (device->is_touchpad) { - device->reset_x_value = 1; - device->reset_y_value = 1; + device->abs.reset_x = 1; + device->abs.reset_y = 1; } break; @@ -107,13 +110,13 @@ evdev_process_absolute_motion(struct evdev_input_device *device, switch (e->code) { case ABS_X: *absolute_event = device->tool; - *x = (e->value - device->min_x) * screen_width / - (device->max_x - device->min_x) + device->output->x; + *x = (e->value - device->abs.min_x) * screen_width / + (device->abs.max_x - device->abs.min_x) + device->output->x; break; case ABS_Y: *absolute_event = device->tool; - *y = (e->value - device->min_y) * screen_height / - (device->max_y - device->min_y) + device->output->y; + *y = (e->value - device->abs.min_y) * screen_height / + (device->abs.max_y - device->abs.min_y) + device->output->y; break; } } @@ -127,25 +130,25 @@ evdev_process_absolute_motion_touchpad(struct evdev_input_device *device, switch (e->code) { case ABS_X: - e->value -= device->min_x; - if (device->reset_x_value) - device->reset_x_value = 0; + e->value -= device->abs.min_x; + if (device->abs.reset_x) + device->abs.reset_x = 0; else { - *dx = (e->value - device->old_x_value) * touchpad_speed / - (device->max_x - device->min_x); + *dx = (e->value - device->abs.old_x) * touchpad_speed / + (device->abs.max_x - device->abs.min_x); } - device->old_x_value = e->value; + device->abs.old_x = e->value; break; case ABS_Y: - e->value -= device->min_y; - if (device->reset_y_value) - device->reset_y_value = 0; + e->value -= device->abs.min_y; + if (device->abs.reset_y) + device->abs.reset_y = 0; else { - *dy = (e->value - device->old_y_value) * touchpad_speed / + *dy = (e->value - device->abs.old_y) * touchpad_speed / /* maybe use x size here to have the same scale? */ - (device->max_y - device->min_y); + (device->abs.max_y - device->abs.min_y); } - device->old_y_value = e->value; + device->abs.old_y = e->value; break; } } @@ -287,17 +290,18 @@ evdev_configure_device(struct evdev_input_device *device) ioctl(device->fd, EVIOCGBIT(0, sizeof(ev_bits)), ev_bits); if (TEST_BIT(ev_bits, EV_ABS)) { has_abs = 1; + ioctl(device->fd, EVIOCGBIT(EV_ABS, sizeof(abs_bits)), abs_bits); if (TEST_BIT(abs_bits, ABS_X)) { ioctl(device->fd, EVIOCGABS(ABS_X), &absinfo); - device->min_x = absinfo.minimum; - device->max_x = absinfo.maximum; + device->abs.min_x = absinfo.minimum; + device->abs.max_x = absinfo.maximum; } if (TEST_BIT(abs_bits, ABS_Y)) { ioctl(device->fd, EVIOCGABS(ABS_Y), &absinfo); - device->min_y = absinfo.minimum; - device->max_y = absinfo.maximum; + device->abs.min_y = absinfo.minimum; + device->abs.max_y = absinfo.maximum; } } if (TEST_BIT(ev_bits, EV_KEY)) { -- 2.7.4