Applied display rotation to mouse movement in evdev

This commit is contained in:
Tom
2020-04-17 16:50:04 -06:00
parent aae24557f9
commit b22b07e5a0
5 changed files with 27 additions and 10 deletions

View File

@@ -57,6 +57,7 @@ struct input_device {
struct libevdev *dev;
bool is_keyboard;
bool is_mouse;
int rotate;
struct mapping* map;
int key_map[KEY_MAX];
int abs_map[ABS_MAX];
@@ -177,7 +178,20 @@ static bool evdev_handle_event(struct input_event *ev, struct input_device *dev)
switch (ev->type) {
case EV_SYN:
if (dev->mouseDeltaX != 0 || dev->mouseDeltaY != 0) {
LiSendMouseMoveEvent(dev->mouseDeltaX, dev->mouseDeltaY);
switch (dev->rotate) {
case 90:
LiSendMouseMoveEvent(dev->mouseDeltaY, -dev->mouseDeltaX);
break;
case 180:
LiSendMouseMoveEvent(-dev->mouseDeltaX, -dev->mouseDeltaY);
break;
case 270:
LiSendMouseMoveEvent(-dev->mouseDeltaY, dev->mouseDeltaX);
break;
default:
LiSendMouseMoveEvent(dev->mouseDeltaX, dev->mouseDeltaY);
break;
}
dev->mouseDeltaX = 0;
dev->mouseDeltaY = 0;
}
@@ -455,7 +469,7 @@ static int evdev_handle(int fd) {
return LOOP_OK;
}
void evdev_create(const char* device, struct mapping* mappings, bool verbose) {
void evdev_create(const char* device, struct mapping* mappings, bool verbose, int rotate) {
int fd = open(device, O_RDWR|O_NONBLOCK);
if (fd <= 0) {
fprintf(stderr, "Failed to open device %s\n", device);
@@ -535,6 +549,7 @@ void evdev_create(const char* device, struct mapping* mappings, bool verbose) {
memset(&devices[dev].abs_map, -2, sizeof(devices[dev].abs_map));
devices[dev].is_keyboard = is_keyboard;
devices[dev].is_mouse = is_mouse;
devices[dev].rotate = rotate;
int nbuttons = 0;
for (int i = BTN_JOYSTICK; i < KEY_MAX; ++i) {