mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
console: untangle gfx & txt updates
Stop abusing displaysurface fields for text mode displays. (bpp = 0, width = cols, height = lines). Add flags to displaystate indicating whenever text mode display (curses) or gfx mode displays (sdl, vnc, ...) are present. Add separate displaychangelistener callbacks for text / gfx mode resize & updates. This allows to enable gfx and txt diplays at the same time and also paves the way for more cleanups in the future. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
76ffb0b4d0
commit
a93a4a226a
27 changed files with 171 additions and 138 deletions
21
ui/curses.c
21
ui/curses.c
|
@ -95,17 +95,16 @@ static void curses_calc_pad(void)
|
|||
}
|
||||
}
|
||||
|
||||
static void curses_resize(DisplayState *ds)
|
||||
static void curses_resize(DisplayState *ds, int width, int height)
|
||||
{
|
||||
if (ds_get_width(ds) == gwidth && ds_get_height(ds) == gheight)
|
||||
if (width == gwidth && height == gheight) {
|
||||
return;
|
||||
}
|
||||
|
||||
gwidth = ds_get_width(ds);
|
||||
gheight = ds_get_height(ds);
|
||||
gwidth = width;
|
||||
gheight = height;
|
||||
|
||||
curses_calc_pad();
|
||||
ds->surface->width = width * FONT_WIDTH;
|
||||
ds->surface->height = height * FONT_HEIGHT;
|
||||
}
|
||||
|
||||
#ifndef _WIN32
|
||||
|
@ -167,8 +166,6 @@ static void curses_refresh(DisplayState *ds)
|
|||
clear();
|
||||
refresh();
|
||||
curses_calc_pad();
|
||||
ds->surface->width = FONT_WIDTH * width;
|
||||
ds->surface->height = FONT_HEIGHT * height;
|
||||
vga_hw_invalidate();
|
||||
invalidate = 0;
|
||||
}
|
||||
|
@ -195,8 +192,6 @@ static void curses_refresh(DisplayState *ds)
|
|||
refresh();
|
||||
curses_calc_pad();
|
||||
curses_update(ds, 0, 0, width, height);
|
||||
ds->surface->width = FONT_WIDTH * width;
|
||||
ds->surface->height = FONT_HEIGHT * height;
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
|
@ -355,13 +350,11 @@ void curses_display_init(DisplayState *ds, int full_screen)
|
|||
#endif
|
||||
|
||||
dcl = (DisplayChangeListener *) g_malloc0(sizeof(DisplayChangeListener));
|
||||
dcl->dpy_update = curses_update;
|
||||
dcl->dpy_resize = curses_resize;
|
||||
dcl->dpy_text_update = curses_update;
|
||||
dcl->dpy_text_resize = curses_resize;
|
||||
dcl->dpy_refresh = curses_refresh;
|
||||
dcl->dpy_text_cursor = curses_cursor_position;
|
||||
register_displaychangelistener(ds, dcl);
|
||||
qemu_free_displaysurface(ds);
|
||||
ds->surface = qemu_create_displaysurface_from(640, 400, 0, 0, (uint8_t*) screen);
|
||||
|
||||
invalidate = 1;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue