mirror of https://github.com/xemu-project/xemu.git
input: mouse: add graphic_rotate support
Transform absolute mouse events according to graphic_rotate. Legacy input code does it for both absolute and relative events, but the logic is broken for relative coordinates, so this is most likely not used anyway. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
43579403a3
commit
d3535431e8
31
ui/input.c
31
ui/input.c
|
@ -50,6 +50,31 @@ qemu_input_find_handler(uint32_t mask)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void qemu_input_transform_abs_rotate(InputEvent *evt)
|
||||||
|
{
|
||||||
|
switch (graphic_rotate) {
|
||||||
|
case 90:
|
||||||
|
if (evt->abs->axis == INPUT_AXIS_X) {
|
||||||
|
evt->abs->axis = INPUT_AXIS_Y;
|
||||||
|
} else if (evt->abs->axis == INPUT_AXIS_Y) {
|
||||||
|
evt->abs->axis = INPUT_AXIS_X;
|
||||||
|
evt->abs->value = INPUT_EVENT_ABS_SIZE - 1 - evt->abs->value;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 180:
|
||||||
|
evt->abs->value = INPUT_EVENT_ABS_SIZE - 1 - evt->abs->value;
|
||||||
|
break;
|
||||||
|
case 270:
|
||||||
|
if (evt->abs->axis == INPUT_AXIS_X) {
|
||||||
|
evt->abs->axis = INPUT_AXIS_Y;
|
||||||
|
evt->abs->value = INPUT_EVENT_ABS_SIZE - 1 - evt->abs->value;
|
||||||
|
} else if (evt->abs->axis == INPUT_AXIS_Y) {
|
||||||
|
evt->abs->axis = INPUT_AXIS_X;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void qemu_input_event_send(QemuConsole *src, InputEvent *evt)
|
void qemu_input_event_send(QemuConsole *src, InputEvent *evt)
|
||||||
{
|
{
|
||||||
QemuInputHandlerState *s;
|
QemuInputHandlerState *s;
|
||||||
|
@ -58,6 +83,12 @@ void qemu_input_event_send(QemuConsole *src, InputEvent *evt)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* pre processing */
|
||||||
|
if (graphic_rotate && (evt->kind == INPUT_EVENT_KIND_ABS)) {
|
||||||
|
qemu_input_transform_abs_rotate(evt);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* send event */
|
||||||
s = qemu_input_find_handler(1 << evt->kind);
|
s = qemu_input_find_handler(1 << evt->kind);
|
||||||
s->handler->event(s->dev, src, evt);
|
s->handler->event(s->dev, src, evt);
|
||||||
s->events++;
|
s->events++;
|
||||||
|
|
Loading…
Reference in New Issue