X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=console.h;h=9615f563645f0670b3dde54fda7b8d2b90ba8b2d;hb=9332f6a2e25cbd9c93b0ab8e46d9f5774d620478;hp=06c9326fd0e61f2e572a18527c6d52b0af0149b5;hpb=7d957bd8cbcbf56f7916d375e65042d767f544b5;p=qemu diff --git a/console.h b/console.h index 06c9326..9615f56 100644 --- a/console.h +++ b/console.h @@ -2,6 +2,7 @@ #define CONSOLE_H #include "qemu-char.h" +#include "qdict.h" /* keyboard/mouse support */ @@ -35,7 +36,7 @@ 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); -struct mouse_transform_info_s { +struct MouseTransformInfo { /* Touchscreen resolution */ int x; int y; @@ -43,8 +44,8 @@ struct mouse_transform_info_s { int a[7]; }; -void do_info_mice(void); -void do_mouse_set(int index); +void do_info_mice(Monitor *mon); +void do_mouse_set(Monitor *mon, const QDict *qdict); /* keysym is a unicode code except for special keys (see QEMU_KEY_xxx constants) */ @@ -75,6 +76,7 @@ void kbd_put_keysym(int keysym); #define QEMU_BIG_ENDIAN_FLAG 0x01 #define QEMU_ALLOCATED_FLAG 0x02 +#define QEMU_REALPIXELS_FLAG 0x04 struct PixelFormat { uint8_t bits_per_pixel; @@ -83,6 +85,7 @@ struct PixelFormat { uint32_t rmask, gmask, bmask, amask; uint8_t rshift, gshift, bshift, ashift; uint8_t rmax, gmax, bmax, amax; + uint8_t rbits, gbits, bbits, abits; }; struct DisplaySurface { @@ -112,28 +115,67 @@ struct DisplayChangeListener { struct DisplayChangeListener *next; }; +struct DisplayAllocator { + DisplaySurface* (*create_displaysurface)(int width, int height); + DisplaySurface* (*resize_displaysurface)(DisplaySurface *surface, int width, int height); + void (*free_displaysurface)(DisplaySurface *surface); +}; + struct DisplayState { struct DisplaySurface *surface; void *opaque; struct QEMUTimer *gui_timer; + struct DisplayAllocator* allocator; struct DisplayChangeListener* listeners; void (*mouse_set)(int x, int y, int on); void (*cursor_define)(int width, int height, int bpp, int hot_x, int hot_y, uint8_t *image, uint8_t *mask); + + struct DisplayState *next; }; -DisplaySurface* qemu_create_displaysurface(int width, int height, int bpp, int linesize); -DisplaySurface* qemu_resize_displaysurface(DisplaySurface *surface, - int width, int height, int bpp, int linesize); +void register_displaystate(DisplayState *ds); +DisplayState *get_displaystate(void); DisplaySurface* qemu_create_displaysurface_from(int width, int height, int bpp, int linesize, uint8_t *data); -void qemu_free_displaysurface(DisplaySurface *surface); +PixelFormat qemu_different_endianness_pixelformat(int bpp); +PixelFormat qemu_default_pixelformat(int bpp); + +extern struct DisplayAllocator default_allocator; +DisplayAllocator *register_displayallocator(DisplayState *ds, DisplayAllocator *da); +DisplaySurface* defaultallocator_create_displaysurface(int width, int height); +DisplaySurface* defaultallocator_resize_displaysurface(DisplaySurface *surface, int width, int height); +void defaultallocator_free_displaysurface(DisplaySurface *surface); + +static inline DisplaySurface* qemu_create_displaysurface(DisplayState *ds, int width, int height) +{ + return ds->allocator->create_displaysurface(width, height); +} + +static inline DisplaySurface* qemu_resize_displaysurface(DisplayState *ds, int width, int height) +{ + return ds->allocator->resize_displaysurface(ds->surface, width, height); +} + +static inline void qemu_free_displaysurface(DisplayState *ds) +{ + ds->allocator->free_displaysurface(ds->surface); +} + +static inline int is_surface_bgr(DisplaySurface *surface) +{ + if (surface->pf.bits_per_pixel == 32 && surface->pf.rshift == 0) + return 1; + else + return 0; +} static inline int is_buffer_shared(DisplaySurface *surface) { - return (!(surface->flags & QEMU_ALLOCATED_FLAG)); + return (!(surface->flags & QEMU_ALLOCATED_FLAG) && + !(surface->flags & QEMU_REALPIXELS_FLAG)); } static inline void register_displaychangelistener(DisplayState *ds, DisplayChangeListener *dcl) @@ -248,11 +290,12 @@ typedef void (*vga_hw_invalidate_ptr)(void *); typedef void (*vga_hw_screen_dump_ptr)(void *, const char *); typedef void (*vga_hw_text_update_ptr)(void *, console_ch_t *); -TextConsole *graphic_console_init(DisplayState *ds, vga_hw_update_ptr update, - vga_hw_invalidate_ptr invalidate, - vga_hw_screen_dump_ptr screen_dump, - vga_hw_text_update_ptr text_update, - void *opaque); +DisplayState *graphic_console_init(vga_hw_update_ptr update, + vga_hw_invalidate_ptr invalidate, + vga_hw_screen_dump_ptr screen_dump, + vga_hw_text_update_ptr text_update, + void *opaque); + void vga_hw_update(void); void vga_hw_invalidate(void); void vga_hw_screen_dump(const char *filename); @@ -260,12 +303,13 @@ void vga_hw_text_update(console_ch_t *chardata); int is_graphic_console(void); int is_fixedsize_console(void); -CharDriverState *text_console_init(DisplayState *ds, const char *p); +CharDriverState *text_console_init(QemuOpts *opts); +void text_consoles_set_display(DisplayState *ds); void console_select(unsigned int index); void console_color_init(DisplayState *ds); -void qemu_console_resize(QEMUConsole *console, int width, int height); -void qemu_console_copy(QEMUConsole *console, int src_x, int src_y, - int dst_x, int dst_y, int w, int h); +void qemu_console_resize(DisplayState *ds, int width, int height); +void qemu_console_copy(DisplayState *ds, int src_x, int src_y, + int dst_x, int dst_y, int w, int h); /* sdl.c */ void sdl_display_init(DisplayState *ds, int full_screen, int no_frame); @@ -278,38 +322,10 @@ void vnc_display_init(DisplayState *ds); void vnc_display_close(DisplayState *ds); int vnc_display_open(DisplayState *ds, const char *display); int vnc_display_password(DisplayState *ds, const char *password); -void do_info_vnc(void); +void do_info_vnc(Monitor *mon); +char *vnc_display_local_addr(DisplayState *ds); /* curses.c */ void curses_display_init(DisplayState *ds, int full_screen); -/* x_keymap.c */ -extern uint8_t _translate_keycode(const int key); - -/* FIXME: term_printf et al should probably go elsewhere so everything - does not need to include console.h */ -/* monitor.c */ -void monitor_init(CharDriverState *hd, int show_banner); -void term_puts(const char *str); -void term_vprintf(const char *fmt, va_list ap); -void term_printf(const char *fmt, ...) __attribute__ ((__format__ (__printf__, 1, 2))); -void term_print_filename(const char *filename); -void term_flush(void); -void term_print_help(void); -void monitor_readline(const char *prompt, int is_password, - char *buf, int buf_size); -void monitor_suspend(void); -void monitor_resume(void); - -/* readline.c */ -typedef void ReadLineFunc(void *opaque, const char *str); - -extern int completion_index; -void add_completion(const char *str); -void readline_handle_byte(int ch); -void readline_find_completion(const char *cmdline); -const char *readline_get_history(unsigned int index); -void readline_start(const char *prompt, int is_password, - ReadLineFunc *readline_func, void *opaque); - #endif