diff mbox series

[5/7] sdl2 uses surface relative coordinates

Message ID 20171023210803.20998-6-makovick@gmail.com
State New
Headers show
Series [1/7] sdl2: Fix broken display updating after the window is hidden | expand

Commit Message

Jindřich Makovička Oct. 23, 2017, 9:08 p.m. UTC
---
 ui/sdl2.c | 28 ++--------------------------
 1 file changed, 2 insertions(+), 26 deletions(-)

Comments

Gerd Hoffmann Nov. 1, 2017, 10:43 a.m. UTC | #1
Why?

Also I think this breaks the pointer in case window size doesn't match
surface size.

cheers,
  Gerd
Jindřich Makovička Nov. 2, 2017, 5:07 p.m. UTC | #2
Hi,

this patch fixes the exact case you mentioned. Currently, with surface size
smaller than the window, the pointer is confined to the top left corner
when using the absolute mode (-usbdevice tablet).

On Wed, Nov 1, 2017 at 11:43 AM Gerd Hoffmann <kraxel@redhat.com> wrote:

> Why?
>
> Also I think this breaks the pointer in case window size doesn't match
> surface size.
>
> cheers,
>   Gerd
>
> --
Jindřich Makovička
Gerd Hoffmann Nov. 3, 2017, 9:53 a.m. UTC | #3
On Thu, 2017-11-02 at 17:07 +0000, Jindřich Makovička wrote:
> Hi,
> 
> this patch fixes the exact case you mentioned. Currently, with
> surface size
> smaller than the window, the pointer is confined to the top left
> corner
> when using the absolute mode (-usbdevice tablet).

Tracked down.  Seems to be broken since commit
46522a82236ea0cf9011b89896d2d8f8ddaf2443.  SDL doesn't only scale
window output for us, but also pointer input, so qemu doesn't need to
do this by itself any more.

Patch is correct then.

cheers,
  Gerd
diff mbox series

Patch

diff --git a/ui/sdl2.c b/ui/sdl2.c
index fa54353430..092eab37dc 100644
--- a/ui/sdl2.c
+++ b/ui/sdl2.c
@@ -276,32 +276,8 @@  static void sdl_send_mouse_event(struct sdl2_console *scon, int dx, int dy,
     }
 
     if (qemu_input_is_absolute()) {
-        int scr_w, scr_h;
-        int max_w = 0, max_h = 0;
-        int off_x = 0, off_y = 0;
-        int cur_off_x = 0, cur_off_y = 0;
-        int i;
-
-        for (i = 0; i < sdl2_num_outputs; i++) {
-            struct sdl2_console *thiscon = &sdl2_console[i];
-            if (thiscon->real_window && thiscon->surface) {
-                SDL_GetWindowSize(thiscon->real_window, &scr_w, &scr_h);
-                cur_off_x = thiscon->x;
-                cur_off_y = thiscon->y;
-                if (scr_w + cur_off_x > max_w) {
-                    max_w = scr_w + cur_off_x;
-                }
-                if (scr_h + cur_off_y > max_h) {
-                    max_h = scr_h + cur_off_y;
-                }
-                if (i == scon->idx) {
-                    off_x = cur_off_x;
-                    off_y = cur_off_y;
-                }
-            }
-        }
-        qemu_input_queue_abs(scon->dcl.con, INPUT_AXIS_X, off_x + x, 0, max_w);
-        qemu_input_queue_abs(scon->dcl.con, INPUT_AXIS_Y, off_y + y, 0, max_h);
+        qemu_input_queue_abs(scon->dcl.con, INPUT_AXIS_X, x, 0, surface_width(scon->surface));
+        qemu_input_queue_abs(scon->dcl.con, INPUT_AXIS_Y, y, 0, surface_height(scon->surface));
     } else {
         if (guest_cursor) {
             x -= guest_x;