From 7c20b4a374d0016e3fce005690fb428354a56621 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Tue, 13 Nov 2012 14:51:41 +0100 Subject: console: fix displaychangelisteners interface Split callbacks into separate Ops struct. Pass DisplayChangeListener pointer as first argument to all callbacks. Uninline a bunch of display functions and move them from console.h to console.c Signed-off-by: Gerd Hoffmann --- ui/sdl.c | 44 +++++++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 15 deletions(-) (limited to 'ui/sdl.c') diff --git a/ui/sdl.c b/ui/sdl.c index 1657848e9f..5baffa0094 100644 --- a/ui/sdl.c +++ b/ui/sdl.c @@ -59,7 +59,9 @@ static SDL_PixelFormat host_format; static int scaling_active = 0; static Notifier mouse_mode_notifier; -static void sdl_update(DisplayState *ds, int x, int y, int w, int h) +static void sdl_update(DisplayChangeListener *dcl, + DisplayState *ds, + int x, int y, int w, int h) { // printf("updating x=%d y=%d w=%d h=%d\n", x, y, w, h); SDL_Rect rec; @@ -81,7 +83,8 @@ static void sdl_update(DisplayState *ds, int x, int y, int w, int h) SDL_UpdateRect(real_screen, rec.x, rec.y, rec.w, rec.h); } -static void sdl_setdata(DisplayState *ds) +static void sdl_setdata(DisplayChangeListener *dcl, + DisplayState *ds) { if (guest_screen != NULL) SDL_FreeSurface(guest_screen); @@ -114,7 +117,8 @@ static void do_sdl_resize(int width, int height, int bpp) } } -static void sdl_resize(DisplayState *ds) +static void sdl_resize(DisplayChangeListener *dcl, + DisplayState *ds) { if (!scaling_active) { do_sdl_resize(ds_get_width(ds), ds_get_height(ds), 0); @@ -122,7 +126,7 @@ static void sdl_resize(DisplayState *ds) do_sdl_resize(real_screen->w, real_screen->h, ds_get_bits_per_pixel(ds)); } - sdl_setdata(ds); + sdl_setdata(dcl, ds); } /* generic keyboard conversion */ @@ -514,7 +518,7 @@ static void handle_keydown(DisplayState *ds, SDL_Event *ev) case 0x16: /* 'u' key on US keyboard */ if (scaling_active) { scaling_active = 0; - sdl_resize(ds); + sdl_resize(dcl, ds); vga_hw_invalidate(); vga_hw_update(); } @@ -753,7 +757,8 @@ static void handle_activation(DisplayState *ds, SDL_Event *ev) } } -static void sdl_refresh(DisplayState *ds) +static void sdl_refresh(DisplayChangeListener *dcl, + DisplayState *ds) { SDL_Event ev1, *ev = &ev1; @@ -768,7 +773,7 @@ static void sdl_refresh(DisplayState *ds) while (SDL_PollEvent(ev)) { switch (ev->type) { case SDL_VIDEOEXPOSE: - sdl_update(ds, 0, 0, real_screen->w, real_screen->h); + sdl_update(dcl, ds, 0, 0, real_screen->w, real_screen->h); break; case SDL_KEYDOWN: handle_keydown(ds, ev); @@ -803,7 +808,9 @@ static void sdl_refresh(DisplayState *ds) } } -static void sdl_mouse_warp(DisplayState *ds, int x, int y, int on) +static void sdl_mouse_warp(DisplayChangeListener *dcl, + DisplayState *ds, + int x, int y, int on) { if (on) { if (!guest_cursor) @@ -819,7 +826,9 @@ static void sdl_mouse_warp(DisplayState *ds, int x, int y, int on) guest_x = x, guest_y = y; } -static void sdl_mouse_define(DisplayState *ds, QEMUCursor *c) +static void sdl_mouse_define(DisplayChangeListener *dcl, + DisplayState *ds, + QEMUCursor *c) { uint8_t *image, *mask; int bpl; @@ -849,6 +858,16 @@ static void sdl_cleanup(void) SDL_QuitSubSystem(SDL_INIT_VIDEO); } +static const DisplayChangeListenerOps dcl_ops = { + .dpy_name = "sdl", + .dpy_gfx_update = sdl_update, + .dpy_gfx_resize = sdl_resize, + .dpy_refresh = sdl_refresh, + .dpy_gfx_setdata = sdl_setdata, + .dpy_mouse_set = sdl_mouse_warp, + .dpy_cursor_define = sdl_mouse_define, +}; + void sdl_display_init(DisplayState *ds, int full_screen, int no_frame) { int flags; @@ -917,12 +936,7 @@ void sdl_display_init(DisplayState *ds, int full_screen, int no_frame) } dcl = g_malloc0(sizeof(DisplayChangeListener)); - dcl->dpy_gfx_update = sdl_update; - dcl->dpy_gfx_resize = sdl_resize; - dcl->dpy_refresh = sdl_refresh; - dcl->dpy_gfx_setdata = sdl_setdata; - dcl->dpy_mouse_set = sdl_mouse_warp; - dcl->dpy_cursor_define = sdl_mouse_define; + dcl->ops = &dcl_ops; register_displaychangelistener(ds, dcl); mouse_mode_notifier.notify = sdl_mouse_mode_change; -- cgit 1.4.1 From 468dfd6de2df3cbaed8c5cc43f8fbde6f94f9dbc Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Thu, 28 Feb 2013 10:48:36 +0100 Subject: sdl: drop dead code DisplayAllocator removal (commit 187cd1d9f30d13f0d0ef682e4d91cfa3e4cbd472) made this a nop. Signed-off-by: Gerd Hoffmann --- ui/sdl.c | 5 ----- 1 file changed, 5 deletions(-) (limited to 'ui/sdl.c') diff --git a/ui/sdl.c b/ui/sdl.c index 5baffa0094..fc4dc1b18d 100644 --- a/ui/sdl.c +++ b/ui/sdl.c @@ -458,11 +458,6 @@ static void sdl_scale(DisplayState *ds, int width, int height) } do_sdl_resize(width, height, bpp); scaling_active = 1; - if (!is_buffer_shared(ds->surface)) { - ds->surface = qemu_resize_displaysurface(ds, ds_get_width(ds), - ds_get_height(ds)); - dpy_gfx_resize(ds); - } } static void toggle_full_screen(DisplayState *ds) -- cgit 1.4.1 From c12aeb860c63ba83190f962e2f0a1c5fe18ad3a6 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Thu, 28 Feb 2013 15:03:04 +0100 Subject: console: rework DisplaySurface handling [dcl/ui side] Replace the dpy_gfx_resize and dpy_gfx_setdata DisplayChangeListener callbacks with a dpy_gfx_switch callback which notifies the ui code when the framebuffer backing storage changes. Signed-off-by: Gerd Hoffmann --- hw/qxl.c | 9 +++++---- include/ui/console.h | 7 +++---- include/ui/spice-display.h | 3 ++- ui/cocoa.m | 13 ++++--------- ui/console.c | 8 ++++---- ui/gtk.c | 15 ++++++++------- ui/sdl.c | 10 +++++----- ui/spice-display.c | 12 +++++++----- ui/vnc.c | 21 +++++---------------- 9 files changed, 43 insertions(+), 55 deletions(-) (limited to 'ui/sdl.c') diff --git a/hw/qxl.c b/hw/qxl.c index 5d830f0e09..fbaadde256 100644 --- a/hw/qxl.c +++ b/hw/qxl.c @@ -1875,13 +1875,14 @@ static void display_update(DisplayChangeListener *dcl, } } -static void display_resize(DisplayChangeListener *dcl, - struct DisplayState *ds) +static void display_switch(DisplayChangeListener *dcl, + struct DisplayState *ds, + struct DisplaySurface *surface) { PCIQXLDevice *qxl = container_of(dcl, PCIQXLDevice, ssd.dcl); if (qxl->mode == QXL_MODE_VGA) { - qemu_spice_display_resize(&qxl->ssd); + qemu_spice_display_switch(&qxl->ssd, surface); } } @@ -1902,7 +1903,7 @@ static void display_refresh(DisplayChangeListener *dcl, static DisplayChangeListenerOps display_listener_ops = { .dpy_name = "spice/qxl", .dpy_gfx_update = display_update, - .dpy_gfx_resize = display_resize, + .dpy_gfx_switch = display_switch, .dpy_refresh = display_refresh, }; diff --git a/include/ui/console.h b/include/ui/console.h index 63e6e662c7..c8f0050cd6 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -156,10 +156,9 @@ typedef struct DisplayChangeListenerOps { void (*dpy_gfx_update)(DisplayChangeListener *dcl, struct DisplayState *s, int x, int y, int w, int h); - void (*dpy_gfx_resize)(DisplayChangeListener *dcl, - struct DisplayState *s); - void (*dpy_gfx_setdata)(DisplayChangeListener *dcl, - struct DisplayState *s); + void (*dpy_gfx_switch)(DisplayChangeListener *dcl, + struct DisplayState *s, + struct DisplaySurface *new_surface); void (*dpy_gfx_copy)(DisplayChangeListener *dcl, struct DisplayState *s, int src_x, int src_y, int dst_x, int dst_y, int w, int h); diff --git a/include/ui/spice-display.h b/include/ui/spice-display.h index f2752aa25a..82f8246650 100644 --- a/include/ui/spice-display.h +++ b/include/ui/spice-display.h @@ -117,7 +117,8 @@ void qemu_spice_display_init_common(SimpleSpiceDisplay *ssd, DisplayState *ds); void qemu_spice_display_update(SimpleSpiceDisplay *ssd, int x, int y, int w, int h); -void qemu_spice_display_resize(SimpleSpiceDisplay *ssd); +void qemu_spice_display_switch(SimpleSpiceDisplay *ssd, + DisplaySurface *surface); void qemu_spice_display_refresh(SimpleSpiceDisplay *ssd); void qemu_spice_cursor_refresh_unlocked(SimpleSpiceDisplay *ssd); diff --git a/ui/cocoa.m b/ui/cocoa.m index b1fb30e7f9..73843f447c 100644 --- a/ui/cocoa.m +++ b/ui/cocoa.m @@ -988,8 +988,9 @@ static void cocoa_update(DisplayChangeListener *dcl, [cocoaView setNeedsDisplayInRect:rect]; } -static void cocoa_resize(DisplayChangeListener *dcl, - DisplayState *ds) +static void cocoa_switch(DisplayChangeListener *dcl, + DisplayState *ds, + DisplaySurface *surface) { COCOA_DEBUG("qemu_cocoa: cocoa_resize\n"); @@ -1023,11 +1024,6 @@ static void cocoa_refresh(DisplayChangeListener *dcl, vga_hw_update(); } -static void cocoa_setdata(DisplayState *ds) -{ - [cocoaView updateDataOffset:ds]; -} - static void cocoa_cleanup(void) { COCOA_DEBUG("qemu_cocoa: cocoa_cleanup\n"); @@ -1037,8 +1033,7 @@ static void cocoa_cleanup(void) static const DisplayChangeListenerOps dcl_ops = { .dpy_name = "cocoa", .dpy_gfx_update = cocoa_update; - .dpy_gfx_resize = cocoa_resize; - .dpy_gfx_setdata = cocoa_setdata; + .dpy_gfx_switch = cocoa_switch; .dpy_refresh = cocoa_refresh; }; diff --git a/ui/console.c b/ui/console.c index c2ca9e7b93..4541b2c533 100644 --- a/ui/console.c +++ b/ui/console.c @@ -1372,8 +1372,8 @@ void register_displaychangelistener(DisplayState *ds, dcl->ds = ds; QLIST_INSERT_HEAD(&ds->listeners, dcl, next); gui_setup_refresh(ds); - if (dcl->ops->dpy_gfx_resize) { - dcl->ops->dpy_gfx_resize(dcl, ds); + if (dcl->ops->dpy_gfx_switch) { + dcl->ops->dpy_gfx_switch(dcl, ds, ds->surface); } } @@ -1413,8 +1413,8 @@ void dpy_gfx_replace_surface(DisplayState *s, s->surface = surface; QLIST_FOREACH(dcl, &s->listeners, next) { - if (dcl->ops->dpy_gfx_resize) { - dcl->ops->dpy_gfx_resize(dcl, s); + if (dcl->ops->dpy_gfx_switch) { + dcl->ops->dpy_gfx_switch(dcl, s, surface); } } qemu_free_displaysurface(old_surface); diff --git a/ui/gtk.c b/ui/gtk.c index b21a94a335..967a36cc4e 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -266,8 +266,9 @@ static void gd_refresh(DisplayChangeListener *dcl, vga_hw_update(); } -static void gd_resize(DisplayChangeListener *dcl, - DisplayState *ds) +static void gd_switch(DisplayChangeListener *dcl, + DisplayState *ds, + DisplaySurface *surface) { GtkDisplayState *s = container_of(dcl, GtkDisplayState, dcl); cairo_format_t kind; @@ -738,7 +739,7 @@ static void gd_menu_zoom_in(GtkMenuItem *item, void *opaque) s->scale_x += .25; s->scale_y += .25; - gd_resize(&s->dcl, s->ds); + gd_switch(&s->dcl, s->ds, s->ds->surface); } static void gd_menu_zoom_out(GtkMenuItem *item, void *opaque) @@ -754,7 +755,7 @@ static void gd_menu_zoom_out(GtkMenuItem *item, void *opaque) s->scale_x = MAX(s->scale_x, .25); s->scale_y = MAX(s->scale_y, .25); - gd_resize(&s->dcl, s->ds); + gd_switch(&s->dcl, s->ds, s->ds->surface); } static void gd_menu_zoom_fixed(GtkMenuItem *item, void *opaque) @@ -764,7 +765,7 @@ static void gd_menu_zoom_fixed(GtkMenuItem *item, void *opaque) s->scale_x = 1.0; s->scale_y = 1.0; - gd_resize(&s->dcl, s->ds); + gd_switch(&s->dcl, s->ds, s->ds->surface); } static void gd_menu_zoom_fit(GtkMenuItem *item, void *opaque) @@ -778,7 +779,7 @@ static void gd_menu_zoom_fit(GtkMenuItem *item, void *opaque) s->free_scale = FALSE; } - gd_resize(&s->dcl, s->ds); + gd_switch(&s->dcl, s->ds, s->ds->surface); gdk_drawable_get_size(gtk_widget_get_window(s->drawing_area), &ww, &wh); gtk_widget_queue_draw_area(s->drawing_area, 0, 0, ww, wh); @@ -1287,7 +1288,7 @@ static void gd_create_menus(GtkDisplayState *s) static const DisplayChangeListenerOps dcl_ops = { .dpy_name = "gtk", .dpy_gfx_update = gd_update, - .dpy_gfx_resize = gd_resize, + .dpy_gfx_switch = gd_switch, .dpy_refresh = gd_refresh, }; diff --git a/ui/sdl.c b/ui/sdl.c index fc4dc1b18d..85eefdf4ab 100644 --- a/ui/sdl.c +++ b/ui/sdl.c @@ -117,8 +117,9 @@ static void do_sdl_resize(int width, int height, int bpp) } } -static void sdl_resize(DisplayChangeListener *dcl, - DisplayState *ds) +static void sdl_switch(DisplayChangeListener *dcl, + DisplayState *ds, + DisplaySurface *surface) { if (!scaling_active) { do_sdl_resize(ds_get_width(ds), ds_get_height(ds), 0); @@ -513,7 +514,7 @@ static void handle_keydown(DisplayState *ds, SDL_Event *ev) case 0x16: /* 'u' key on US keyboard */ if (scaling_active) { scaling_active = 0; - sdl_resize(dcl, ds); + sdl_switch(dcl, ds, ds->surface); vga_hw_invalidate(); vga_hw_update(); } @@ -856,9 +857,8 @@ static void sdl_cleanup(void) static const DisplayChangeListenerOps dcl_ops = { .dpy_name = "sdl", .dpy_gfx_update = sdl_update, - .dpy_gfx_resize = sdl_resize, + .dpy_gfx_switch = sdl_switch, .dpy_refresh = sdl_refresh, - .dpy_gfx_setdata = sdl_setdata, .dpy_mouse_set = sdl_mouse_warp, .dpy_cursor_define = sdl_mouse_define, }; diff --git a/ui/spice-display.c b/ui/spice-display.c index b2bda23feb..cc2a78e654 100644 --- a/ui/spice-display.c +++ b/ui/spice-display.c @@ -367,7 +367,8 @@ void qemu_spice_display_update(SimpleSpiceDisplay *ssd, qemu_spice_rect_union(&ssd->dirty, &update_area); } -void qemu_spice_display_resize(SimpleSpiceDisplay *ssd) +void qemu_spice_display_switch(SimpleSpiceDisplay *ssd, + DisplaySurface *surface) { SimpleSpiceUpdate *update; @@ -589,11 +590,12 @@ static void display_update(DisplayChangeListener *dcl, qemu_spice_display_update(ssd, x, y, w, h); } -static void display_resize(DisplayChangeListener *dcl, - struct DisplayState *ds) +static void display_switch(DisplayChangeListener *dcl, + struct DisplayState *ds, + struct DisplaySurface *surface) { SimpleSpiceDisplay *ssd = container_of(dcl, SimpleSpiceDisplay, dcl); - qemu_spice_display_resize(ssd); + qemu_spice_display_switch(ssd, surface); } static void display_refresh(DisplayChangeListener *dcl, @@ -606,7 +608,7 @@ static void display_refresh(DisplayChangeListener *dcl, static const DisplayChangeListenerOps display_listener_ops = { .dpy_name = "spice", .dpy_gfx_update = display_update, - .dpy_gfx_resize = display_resize, + .dpy_gfx_switch = display_switch, .dpy_refresh = display_refresh, }; diff --git a/ui/vnc.c b/ui/vnc.c index a6111d67bf..f8398c344d 100644 --- a/ui/vnc.c +++ b/ui/vnc.c @@ -574,8 +574,9 @@ void *vnc_server_fb_ptr(VncDisplay *vd, int x, int y) return ptr; } -static void vnc_dpy_resize(DisplayChangeListener *dcl, - DisplayState *ds) +static void vnc_dpy_switch(DisplayChangeListener *dcl, + DisplayState *ds, + DisplaySurface *surface) { VncDisplay *vd = container_of(dcl, VncDisplay, dcl); VncState *vs; @@ -1981,17 +1982,6 @@ static void pixel_format_message (VncState *vs) { vs->write_pixels = vnc_write_pixels_copy; } -static void vnc_dpy_setdata(DisplayChangeListener *dcl, - DisplayState *ds) -{ - VncDisplay *vd = container_of(dcl, VncDisplay, dcl); - - qemu_pixman_image_unref(vd->guest.fb); - vd->guest.fb = pixman_image_ref(ds->surface->image); - vd->guest.format = ds->surface->format; - vnc_dpy_update(dcl, ds, 0, 0, ds_get_width(ds), ds_get_height(ds)); -} - static void vnc_colordepth(VncState *vs) { if (vnc_has_feature(vs, VNC_FEATURE_WMVI)) { @@ -2696,7 +2686,7 @@ static void vnc_init_timer(VncDisplay *vd) vd->timer_interval = VNC_REFRESH_INTERVAL_BASE; if (vd->timer == NULL && !QTAILQ_EMPTY(&vd->clients)) { vd->timer = qemu_new_timer_ms(rt_clock, vnc_refresh, vd); - vnc_dpy_resize(&vd->dcl, vd->ds); + vnc_dpy_switch(&vd->dcl, vd->ds, vd->ds->surface); vnc_refresh(vd); } } @@ -2836,8 +2826,7 @@ static const DisplayChangeListenerOps dcl_ops = { .dpy_name = "vnc", .dpy_gfx_copy = vnc_dpy_copy, .dpy_gfx_update = vnc_dpy_update, - .dpy_gfx_resize = vnc_dpy_resize, - .dpy_gfx_setdata = vnc_dpy_setdata, + .dpy_gfx_switch = vnc_dpy_switch, .dpy_mouse_set = vnc_mouse_set, .dpy_cursor_define = vnc_dpy_cursor_define, }; -- cgit 1.4.1 From 8db9bae94eadcb7d5d07af1ba0c642aafafc5498 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Fri, 1 Mar 2013 09:01:13 +0100 Subject: sdl: stop using DisplayState Rework DisplayStateListener callbacks to not use the DisplayState any more. Signed-off-by: Gerd Hoffmann --- ui/sdl.c | 92 +++++++++++++++++++++++++++++++++++----------------------------- 1 file changed, 51 insertions(+), 41 deletions(-) (limited to 'ui/sdl.c') diff --git a/ui/sdl.c b/ui/sdl.c index 85eefdf4ab..58f16bc63e 100644 --- a/ui/sdl.c +++ b/ui/sdl.c @@ -35,6 +35,7 @@ #include "sdl_zoom.h" static DisplayChangeListener *dcl; +static DisplaySurface *surface; static SDL_Surface *real_screen; static SDL_Surface *guest_screen = NULL; static int gui_grab; /* if true, all keyboard/mouse events are grabbed */ @@ -60,7 +61,7 @@ static int scaling_active = 0; static Notifier mouse_mode_notifier; static void sdl_update(DisplayChangeListener *dcl, - DisplayState *ds, + DisplayState *dontuse, int x, int y, int w, int h) { // printf("updating x=%d y=%d w=%d h=%d\n", x, y, w, h); @@ -83,17 +84,6 @@ static void sdl_update(DisplayChangeListener *dcl, SDL_UpdateRect(real_screen, rec.x, rec.y, rec.w, rec.h); } -static void sdl_setdata(DisplayChangeListener *dcl, - DisplayState *ds) -{ - if (guest_screen != NULL) SDL_FreeSurface(guest_screen); - - guest_screen = SDL_CreateRGBSurfaceFrom(ds_get_data(ds), ds_get_width(ds), ds_get_height(ds), - ds_get_bits_per_pixel(ds), ds_get_linesize(ds), - ds->surface->pf.rmask, ds->surface->pf.gmask, - ds->surface->pf.bmask, ds->surface->pf.amask); -} - static void do_sdl_resize(int width, int height, int bpp) { int flags; @@ -118,16 +108,32 @@ static void do_sdl_resize(int width, int height, int bpp) } static void sdl_switch(DisplayChangeListener *dcl, - DisplayState *ds, - DisplaySurface *surface) + DisplayState *dontuse, + DisplaySurface *new_surface) { + + /* temporary hack: allows to call sdl_switch to handle scaling changes */ + if (new_surface) { + surface = new_surface; + } + if (!scaling_active) { - do_sdl_resize(ds_get_width(ds), ds_get_height(ds), 0); - } else if (real_screen->format->BitsPerPixel != ds_get_bits_per_pixel(ds)) { + do_sdl_resize(surface_width(surface), surface_height(surface), 0); + } else if (real_screen->format->BitsPerPixel != + surface_bits_per_pixel(surface)) { do_sdl_resize(real_screen->w, real_screen->h, - ds_get_bits_per_pixel(ds)); + surface_bits_per_pixel(surface)); } - sdl_setdata(dcl, ds); + + if (guest_screen != NULL) { + SDL_FreeSurface(guest_screen); + } + guest_screen = SDL_CreateRGBSurfaceFrom + (surface_data(surface), + surface_width(surface), surface_height(surface), + surface_bits_per_pixel(surface), surface_stride(surface), + surface->pf.rmask, surface->pf.gmask, + surface->pf.bmask, surface->pf.amask); } /* generic keyboard conversion */ @@ -450,7 +456,7 @@ static void sdl_send_mouse_event(int dx, int dy, int dz, int x, int y, int state kbd_mouse_event(dx, dy, dz, buttons); } -static void sdl_scale(DisplayState *ds, int width, int height) +static void sdl_scale(int width, int height) { int bpp = real_screen->format->BitsPerPixel; @@ -461,25 +467,28 @@ static void sdl_scale(DisplayState *ds, int width, int height) scaling_active = 1; } -static void toggle_full_screen(DisplayState *ds) +static void toggle_full_screen(void) { + int width = surface_width(surface); + int height = surface_height(surface); + int bpp = surface_bits_per_pixel(surface); + gui_fullscreen = !gui_fullscreen; if (gui_fullscreen) { gui_saved_width = real_screen->w; gui_saved_height = real_screen->h; gui_saved_scaling = scaling_active; - do_sdl_resize(ds_get_width(ds), ds_get_height(ds), - ds_get_bits_per_pixel(ds)); + do_sdl_resize(width, height, bpp); scaling_active = 0; gui_saved_grab = gui_grab; sdl_grab_start(); } else { if (gui_saved_scaling) { - sdl_scale(ds, gui_saved_width, gui_saved_height); + sdl_scale(gui_saved_width, gui_saved_height); } else { - do_sdl_resize(ds_get_width(ds), ds_get_height(ds), 0); + do_sdl_resize(width, height, 0); } if (!gui_saved_grab || !is_graphic_console()) { sdl_grab_end(); @@ -489,7 +498,7 @@ static void toggle_full_screen(DisplayState *ds) vga_hw_update(); } -static void handle_keydown(DisplayState *ds, SDL_Event *ev) +static void handle_keydown(SDL_Event *ev) { int mod_state; int keycode; @@ -508,13 +517,13 @@ static void handle_keydown(DisplayState *ds, SDL_Event *ev) keycode = sdl_keyevent_to_keycode(&ev->key); switch (keycode) { case 0x21: /* 'f' key on US keyboard */ - toggle_full_screen(ds); + toggle_full_screen(); gui_keysym = 1; break; case 0x16: /* 'u' key on US keyboard */ if (scaling_active) { scaling_active = 0; - sdl_switch(dcl, ds, ds->surface); + sdl_switch(dcl, NULL, NULL); vga_hw_invalidate(); vga_hw_update(); } @@ -545,9 +554,10 @@ static void handle_keydown(DisplayState *ds, SDL_Event *ev) if (!gui_fullscreen) { int width = MAX(real_screen->w + (keycode == 0x1b ? 50 : -50), 160); - int height = (ds_get_height(ds) * width) / ds_get_width(ds); + int height = (surface_height(surface) * width) / + surface_width(surface); - sdl_scale(ds, width, height); + sdl_scale(width, height); vga_hw_invalidate(); vga_hw_update(); gui_keysym = 1; @@ -634,7 +644,7 @@ static void handle_keydown(DisplayState *ds, SDL_Event *ev) } } -static void handle_keyup(DisplayState *ds, SDL_Event *ev) +static void handle_keyup(SDL_Event *ev) { int mod_state; @@ -666,7 +676,7 @@ static void handle_keyup(DisplayState *ds, SDL_Event *ev) } } -static void handle_mousemotion(DisplayState *ds, SDL_Event *ev) +static void handle_mousemotion(SDL_Event *ev) { int max_x, max_y; @@ -690,7 +700,7 @@ static void handle_mousemotion(DisplayState *ds, SDL_Event *ev) } } -static void handle_mousebutton(DisplayState *ds, SDL_Event *ev) +static void handle_mousebutton(SDL_Event *ev) { int buttonstate = SDL_GetMouseState(NULL, NULL); SDL_MouseButtonEvent *bev; @@ -726,7 +736,7 @@ static void handle_mousebutton(DisplayState *ds, SDL_Event *ev) } } -static void handle_activation(DisplayState *ds, SDL_Event *ev) +static void handle_activation(SDL_Event *ev) { #ifdef _WIN32 /* Disable grab if the window no longer has the focus @@ -754,7 +764,7 @@ static void handle_activation(DisplayState *ds, SDL_Event *ev) } static void sdl_refresh(DisplayChangeListener *dcl, - DisplayState *ds) + DisplayState *dontuse) { SDL_Event ev1, *ev = &ev1; @@ -769,13 +779,13 @@ static void sdl_refresh(DisplayChangeListener *dcl, while (SDL_PollEvent(ev)) { switch (ev->type) { case SDL_VIDEOEXPOSE: - sdl_update(dcl, ds, 0, 0, real_screen->w, real_screen->h); + sdl_update(dcl, dontuse, 0, 0, real_screen->w, real_screen->h); break; case SDL_KEYDOWN: - handle_keydown(ds, ev); + handle_keydown(ev); break; case SDL_KEYUP: - handle_keyup(ds, ev); + handle_keyup(ev); break; case SDL_QUIT: if (!no_quit) { @@ -784,17 +794,17 @@ static void sdl_refresh(DisplayChangeListener *dcl, } break; case SDL_MOUSEMOTION: - handle_mousemotion(ds, ev); + handle_mousemotion(ev); break; case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: - handle_mousebutton(ds, ev); + handle_mousebutton(ev); break; case SDL_ACTIVEEVENT: - handle_activation(ds, ev); + handle_activation(ev); break; case SDL_VIDEORESIZE: - sdl_scale(ds, ev->resize.w, ev->resize.h); + sdl_scale(ev->resize.w, ev->resize.h); vga_hw_invalidate(); vga_hw_update(); break; -- cgit 1.4.1 From bc2ed9704fff2c721e4056ab5281f0291718bfa6 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Fri, 1 Mar 2013 13:03:04 +0100 Subject: console: zap displaystate from dcl callbacks Now that nobody depends on DisplayState in DisplayChangeListener callbacks any more we can remove the parameter from all callbacks. Signed-off-by: Gerd Hoffmann --- hw/qxl.c | 5 +---- include/ui/console.h | 12 ++---------- ui/cocoa.m | 5 +---- ui/console.c | 22 +++++++++++----------- ui/curses.c | 8 ++------ ui/gtk.c | 6 ++---- ui/sdl.c | 11 +++-------- ui/spice-display.c | 5 +---- ui/vnc.c | 5 ----- 9 files changed, 23 insertions(+), 56 deletions(-) (limited to 'ui/sdl.c') diff --git a/hw/qxl.c b/hw/qxl.c index 6ed61beea4..0939ace88e 100644 --- a/hw/qxl.c +++ b/hw/qxl.c @@ -1865,7 +1865,6 @@ static void qxl_vm_change_state_handler(void *opaque, int running, /* display change listener */ static void display_update(DisplayChangeListener *dcl, - struct DisplayState *ds, int x, int y, int w, int h) { PCIQXLDevice *qxl = container_of(dcl, PCIQXLDevice, ssd.dcl); @@ -1876,7 +1875,6 @@ static void display_update(DisplayChangeListener *dcl, } static void display_switch(DisplayChangeListener *dcl, - struct DisplayState *ds, struct DisplaySurface *surface) { PCIQXLDevice *qxl = container_of(dcl, PCIQXLDevice, ssd.dcl); @@ -1887,8 +1885,7 @@ static void display_switch(DisplayChangeListener *dcl, } } -static void display_refresh(DisplayChangeListener *dcl, - struct DisplayState *ds) +static void display_refresh(DisplayChangeListener *dcl) { PCIQXLDevice *qxl = container_of(dcl, PCIQXLDevice, ssd.dcl); diff --git a/include/ui/console.h b/include/ui/console.h index a35b71aba2..c32c834871 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -150,34 +150,26 @@ void cursor_get_mono_mask(QEMUCursor *c, int transparent, uint8_t *mask); typedef struct DisplayChangeListenerOps { const char *dpy_name; - void (*dpy_refresh)(DisplayChangeListener *dcl, - struct DisplayState *s); + void (*dpy_refresh)(DisplayChangeListener *dcl); void (*dpy_gfx_update)(DisplayChangeListener *dcl, - struct DisplayState *s, int x, int y, int w, int h); void (*dpy_gfx_switch)(DisplayChangeListener *dcl, - struct DisplayState *s, struct DisplaySurface *new_surface); void (*dpy_gfx_copy)(DisplayChangeListener *dcl, - struct DisplayState *s, int src_x, int src_y, + int src_x, int src_y, int dst_x, int dst_y, int w, int h); void (*dpy_text_cursor)(DisplayChangeListener *dcl, - struct DisplayState *s, int x, int y); void (*dpy_text_resize)(DisplayChangeListener *dcl, - struct DisplayState *s, int w, int h); void (*dpy_text_update)(DisplayChangeListener *dcl, - struct DisplayState *s, int x, int y, int w, int h); void (*dpy_mouse_set)(DisplayChangeListener *dcl, - struct DisplayState *s, int x, int y, int on); void (*dpy_cursor_define)(DisplayChangeListener *dcl, - struct DisplayState *s, QEMUCursor *cursor); } DisplayChangeListenerOps; diff --git a/ui/cocoa.m b/ui/cocoa.m index 9a56fb8912..8e0eaa2601 100644 --- a/ui/cocoa.m +++ b/ui/cocoa.m @@ -955,7 +955,6 @@ int main (int argc, const char * argv[]) { #pragma mark qemu static void cocoa_update(DisplayChangeListener *dcl, - DisplayState *dontuse, int x, int y, int w, int h) { COCOA_DEBUG("qemu_cocoa: cocoa_update\n"); @@ -974,7 +973,6 @@ static void cocoa_update(DisplayChangeListener *dcl, } static void cocoa_switch(DisplayChangeListener *dcl, - DisplayState *dontuse, DisplaySurface *surface) { COCOA_DEBUG("qemu_cocoa: cocoa_resize\n"); @@ -982,8 +980,7 @@ static void cocoa_switch(DisplayChangeListener *dcl, [cocoaView switchSurface:surface]; } -static void cocoa_refresh(DisplayChangeListener *dcl, - DisplayState *dontuse) +static void cocoa_refresh(DisplayChangeListener *dcl) { COCOA_DEBUG("qemu_cocoa: cocoa_refresh\n"); diff --git a/ui/console.c b/ui/console.c index 4541b2c533..d690e1c58f 100644 --- a/ui/console.c +++ b/ui/console.c @@ -1373,7 +1373,7 @@ void register_displaychangelistener(DisplayState *ds, QLIST_INSERT_HEAD(&ds->listeners, dcl, next); gui_setup_refresh(ds); if (dcl->ops->dpy_gfx_switch) { - dcl->ops->dpy_gfx_switch(dcl, ds, ds->surface); + dcl->ops->dpy_gfx_switch(dcl, ds->surface); } } @@ -1400,7 +1400,7 @@ void dpy_gfx_update(DisplayState *s, int x, int y, int w, int h) QLIST_FOREACH(dcl, &s->listeners, next) { if (dcl->ops->dpy_gfx_update) { - dcl->ops->dpy_gfx_update(dcl, s, x, y, w, h); + dcl->ops->dpy_gfx_update(dcl, x, y, w, h); } } } @@ -1414,7 +1414,7 @@ void dpy_gfx_replace_surface(DisplayState *s, s->surface = surface; QLIST_FOREACH(dcl, &s->listeners, next) { if (dcl->ops->dpy_gfx_switch) { - dcl->ops->dpy_gfx_switch(dcl, s, surface); + dcl->ops->dpy_gfx_switch(dcl, surface); } } qemu_free_displaysurface(old_surface); @@ -1425,7 +1425,7 @@ void dpy_refresh(DisplayState *s) struct DisplayChangeListener *dcl; QLIST_FOREACH(dcl, &s->listeners, next) { if (dcl->ops->dpy_refresh) { - dcl->ops->dpy_refresh(dcl, s); + dcl->ops->dpy_refresh(dcl); } } } @@ -1436,9 +1436,9 @@ void dpy_gfx_copy(struct DisplayState *s, int src_x, int src_y, struct DisplayChangeListener *dcl; QLIST_FOREACH(dcl, &s->listeners, next) { if (dcl->ops->dpy_gfx_copy) { - dcl->ops->dpy_gfx_copy(dcl, s, src_x, src_y, dst_x, dst_y, w, h); + dcl->ops->dpy_gfx_copy(dcl, src_x, src_y, dst_x, dst_y, w, h); } else { /* TODO */ - dcl->ops->dpy_gfx_update(dcl, s, dst_x, dst_y, w, h); + dcl->ops->dpy_gfx_update(dcl, dst_x, dst_y, w, h); } } } @@ -1448,7 +1448,7 @@ void dpy_text_cursor(struct DisplayState *s, int x, int y) struct DisplayChangeListener *dcl; QLIST_FOREACH(dcl, &s->listeners, next) { if (dcl->ops->dpy_text_cursor) { - dcl->ops->dpy_text_cursor(dcl, s, x, y); + dcl->ops->dpy_text_cursor(dcl, x, y); } } } @@ -1458,7 +1458,7 @@ void dpy_text_update(DisplayState *s, int x, int y, int w, int h) struct DisplayChangeListener *dcl; QLIST_FOREACH(dcl, &s->listeners, next) { if (dcl->ops->dpy_text_update) { - dcl->ops->dpy_text_update(dcl, s, x, y, w, h); + dcl->ops->dpy_text_update(dcl, x, y, w, h); } } } @@ -1468,7 +1468,7 @@ void dpy_text_resize(DisplayState *s, int w, int h) struct DisplayChangeListener *dcl; QLIST_FOREACH(dcl, &s->listeners, next) { if (dcl->ops->dpy_text_resize) { - dcl->ops->dpy_text_resize(dcl, s, w, h); + dcl->ops->dpy_text_resize(dcl, w, h); } } } @@ -1478,7 +1478,7 @@ void dpy_mouse_set(struct DisplayState *s, int x, int y, int on) struct DisplayChangeListener *dcl; QLIST_FOREACH(dcl, &s->listeners, next) { if (dcl->ops->dpy_mouse_set) { - dcl->ops->dpy_mouse_set(dcl, s, x, y, on); + dcl->ops->dpy_mouse_set(dcl, x, y, on); } } } @@ -1488,7 +1488,7 @@ void dpy_cursor_define(struct DisplayState *s, QEMUCursor *cursor) struct DisplayChangeListener *dcl; QLIST_FOREACH(dcl, &s->listeners, next) { if (dcl->ops->dpy_cursor_define) { - dcl->ops->dpy_cursor_define(dcl, s, cursor); + dcl->ops->dpy_cursor_define(dcl, cursor); } } } diff --git a/ui/curses.c b/ui/curses.c index ca9856ccef..ff82307361 100644 --- a/ui/curses.c +++ b/ui/curses.c @@ -42,7 +42,6 @@ static int width, height, gwidth, gheight, invalidate; static int px, py, sminx, sminy, smaxx, smaxy; static void curses_update(DisplayChangeListener *dcl, - DisplayState *ds, int x, int y, int w, int h) { chtype *line; @@ -95,7 +94,6 @@ static void curses_calc_pad(void) } static void curses_resize(DisplayChangeListener *dcl, - DisplayState *ds, int width, int height) { if (width == gwidth && height == gheight) { @@ -134,7 +132,6 @@ static void curses_winch_handler(int signum) #endif static void curses_cursor_position(DisplayChangeListener *dcl, - DisplayState *ds, int x, int y) { if (x >= 0) { @@ -161,8 +158,7 @@ static void curses_cursor_position(DisplayChangeListener *dcl, static kbd_layout_t *kbd_layout = NULL; -static void curses_refresh(DisplayChangeListener *dcl, - DisplayState *ds) +static void curses_refresh(DisplayChangeListener *dcl) { int chr, nextchr, keysym, keycode, keycode_alt; @@ -195,7 +191,7 @@ static void curses_refresh(DisplayChangeListener *dcl, clear(); refresh(); curses_calc_pad(); - curses_update(dcl, ds, 0, 0, width, height); + curses_update(dcl, 0, 0, width, height); continue; } #endif diff --git a/ui/gtk.c b/ui/gtk.c index d553550301..305940d0ba 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -266,7 +266,7 @@ static void gd_update_full_redraw(GtkDisplayState *s) /** DisplayState Callbacks **/ static void gd_update(DisplayChangeListener *dcl, - DisplayState *dontuse, int x, int y, int w, int h) + int x, int y, int w, int h) { GtkDisplayState *s = container_of(dcl, GtkDisplayState, dcl); int x1, x2, y1, y2; @@ -298,14 +298,12 @@ static void gd_update(DisplayChangeListener *dcl, gtk_widget_queue_draw_area(s->drawing_area, mx + x1, my + y1, (x2 - x1), (y2 - y1)); } -static void gd_refresh(DisplayChangeListener *dcl, - DisplayState *dontuse) +static void gd_refresh(DisplayChangeListener *dcl) { vga_hw_update(); } static void gd_switch(DisplayChangeListener *dcl, - DisplayState *dontuse, DisplaySurface *surface) { GtkDisplayState *s = container_of(dcl, GtkDisplayState, dcl); diff --git a/ui/sdl.c b/ui/sdl.c index 58f16bc63e..8da05341bb 100644 --- a/ui/sdl.c +++ b/ui/sdl.c @@ -61,7 +61,6 @@ static int scaling_active = 0; static Notifier mouse_mode_notifier; static void sdl_update(DisplayChangeListener *dcl, - DisplayState *dontuse, int x, int y, int w, int h) { // printf("updating x=%d y=%d w=%d h=%d\n", x, y, w, h); @@ -108,7 +107,6 @@ static void do_sdl_resize(int width, int height, int bpp) } static void sdl_switch(DisplayChangeListener *dcl, - DisplayState *dontuse, DisplaySurface *new_surface) { @@ -523,7 +521,7 @@ static void handle_keydown(SDL_Event *ev) case 0x16: /* 'u' key on US keyboard */ if (scaling_active) { scaling_active = 0; - sdl_switch(dcl, NULL, NULL); + sdl_switch(dcl, NULL); vga_hw_invalidate(); vga_hw_update(); } @@ -763,8 +761,7 @@ static void handle_activation(SDL_Event *ev) } } -static void sdl_refresh(DisplayChangeListener *dcl, - DisplayState *dontuse) +static void sdl_refresh(DisplayChangeListener *dcl) { SDL_Event ev1, *ev = &ev1; @@ -779,7 +776,7 @@ static void sdl_refresh(DisplayChangeListener *dcl, while (SDL_PollEvent(ev)) { switch (ev->type) { case SDL_VIDEOEXPOSE: - sdl_update(dcl, dontuse, 0, 0, real_screen->w, real_screen->h); + sdl_update(dcl, 0, 0, real_screen->w, real_screen->h); break; case SDL_KEYDOWN: handle_keydown(ev); @@ -815,7 +812,6 @@ static void sdl_refresh(DisplayChangeListener *dcl, } static void sdl_mouse_warp(DisplayChangeListener *dcl, - DisplayState *ds, int x, int y, int on) { if (on) { @@ -833,7 +829,6 @@ static void sdl_mouse_warp(DisplayChangeListener *dcl, } static void sdl_mouse_define(DisplayChangeListener *dcl, - DisplayState *ds, QEMUCursor *c) { uint8_t *image, *mask; diff --git a/ui/spice-display.c b/ui/spice-display.c index 5bbe23b8ba..2127b3f37e 100644 --- a/ui/spice-display.c +++ b/ui/spice-display.c @@ -583,7 +583,6 @@ static const QXLInterface dpy_interface = { }; static void display_update(DisplayChangeListener *dcl, - struct DisplayState *ds, int x, int y, int w, int h) { SimpleSpiceDisplay *ssd = container_of(dcl, SimpleSpiceDisplay, dcl); @@ -591,15 +590,13 @@ static void display_update(DisplayChangeListener *dcl, } static void display_switch(DisplayChangeListener *dcl, - struct DisplayState *ds, struct DisplaySurface *surface) { SimpleSpiceDisplay *ssd = container_of(dcl, SimpleSpiceDisplay, dcl); qemu_spice_display_switch(ssd, surface); } -static void display_refresh(DisplayChangeListener *dcl, - struct DisplayState *ds) +static void display_refresh(DisplayChangeListener *dcl) { SimpleSpiceDisplay *ssd = container_of(dcl, SimpleSpiceDisplay, dcl); qemu_spice_display_refresh(ssd); diff --git a/ui/vnc.c b/ui/vnc.c index f38aeda3e2..bbe1e0f179 100644 --- a/ui/vnc.c +++ b/ui/vnc.c @@ -430,7 +430,6 @@ static void vnc_refresh(void *opaque); static int vnc_refresh_server_surface(VncDisplay *vd); static void vnc_dpy_update(DisplayChangeListener *dcl, - DisplayState *ds, int x, int y, int w, int h) { int i; @@ -575,7 +574,6 @@ void *vnc_server_fb_ptr(VncDisplay *vd, int x, int y) } static void vnc_dpy_switch(DisplayChangeListener *dcl, - DisplayState *dontuse, DisplaySurface *surface) { VncDisplay *vd = container_of(dcl, VncDisplay, dcl); @@ -740,7 +738,6 @@ static void vnc_copy(VncState *vs, int src_x, int src_y, int dst_x, int dst_y, i } static void vnc_dpy_copy(DisplayChangeListener *dcl, - DisplayState *dontuse, int src_x, int src_y, int dst_x, int dst_y, int w, int h) { @@ -814,7 +811,6 @@ static void vnc_dpy_copy(DisplayChangeListener *dcl, } static void vnc_mouse_set(DisplayChangeListener *dcl, - DisplayState *dontuse, int x, int y, int visible) { /* can we ask the client(s) to move the pointer ??? */ @@ -842,7 +838,6 @@ static int vnc_cursor_define(VncState *vs) } static void vnc_dpy_cursor_define(DisplayChangeListener *dcl, - DisplayState *dontuse, QEMUCursor *c) { VncDisplay *vd = vnc_display; -- cgit 1.4.1