* [Qemu-devel] [PATCH] Guest mouse cursor drawing in SDL
@ 2007-03-11 14:19 andrzej zaborowski
2007-03-20 15:08 ` Thiemo Seufer
0 siblings, 1 reply; 8+ messages in thread
From: andrzej zaborowski @ 2007-03-11 14:19 UTC (permalink / raw)
To: qemu-devel
[-- Attachment #1: Type: text/plain, Size: 778 bytes --]
This should allow the emulated video cards that support hardware
accelerated cursors to relay the cursor drawing to host, possibly
using real hardware cursor. This way the guest and host effectively
share one cursor. Only SDL support is included. Not tested with mice
that report absolute coordinates.
The cursor does not appear in the framebuffer seen by the guest, it's
only drawn on the host. One funny effect is that it's not clipped to
the size of the framebuffer and can stick out of the SDL window.
I think the sdl.c could use a small rewrite to have all cursor hiding
and showing in one place instead of spread across the file.
VNC support would need employing an extension for this, according to
Anthony Liguori. VMware made a documented VNC extension that does it.
[-- Attachment #2: 0002-Host-accelerated-mouse-cursor-support-in-SDL.txt --]
[-- Type: text/plain, Size: 7038 bytes --]
From 3cf77a8b3c80b0306a0e73677ac6faeb1f83e0a2 Mon Sep 17 00:00:00 2001
From: Andrzej Zaborowski <balrog@zabor.org>
Date: Sun, 11 Mar 2007 15:31:12 +0100
Subject: [PATCH] Host-accelerated mouse cursor support in SDL.
---
sdl.c | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
vl.c | 4 ++
vl.h | 9 +++++-
3 files changed, 114 insertions(+), 4 deletions(-)
diff --git a/sdl.c b/sdl.c
index 0cb2241..784049c 100644
--- a/sdl.c
+++ b/sdl.c
@@ -44,6 +44,9 @@ static int width, height;
static SDL_Cursor *sdl_cursor_normal;
static SDL_Cursor *sdl_cursor_hidden;
static int absolute_enabled = 0;
+static int guest_cursor = 0;
+static int guest_x, guest_y;
+static SDL_Cursor *guest_sprite = 0;
static void sdl_update(DisplayState *ds, int x, int y, int w, int h)
{
@@ -240,13 +243,20 @@ static void sdl_show_cursor(void)
{
if (!kbd_mouse_is_absolute()) {
SDL_ShowCursor(1);
- SDL_SetCursor(sdl_cursor_normal);
+ if (guest_cursor &&
+ (gui_grab || kbd_mouse_is_absolute() || absolute_enabled))
+ SDL_SetCursor(guest_sprite);
+ else
+ SDL_SetCursor(sdl_cursor_normal);
}
}
static void sdl_grab_start(void)
{
- sdl_hide_cursor();
+ if (guest_cursor)
+ SDL_SetCursor(guest_sprite);
+ else
+ sdl_hide_cursor();
SDL_WM_GrabInput(SDL_GRAB_ON);
/* dummy read to avoid moving the mouse */
SDL_GetRelativeMouseState(NULL, NULL);
@@ -257,8 +267,8 @@ static void sdl_grab_start(void)
static void sdl_grab_end(void)
{
SDL_WM_GrabInput(SDL_GRAB_OFF);
- sdl_show_cursor();
gui_grab = 0;
+ sdl_show_cursor();
sdl_update_caption();
}
@@ -289,6 +299,12 @@ static void sdl_send_mouse_event(int dz)
} else if (absolute_enabled) {
sdl_show_cursor();
absolute_enabled = 0;
+ } else if (guest_cursor) {
+ SDL_GetMouseState(&dx, &dy);
+ dx -= guest_x;
+ dy -= guest_y;
+ guest_x += dx;
+ guest_y += dy;
}
kbd_mouse_event(dx, dy, dz, buttons);
@@ -467,8 +483,86 @@ static void sdl_refresh(DisplayState *ds)
}
}
+static void sdl_copy(DisplayState *ds, int src_x, int src_y,
+ int dst_x, int dst_y, int w, int h)
+{
+ SDL_Rect src = { src_x, src_y, w, h };
+ SDL_Rect dst = { dst_x, dst_y, w, h };
+ SDL_LowerBlit(screen, &src, screen, &dst);
+}
+
+static void sdl_fill(DisplayState *ds, int x, int y, int w, int h, uint32_t c)
+{
+ SDL_Rect dst = { x, y, w, h };
+ SDL_FillRect(screen, &dst, c);
+}
+
+static void sdl_mouse_warp(int x, int y, int on)
+{
+ guest_cursor = on;
+ if (on) {
+ sdl_show_cursor();
+ if (gui_grab || kbd_mouse_is_absolute() || absolute_enabled) {
+ SDL_SetCursor(guest_sprite);
+ SDL_WarpMouse(guest_x = x, guest_y = y);
+ }
+ } else if (gui_grab)
+ sdl_hide_cursor();
+}
+
+static void sdl_mouse_define(int width, int height, int bpp,
+ int hot_x, int hot_y,
+ uint8_t *image, uint8_t *mask)
+{
+ uint8_t sprite[256], *line;
+ int x, y, dst, bypl, src = 0;
+ if (guest_sprite)
+ SDL_FreeCursor(guest_sprite);
+
+ memset(sprite, 0, 256);
+ bypl = ((width * bpp + 31) >> 5) << 2;
+ for (y = 0, dst = 0; y < height; y ++, image += bypl) {
+ line = image;
+ for (x = 0; x < width; x ++, dst ++) {
+ switch (bpp) {
+ case 24:
+ src = *(line ++); src |= *(line ++); src |= *(line ++);
+ break;
+ case 16:
+ case 15:
+ src = *(line ++); src |= *(line ++);
+ break;
+ case 8:
+ src = *(line ++);
+ break;
+ case 4:
+ src = 0xf & (line[x >> 1] >> ((x & 1)) << 2);
+ break;
+ case 2:
+ src = 3 & (line[x >> 2] >> ((x & 3)) << 1);
+ break;
+ case 1:
+ src = 1 & (line[x >> 3] >> (x & 7));
+ break;
+ }
+ if (!src)
+ sprite[dst >> 3] |= (1 << (~dst & 7)) & mask[dst >> 3];
+ }
+ }
+ guest_sprite = SDL_CreateCursor(sprite, mask, width, height, hot_x, hot_y);
+
+ if (guest_cursor &&
+ (gui_grab || kbd_mouse_is_absolute() || absolute_enabled))
+ SDL_SetCursor(guest_sprite);
+}
+
static void sdl_cleanup(void)
{
+ kbd_mouse_set = 0;
+ kbd_cursor_define = 0;
+
+ if (guest_sprite)
+ SDL_FreeCursor(guest_sprite);
SDL_Quit();
}
@@ -505,6 +599,8 @@ void sdl_display_init(DisplayState *ds, int full_screen, int no_frame)
ds->dpy_update = sdl_update;
ds->dpy_resize = sdl_resize;
ds->dpy_refresh = sdl_refresh;
+ ds->dpy_copy = sdl_copy;
+ ds->dpy_fill = sdl_fill;
sdl_resize(ds, 640, 400);
sdl_update_caption();
@@ -515,6 +611,9 @@ void sdl_display_init(DisplayState *ds, int full_screen, int no_frame)
sdl_cursor_hidden = SDL_CreateCursor(&data, &data, 8, 1, 0, 0);
sdl_cursor_normal = SDL_GetCursor();
+ kbd_mouse_set = sdl_mouse_warp;
+ kbd_cursor_define = sdl_mouse_define;
+
atexit(sdl_cleanup);
if (full_screen) {
gui_fullscreen = 1;
diff --git a/vl.c b/vl.c
index e871c8c..98fef9d 100644
--- a/vl.c
+++ b/vl.c
@@ -542,6 +542,10 @@ int kbd_mouse_is_absolute(void)
return qemu_put_mouse_event_current->qemu_put_mouse_event_absolute;
}
+void (*kbd_mouse_set)(int x, int y, int on) = NULL;
+void (*kbd_cursor_define)(int width, int height, int bpp, int hot_x, int hot_y,
+ uint8_t *image, uint8_t *mask) = NULL;
+
void do_info_mice(void)
{
QEMUPutMouseEntry *cursor;
diff --git a/vl.h b/vl.h
index c7c7d73..04fe3cc 100644
--- a/vl.h
+++ b/vl.h
@@ -201,6 +201,10 @@ void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry);
void kbd_put_keycode(int keycode);
void kbd_mouse_event(int dx, int dy, int dz, int buttons_state);
int kbd_mouse_is_absolute(void);
+extern void (*kbd_mouse_set)(int x, int y, int on);
+extern void (*kbd_cursor_define)(int width, int height, int bpp,
+ int hot_x, int hot_y,
+ uint8_t *image, uint8_t *mask);
void do_info_mice(void);
void do_mouse_set(int index);
@@ -890,7 +894,10 @@ struct DisplayState {
void (*dpy_update)(struct DisplayState *s, int x, int y, int w, int h);
void (*dpy_resize)(struct DisplayState *s, int w, int h);
void (*dpy_refresh)(struct DisplayState *s);
- void (*dpy_copy)(struct DisplayState *s, int src_x, int src_y, int dst_x, int dst_y, int w, int h);
+ void (*dpy_copy)(struct DisplayState *s, int src_x, int src_y,
+ int dst_x, int dst_y, int w, int h);
+ void (*dpy_fill)(struct DisplayState *s, int x, int y,
+ int w, int h, uint32_t c);
};
static inline void dpy_update(DisplayState *s, int x, int y, int w, int h)
--
1.4.4.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PATCH] Guest mouse cursor drawing in SDL
2007-03-11 14:19 [Qemu-devel] [PATCH] Guest mouse cursor drawing in SDL andrzej zaborowski
@ 2007-03-20 15:08 ` Thiemo Seufer
2007-03-20 15:38 ` Anthony Liguori
0 siblings, 1 reply; 8+ messages in thread
From: Thiemo Seufer @ 2007-03-20 15:08 UTC (permalink / raw)
To: andrzej zaborowski; +Cc: qemu-devel
andrzej zaborowski wrote:
> This should allow the emulated video cards that support hardware
> accelerated cursors to relay the cursor drawing to host, possibly
> using real hardware cursor. This way the guest and host effectively
> share one cursor. Only SDL support is included. Not tested with mice
> that report absolute coordinates.
>
> The cursor does not appear in the framebuffer seen by the guest, it's
> only drawn on the host. One funny effect is that it's not clipped to
> the size of the framebuffer and can stick out of the SDL window.
>
> I think the sdl.c could use a small rewrite to have all cursor hiding
> and showing in one place instead of spread across the file.
>
> VNC support would need employing an extension for this, according to
> Anthony Liguori. VMware made a documented VNC extension that does it.
> From 3cf77a8b3c80b0306a0e73677ac6faeb1f83e0a2 Mon Sep 17 00:00:00 2001
> From: Andrzej Zaborowski <balrog@zabor.org>
> Date: Sun, 11 Mar 2007 15:31:12 +0100
> Subject: [PATCH] Host-accelerated mouse cursor support in SDL.
This patch breaks scrolling in the cirrus vga framebuffer.
Thiemo
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PATCH] Guest mouse cursor drawing in SDL
2007-03-20 15:08 ` Thiemo Seufer
@ 2007-03-20 15:38 ` Anthony Liguori
2007-03-20 16:06 ` andrzej zaborowski
0 siblings, 1 reply; 8+ messages in thread
From: Anthony Liguori @ 2007-03-20 15:38 UTC (permalink / raw)
To: qemu-devel; +Cc: andrzej zaborowski
Thiemo Seufer wrote:
> andrzej zaborowski wrote:
>
>> This should allow the emulated video cards that support hardware
>> accelerated cursors to relay the cursor drawing to host, possibly
>> using real hardware cursor. This way the guest and host effectively
>> share one cursor. Only SDL support is included. Not tested with mice
>> that report absolute coordinates.
>>
>> The cursor does not appear in the framebuffer seen by the guest, it's
>> only drawn on the host. One funny effect is that it's not clipped to
>> the size of the framebuffer and can stick out of the SDL window.
>>
>> I think the sdl.c could use a small rewrite to have all cursor hiding
>> and showing in one place instead of spread across the file.
>>
>> VNC support would need employing an extension for this, according to
>> Anthony Liguori. VMware made a documented VNC extension that does it.
>>
>
>
>> From 3cf77a8b3c80b0306a0e73677ac6faeb1f83e0a2 Mon Sep 17 00:00:00 2001
>> From: Andrzej Zaborowski <balrog@zabor.org>
>> Date: Sun, 11 Mar 2007 15:31:12 +0100
>> Subject: [PATCH] Host-accelerated mouse cursor support in SDL.
>>
>
> This patch breaks scrolling in the cirrus vga framebuffer.
>
I think we want to expose these functions via DisplayState. It would be
nice if the semantics of too were similar to the rest of the functions
(the pixel format of the cursor was the same as the pixel format of
DisplayState).
One question in my mind is what the alpha mask should look like. All
that VNC (and SDL) can use is a 1-bit alpha depth. That's all Cirrus
supports too. VMware SVGA supports an 8-bit alpha channel though so it
may make sense to design the interface now to support that.
Regards,
Anthony Liguori
> Thiemo
>
>
> _______________________________________________
> Qemu-devel mailing list
> Qemu-devel@nongnu.org
> http://lists.nongnu.org/mailman/listinfo/qemu-devel
>
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PATCH] Guest mouse cursor drawing in SDL
2007-03-20 15:38 ` Anthony Liguori
@ 2007-03-20 16:06 ` andrzej zaborowski
2007-03-21 1:28 ` Anthony Liguori
0 siblings, 1 reply; 8+ messages in thread
From: andrzej zaborowski @ 2007-03-20 16:06 UTC (permalink / raw)
To: qemu-devel
On 20/03/07, Anthony Liguori <anthony@codemonkey.ws> wrote:
> Thiemo Seufer wrote:
> > andrzej zaborowski wrote:
> >
> >> This should allow the emulated video cards that support hardware
> >> accelerated cursors to relay the cursor drawing to host, possibly
> >> using real hardware cursor. This way the guest and host effectively
> >> share one cursor. Only SDL support is included. Not tested with mice
> >> that report absolute coordinates.
> >>
> >> The cursor does not appear in the framebuffer seen by the guest, it's
> >> only drawn on the host. One funny effect is that it's not clipped to
> >> the size of the framebuffer and can stick out of the SDL window.
> >>
> >> I think the sdl.c could use a small rewrite to have all cursor hiding
> >> and showing in one place instead of spread across the file.
> >>
> >> VNC support would need employing an extension for this, according to
> >> Anthony Liguori. VMware made a documented VNC extension that does it.
> >>
> >
> >
> >> From 3cf77a8b3c80b0306a0e73677ac6faeb1f83e0a2 Mon Sep 17 00:00:00 2001
> >> From: Andrzej Zaborowski <balrog@zabor.org>
> >> Date: Sun, 11 Mar 2007 15:31:12 +0100
> >> Subject: [PATCH] Host-accelerated mouse cursor support in SDL.
> >>
> >
> > This patch breaks scrolling in the cirrus vga framebuffer.
> >
I will try to see why it breaks scrolling after I fix the VMware SVGA.
It shouldn't affect anything other than the mouse cursor, and only
when enabled by the SVGA.
>
> I think we want to expose these functions via DisplayState. It would be
> nice if the semantics of too were similar to the rest of the functions
Agreed. They should be accessed through ds->mouse_set.
> > (the pixel format of the cursor was the same as the pixel format of
> DisplayState).
I'm not sure if we want to always use the same pixel format - for
example with VMware SVGA and SDL in 16 bit mode, the cursor pixel
format reported by guest Xorg was 8 bpp. This would mean two
conversions instead of one: first VMware SVGA would have to convert 8
-> 16 bpp then SDL 16 -> 1 bpp.
> One question in my mind is what the alpha mask should look like. All
> that VNC (and SDL) can use is a 1-bit alpha depth. That's all Cirrus
> supports too. VMware SVGA supports an 8-bit alpha channel though so it
> may make sense to design the interface now to support that.
VMware SVGA without CAP_ALPHA_CURSOR also does only 1-bit alpha. Maybe
we should keep two masks - if the frontend (e.g SDL) supports only
1-bit alpha it would use only this basic mask - if the emulated VGA
supports only 1-bit alpha it would leave the other mask opaque.
Regards,
Andrzej
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PATCH] Guest mouse cursor drawing in SDL
2007-03-20 16:06 ` andrzej zaborowski
@ 2007-03-21 1:28 ` Anthony Liguori
2007-03-23 13:57 ` andrzej zaborowski
0 siblings, 1 reply; 8+ messages in thread
From: Anthony Liguori @ 2007-03-21 1:28 UTC (permalink / raw)
To: balrogg, qemu-devel
andrzej zaborowski wrote:
>> > (the pixel format of the cursor was the same as the pixel format of
>> DisplayState).
>
> I'm not sure if we want to always use the same pixel format - for
> example with VMware SVGA and SDL in 16 bit mode, the cursor pixel
> format reported by guest Xorg was 8 bpp. This would mean two
> conversions instead of one: first VMware SVGA would have to convert 8
> -> 16 bpp then SDL 16 -> 1 bpp.
VNC expects the cursor data to be in the current pixel format. The nice
thing about this approach is you don't need to pass a bunch of pixel
info (for instance, you don't need to pass the depth, endianness, etc.).
The Cirrus hardware cursor also has to be copied anyway and doing the
conversion is really straight forward.
>> One question in my mind is what the alpha mask should look like. All
>> that VNC (and SDL) can use is a 1-bit alpha depth. That's all Cirrus
>> supports too. VMware SVGA supports an 8-bit alpha channel though so it
>> may make sense to design the interface now to support that.
>
> VMware SVGA without CAP_ALPHA_CURSOR also does only 1-bit alpha. Maybe
> we should keep two masks - if the frontend (e.g SDL) supports only
> 1-bit alpha it would use only this basic mask - if the emulated VGA
> supports only 1-bit alpha it would leave the other mask opaque.
I thought about that. Right now with my patch, the cursor mask is
always 1-bit deep. I was thinking that perhaps the right thing to do is
to make it always 8-bits deep and then convert in VNC.
Do you think using the SDL cursor is all that useful? As soon as gtk
widgets get involved, the cursor becomes ARGB so in practice, I'm not
sure that it's all that helpful.
BTW, I've got the ALPHA_CURSOR working with VNC.. it's very sweet :-)
Regards,
Anthony Liguori
> Regards,
> Andrzej
>
>
> _______________________________________________
> Qemu-devel mailing list
> Qemu-devel@nongnu.org
> http://lists.nongnu.org/mailman/listinfo/qemu-devel
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PATCH] Guest mouse cursor drawing in SDL
2007-03-21 1:28 ` Anthony Liguori
@ 2007-03-23 13:57 ` andrzej zaborowski
2007-03-25 23:49 ` Anthony Liguori
0 siblings, 1 reply; 8+ messages in thread
From: andrzej zaborowski @ 2007-03-23 13:57 UTC (permalink / raw)
To: Anthony Liguori; +Cc: qemu-devel
Hi, sorry for late reply.
On 21/03/07, Anthony Liguori <anthony@codemonkey.ws> wrote:
> andrzej zaborowski wrote:
> >> > (the pixel format of the cursor was the same as the pixel format of
> >> DisplayState).
> >
> > I'm not sure if we want to always use the same pixel format - for
> > example with VMware SVGA and SDL in 16 bit mode, the cursor pixel
> > format reported by guest Xorg was 8 bpp. This would mean two
> > conversions instead of one: first VMware SVGA would have to convert 8
> > -> 16 bpp then SDL 16 -> 1 bpp.
>
> VNC expects the cursor data to be in the current pixel format. The nice
> thing about this approach is you don't need to pass a bunch of pixel
> info (for instance, you don't need to pass the depth, endianness, etc.).
True. Maybe it's worth doing the double conversion (in the VGA and
another one in SDL).
>
> The Cirrus hardware cursor also has to be copied anyway and doing the
> conversion is really straight forward.
>
> >> One question in my mind is what the alpha mask should look like. All
> >> that VNC (and SDL) can use is a 1-bit alpha depth. That's all Cirrus
> >> supports too. VMware SVGA supports an 8-bit alpha channel though so it
> >> may make sense to design the interface now to support that.
> >
> > VMware SVGA without CAP_ALPHA_CURSOR also does only 1-bit alpha. Maybe
> > we should keep two masks - if the frontend (e.g SDL) supports only
> > 1-bit alpha it would use only this basic mask - if the emulated VGA
> > supports only 1-bit alpha it would leave the other mask opaque.
>
> I thought about that. Right now with my patch, the cursor mask is
> always 1-bit deep. I was thinking that perhaps the right thing to do is
> to make it always 8-bits deep and then convert in VNC.
>
> Do you think using the SDL cursor is all that useful? As soon as gtk
> widgets get involved, the cursor becomes ARGB so in practice, I'm not
> sure that it's all that helpful.
It's pretty cool that you have only one cursor and that it's either
"in the VM" or outside, and it's full hardware drawn. In addition
without it, I think you can't get cursor refreshes between the SDL
refresh callbacks. So with the patch the cursor movement is really
smooth and responsive, eliminating the SDL latency. I find it amazing
that it works :p
I think VNC support is not a reason to drop this couple of lines in
sdl.c (cause there's no API changes related).
>
> BTW, I've got the ALPHA_CURSOR working with VNC.. it's very sweet :-)
Awesome! Are there screenshots?
Regards,
Andrew
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PATCH] Guest mouse cursor drawing in SDL
2007-03-23 13:57 ` andrzej zaborowski
@ 2007-03-25 23:49 ` Anthony Liguori
2007-03-26 20:30 ` andrzej zaborowski
0 siblings, 1 reply; 8+ messages in thread
From: Anthony Liguori @ 2007-03-25 23:49 UTC (permalink / raw)
To: balrogg; +Cc: qemu-devel
andrzej zaborowski wrote:
> Hi, sorry for late reply.
>
> On 21/03/07, Anthony Liguori <anthony@codemonkey.ws> wrote:
>> Do you think using the SDL cursor is all that useful? As soon as gtk
>> widgets get involved, the cursor becomes ARGB so in practice, I'm not
>> sure that it's all that helpful.
>
> It's pretty cool that you have only one cursor and that it's either
> "in the VM" or outside, and it's full hardware drawn. In addition
> without it, I think you can't get cursor refreshes between the SDL
> refresh callbacks. So with the patch the cursor movement is really
> smooth and responsive, eliminating the SDL latency. I find it amazing
> that it works :p
Hrm, interesting. I actually want to rethink the mouse interface again
as I've been thinking that even if an absolute mouse isn't available,
provided that you know the location of the guest cursor, you can
implement a smarter grab/ungrab.
> I think VNC support is not a reason to drop this couple of lines in
> sdl.c (cause there's no API changes related).
>
>>
>> BTW, I've got the ALPHA_CURSOR working with VNC.. it's very sweet :-)
>
> Awesome! Are there screenshots?
I could make them, but they just show a mouse in the window :-) BTW,
have you thought about how to integrate std-vga into the vmware vga
device? I took a look at it and it seems like it will be overly
complicated based on the way VGA memory dirtying is done now.
Regards,
Anthony Liguori
> Regards,
> Andrew
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PATCH] Guest mouse cursor drawing in SDL
2007-03-25 23:49 ` Anthony Liguori
@ 2007-03-26 20:30 ` andrzej zaborowski
0 siblings, 0 replies; 8+ messages in thread
From: andrzej zaborowski @ 2007-03-26 20:30 UTC (permalink / raw)
To: Anthony Liguori; +Cc: qemu-devel
Hi,
On 26/03/07, Anthony Liguori <anthony@codemonkey.ws> wrote:
> andrzej zaborowski wrote:
> > Hi, sorry for late reply.
> >
> > On 21/03/07, Anthony Liguori <anthony@codemonkey.ws> wrote:
> >> Do you think using the SDL cursor is all that useful? As soon as gtk
> >> widgets get involved, the cursor becomes ARGB so in practice, I'm not
> >> sure that it's all that helpful.
> >
> > It's pretty cool that you have only one cursor and that it's either
> > "in the VM" or outside, and it's full hardware drawn. In addition
> > without it, I think you can't get cursor refreshes between the SDL
> > refresh callbacks. So with the patch the cursor movement is really
> > smooth and responsive, eliminating the SDL latency. I find it amazing
> > that it works :p
>
> Hrm, interesting. I actually want to rethink the mouse interface again
> as I've been thinking that even if an absolute mouse isn't available,
> provided that you know the location of the guest cursor, you can
> implement a smarter grab/ungrab.
I was thinking about this too but the issue is with grabbing.
Ungrabbing is straight forward, but when you grab, you will need to
either move the host cursor to the location of guest cursor or the
other way (which would be some iterative converging algorithm).
>
> > I think VNC support is not a reason to drop this couple of lines in
> > sdl.c (cause there's no API changes related).
> >
> >>
> >> BTW, I've got the ALPHA_CURSOR working with VNC.. it's very sweet :-)
> >
> > Awesome! Are there screenshots?
>
> I could make them, but they just show a mouse in the window :-) BTW,
> have you thought about how to integrate std-vga into the vmware vga
> device? I took a look at it and it seems like it will be overly
> complicated based on the way VGA memory dirtying is done now.
Yeah, it will require changes in hw/vga.c but it doesn't look very
difficult or hacky.
Regards,
Andrew
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2007-03-26 20:33 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-03-11 14:19 [Qemu-devel] [PATCH] Guest mouse cursor drawing in SDL andrzej zaborowski
2007-03-20 15:08 ` Thiemo Seufer
2007-03-20 15:38 ` Anthony Liguori
2007-03-20 16:06 ` andrzej zaborowski
2007-03-21 1:28 ` Anthony Liguori
2007-03-23 13:57 ` andrzej zaborowski
2007-03-25 23:49 ` Anthony Liguori
2007-03-26 20:30 ` andrzej zaborowski
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).