mirror of https://gitee.com/openkylin/qemu.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;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
QemuInputHandlerState *s;
|
||||
|
@ -58,6 +83,12 @@ void qemu_input_event_send(QemuConsole *src, InputEvent *evt)
|
|||
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->handler->event(s->dev, src, evt);
|
||||
s->events++;
|
||||
|
|
Loading…
Reference in New Issue