[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 24/42] input: mouse: switch sdl ui to new core
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PATCH v2 24/42] input: mouse: switch sdl ui to new core |
Date: |
Wed, 22 Jan 2014 17:20:29 +0100 |
Signed-off-by: Gerd Hoffmann <address@hidden>
---
ui/sdl.c | 84 ++++++++++++++++++++++++++++++----------------------------------
1 file changed, 39 insertions(+), 45 deletions(-)
diff --git a/ui/sdl.c b/ui/sdl.c
index c3b8036..c1a16be 100644
--- a/ui/sdl.c
+++ b/ui/sdl.c
@@ -353,7 +353,7 @@ static void sdl_hide_cursor(void)
if (!cursor_hide)
return;
- if (kbd_mouse_is_absolute()) {
+ if (qemu_input_is_absolute()) {
SDL_ShowCursor(1);
SDL_SetCursor(sdl_cursor_hidden);
} else {
@@ -366,10 +366,10 @@ static void sdl_show_cursor(void)
if (!cursor_hide)
return;
- if (!kbd_mouse_is_absolute() || !qemu_console_is_graphic(NULL)) {
+ if (!qemu_input_is_absolute() || !qemu_console_is_graphic(NULL)) {
SDL_ShowCursor(1);
if (guest_cursor &&
- (gui_grab || kbd_mouse_is_absolute() || absolute_enabled))
+ (gui_grab || qemu_input_is_absolute() || absolute_enabled))
SDL_SetCursor(guest_sprite);
else
SDL_SetCursor(sdl_cursor_normal);
@@ -388,8 +388,9 @@ static void sdl_grab_start(void)
}
if (guest_cursor) {
SDL_SetCursor(guest_sprite);
- if (!kbd_mouse_is_absolute() && !absolute_enabled)
+ if (!qemu_input_is_absolute() && !absolute_enabled) {
SDL_WarpMouse(guest_x, guest_y);
+ }
} else
sdl_hide_cursor();
SDL_WM_GrabInput(SDL_GRAB_ON);
@@ -418,7 +419,7 @@ static void absolute_mouse_grab(void)
static void sdl_mouse_mode_change(Notifier *notify, void *data)
{
- if (kbd_mouse_is_absolute()) {
+ if (qemu_input_is_absolute()) {
if (!absolute_enabled) {
absolute_enabled = 1;
if (qemu_console_is_graphic(NULL)) {
@@ -433,33 +434,36 @@ static void sdl_mouse_mode_change(Notifier *notify, void
*data)
}
}
-static void sdl_send_mouse_event(int dx, int dy, int dz, int x, int y, int
state)
+static void sdl_send_mouse_event(int dx, int dy, int x, int y, int state)
{
- int buttons = 0;
-
- if (state & SDL_BUTTON(SDL_BUTTON_LEFT)) {
- buttons |= MOUSE_EVENT_LBUTTON;
- }
- if (state & SDL_BUTTON(SDL_BUTTON_RIGHT)) {
- buttons |= MOUSE_EVENT_RBUTTON;
- }
- if (state & SDL_BUTTON(SDL_BUTTON_MIDDLE)) {
- buttons |= MOUSE_EVENT_MBUTTON;
- }
-
- if (kbd_mouse_is_absolute()) {
- dx = x * 0x7FFF / (real_screen->w - 1);
- dy = y * 0x7FFF / (real_screen->h - 1);
+ static uint32_t bmap[INPUT_BUTTON_MAX] = {
+ [INPUT_BUTTON_LEFT] = SDL_BUTTON(SDL_BUTTON_LEFT),
+ [INPUT_BUTTON_MIDDLE] = SDL_BUTTON(SDL_BUTTON_MIDDLE),
+ [INPUT_BUTTON_RIGHT] = SDL_BUTTON(SDL_BUTTON_RIGHT),
+ [INPUT_BUTTON_WHEEL_UP] = SDL_BUTTON(SDL_BUTTON_WHEELUP),
+ [INPUT_BUTTON_WHEEL_DOWN] = SDL_BUTTON(SDL_BUTTON_WHEELDOWN),
+ };
+ static uint32_t prev_state;
+
+ if (prev_state != state) {
+ qemu_input_update_buttons(dcl->con, bmap, prev_state, state);
+ prev_state = state;
+ }
+
+ if (qemu_input_is_absolute()) {
+ qemu_input_queue_abs(dcl->con, INPUT_AXIS_X, x,
+ real_screen->w);
+ qemu_input_queue_abs(dcl->con, INPUT_AXIS_Y, y,
+ real_screen->h);
} else if (guest_cursor) {
x -= guest_x;
y -= guest_y;
guest_x += x;
guest_y += y;
- dx = x;
- dy = y;
+ qemu_input_queue_rel(dcl->con, INPUT_AXIS_X, x);
+ qemu_input_queue_rel(dcl->con, INPUT_AXIS_Y, y);
}
-
- kbd_mouse_event(dx, dy, dz, buttons);
+ qemu_input_event_sync();
}
static void sdl_scale(int width, int height)
@@ -687,7 +691,7 @@ static void handle_mousemotion(SDL_Event *ev)
int max_x, max_y;
if (qemu_console_is_graphic(NULL) &&
- (kbd_mouse_is_absolute() || absolute_enabled)) {
+ (qemu_input_is_absolute() || absolute_enabled)) {
max_x = real_screen->w - 1;
max_y = real_screen->h - 1;
if (gui_grab && (ev->motion.x == 0 || ev->motion.y == 0 ||
@@ -700,8 +704,8 @@ static void handle_mousemotion(SDL_Event *ev)
sdl_grab_start();
}
}
- if (gui_grab || kbd_mouse_is_absolute() || absolute_enabled) {
- sdl_send_mouse_event(ev->motion.xrel, ev->motion.yrel, 0,
+ if (gui_grab || qemu_input_is_absolute() || absolute_enabled) {
+ sdl_send_mouse_event(ev->motion.xrel, ev->motion.yrel,
ev->motion.x, ev->motion.y, ev->motion.state);
}
}
@@ -710,35 +714,24 @@ static void handle_mousebutton(SDL_Event *ev)
{
int buttonstate = SDL_GetMouseState(NULL, NULL);
SDL_MouseButtonEvent *bev;
- int dz;
if (!qemu_console_is_graphic(NULL)) {
return;
}
bev = &ev->button;
- if (!gui_grab && !kbd_mouse_is_absolute()) {
+ if (!gui_grab && !qemu_input_is_absolute()) {
if (ev->type == SDL_MOUSEBUTTONUP && bev->button == SDL_BUTTON_LEFT) {
/* start grabbing all events */
sdl_grab_start();
}
} else {
- dz = 0;
if (ev->type == SDL_MOUSEBUTTONDOWN) {
buttonstate |= SDL_BUTTON(bev->button);
} else {
buttonstate &= ~SDL_BUTTON(bev->button);
}
-#ifdef SDL_BUTTON_WHEELUP
- if (bev->button == SDL_BUTTON_WHEELUP &&
- ev->type == SDL_MOUSEBUTTONDOWN) {
- dz = -1;
- } else if (bev->button == SDL_BUTTON_WHEELDOWN &&
- ev->type == SDL_MOUSEBUTTONDOWN) {
- dz = 1;
- }
-#endif
- sdl_send_mouse_event(0, 0, dz, bev->x, bev->y, buttonstate);
+ sdl_send_mouse_event(0, 0, bev->x, bev->y, buttonstate);
}
}
@@ -753,7 +746,7 @@ static void handle_activation(SDL_Event *ev)
}
#endif
if (!gui_grab && ev->active.gain && qemu_console_is_graphic(NULL) &&
- (kbd_mouse_is_absolute() || absolute_enabled)) {
+ (qemu_input_is_absolute() || absolute_enabled)) {
absolute_mouse_grab();
}
if (ev->active.state & SDL_APPACTIVE) {
@@ -825,10 +818,11 @@ static void sdl_mouse_warp(DisplayChangeListener *dcl,
if (on) {
if (!guest_cursor)
sdl_show_cursor();
- if (gui_grab || kbd_mouse_is_absolute() || absolute_enabled) {
+ if (gui_grab || qemu_input_is_absolute() || absolute_enabled) {
SDL_SetCursor(guest_sprite);
- if (!kbd_mouse_is_absolute() && !absolute_enabled)
+ if (!qemu_input_is_absolute() && !absolute_enabled) {
SDL_WarpMouse(x, y);
+ }
}
} else if (gui_grab)
sdl_hide_cursor();
@@ -856,7 +850,7 @@ static void sdl_mouse_define(DisplayChangeListener *dcl,
g_free(mask);
if (guest_cursor &&
- (gui_grab || kbd_mouse_is_absolute() || absolute_enabled))
+ (gui_grab || qemu_input_is_absolute() || absolute_enabled))
SDL_SetCursor(guest_sprite);
}
--
1.8.3.1
- [Qemu-devel] [PATCH v2 23/42] input: mouse: switch gtk ui to new core, (continued)
- [Qemu-devel] [PATCH v2 23/42] input: mouse: switch gtk ui to new core, Gerd Hoffmann, 2014/01/22
- [Qemu-devel] [PATCH v2 10/42] input: keyboard: add helper functions to core, Gerd Hoffmann, 2014/01/22
- [Qemu-devel] [PATCH v2 27/42] input: mouse: switch spice ui to new core, Gerd Hoffmann, 2014/01/22
- [Qemu-devel] [PATCH v2 16/42] input: keyboard: switch vnc ui to new core, Gerd Hoffmann, 2014/01/22
- [Qemu-devel] [PATCH v2 18/42] input: keyboard: switch curses ui to new core, Gerd Hoffmann, 2014/01/22
- [Qemu-devel] [PATCH v2 35/42] input-legacy: remove kbd_mouse_event, Gerd Hoffmann, 2014/01/22
- [Qemu-devel] [PATCH v2 22/42] input: mouse: switch legacy handlers to new core, Gerd Hoffmann, 2014/01/22
- [Qemu-devel] [PATCH v2 20/42] input: mouse: add graphic_rotate support, Gerd Hoffmann, 2014/01/22
- [Qemu-devel] [PATCH v2 29/42] input: keyboard: switch cocoa ui to new core [untested], Gerd Hoffmann, 2014/01/22
- [Qemu-devel] [PATCH v2 19/42] input: mouse: add helpers functions to core, Gerd Hoffmann, 2014/01/22
- [Qemu-devel] [PATCH v2 24/42] input: mouse: switch sdl ui to new core,
Gerd Hoffmann <=
- [Qemu-devel] [PATCH v2 28/42] input: mouse: switch monitor to new core, Gerd Hoffmann, 2014/01/22
- [Qemu-devel] [PATCH v2 25/42] sdl2: switch mouse handling to new core, Gerd Hoffmann, 2014/01/22
- [Qemu-devel] [PATCH v2 34/42] input-legacy: remove kbd_mouse_is_absolute, Gerd Hoffmann, 2014/01/22
- [Qemu-devel] [PATCH v2 26/42] input: mouse: switch vnc ui to new core, Gerd Hoffmann, 2014/01/22
- [Qemu-devel] [PATCH v2 33/42] input-legacy: remove kbd_mouse_has_absolute, Gerd Hoffmann, 2014/01/22
- [Qemu-devel] [PATCH v2 31/42] input: trace events, Gerd Hoffmann, 2014/01/22
- [Qemu-devel] [PATCH v2 42/42] input: remove index_from_keycode (no users), Gerd Hoffmann, 2014/01/22
- [Qemu-devel] [PATCH v2 39/42] sdl2: codestyle fixups, Gerd Hoffmann, 2014/01/22
- [Qemu-devel] [PATCH v2 32/42] input-legacy: remove kbd_put_keycode, Gerd Hoffmann, 2014/01/22
- [Qemu-devel] [PATCH v2 40/42] input: move qmp_query_mice to new core, Gerd Hoffmann, 2014/01/22