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
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;
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;
}
}
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;
}
}
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)) {