mirror of
https://github.com/moonlight-stream/moonlight-embedded.git
synced 2026-02-16 10:30:47 +00:00
Applied display rotation to mouse movement in evdev
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user