69
int bgr; /* BGR color order instead of RGB. Only valid for depth == 32 */
76
#define QEMU_BIG_ENDIAN_FLAG 0x01
77
#define QEMU_ALLOCATED_FLAG 0x02
80
uint8_t bits_per_pixel;
81
uint8_t bytes_per_pixel;
82
uint8_t depth; /* color depth in bits */
83
uint32_t rmask, gmask, bmask, amask;
84
uint8_t rshift, gshift, bshift, ashift;
85
uint8_t rmax, gmax, bmax, amax;
86
uint8_t rbits, gbits, bbits, abits;
89
struct DisplaySurface {
73
struct QEMUTimer *gui_timer;
93
int linesize; /* bytes per line */
96
struct PixelFormat pf;
99
struct DisplayChangeListener {
101
uint64_t gui_timer_interval;
75
103
void (*dpy_update)(struct DisplayState *s, int x, int y, int w, int h);
76
void (*dpy_resize)(struct DisplayState *s, int w, int h);
104
void (*dpy_resize)(struct DisplayState *s);
105
void (*dpy_setdata)(struct DisplayState *s);
77
106
void (*dpy_refresh)(struct DisplayState *s);
78
107
void (*dpy_copy)(struct DisplayState *s, int src_x, int src_y,
79
108
int dst_x, int dst_y, int w, int h);
80
109
void (*dpy_fill)(struct DisplayState *s, int x, int y,
81
110
int w, int h, uint32_t c);
111
void (*dpy_text_cursor)(struct DisplayState *s, int x, int y);
113
struct DisplayChangeListener *next;
116
struct DisplayState {
117
struct DisplaySurface *surface;
119
struct QEMUTimer *gui_timer;
121
struct DisplayChangeListener* listeners;
82
123
void (*mouse_set)(int x, int y, int on);
83
124
void (*cursor_define)(int width, int height, int bpp, int hot_x, int hot_y,
84
125
uint8_t *image, uint8_t *mask);
127
struct DisplayState *next;
130
void register_displaystate(DisplayState *ds);
131
DisplayState *get_displaystate(void);
132
DisplaySurface* qemu_create_displaysurface(int width, int height, int bpp, int linesize);
133
DisplaySurface* qemu_resize_displaysurface(DisplaySurface *surface,
134
int width, int height, int bpp, int linesize);
135
DisplaySurface* qemu_create_displaysurface_from(int width, int height, int bpp,
136
int linesize, uint8_t *data);
137
void qemu_free_displaysurface(DisplaySurface *surface);
138
PixelFormat qemu_different_endianness_pixelformat(int bpp);
139
PixelFormat qemu_default_pixelformat(int bpp);
141
static inline int is_buffer_shared(DisplaySurface *surface)
143
return (!(surface->flags & QEMU_ALLOCATED_FLAG));
146
static inline void register_displaychangelistener(DisplayState *ds, DisplayChangeListener *dcl)
148
dcl->next = ds->listeners;
87
152
static inline void dpy_update(DisplayState *s, int x, int y, int w, int h)
89
s->dpy_update(s, x, y, w, h);
92
static inline void dpy_resize(DisplayState *s, int w, int h)
94
s->dpy_resize(s, w, h);
154
struct DisplayChangeListener *dcl = s->listeners;
155
while (dcl != NULL) {
156
dcl->dpy_update(s, x, y, w, h);
161
static inline void dpy_resize(DisplayState *s)
163
struct DisplayChangeListener *dcl = s->listeners;
164
while (dcl != NULL) {
170
static inline void dpy_setdata(DisplayState *s)
172
struct DisplayChangeListener *dcl = s->listeners;
173
while (dcl != NULL) {
174
if (dcl->dpy_setdata) dcl->dpy_setdata(s);
179
static inline void dpy_refresh(DisplayState *s)
181
struct DisplayChangeListener *dcl = s->listeners;
182
while (dcl != NULL) {
183
if (dcl->dpy_refresh) dcl->dpy_refresh(s);
188
static inline void dpy_copy(struct DisplayState *s, int src_x, int src_y,
189
int dst_x, int dst_y, int w, int h) {
190
struct DisplayChangeListener *dcl = s->listeners;
191
while (dcl != NULL) {
193
dcl->dpy_copy(s, src_x, src_y, dst_x, dst_y, w, h);
195
dcl->dpy_update(s, dst_x, dst_y, w, h);
200
static inline void dpy_fill(struct DisplayState *s, int x, int y,
201
int w, int h, uint32_t c) {
202
struct DisplayChangeListener *dcl = s->listeners;
203
while (dcl != NULL) {
204
if (dcl->dpy_fill) dcl->dpy_fill(s, x, y, w, h, c);
209
static inline void dpy_cursor(struct DisplayState *s, int x, int y) {
210
struct DisplayChangeListener *dcl = s->listeners;
211
while (dcl != NULL) {
212
if (dcl->dpy_text_cursor) dcl->dpy_text_cursor(s, x, y);
217
static inline int ds_get_linesize(DisplayState *ds)
219
return ds->surface->linesize;
222
static inline uint8_t* ds_get_data(DisplayState *ds)
224
return ds->surface->data;
227
static inline int ds_get_width(DisplayState *ds)
229
return ds->surface->width;
232
static inline int ds_get_height(DisplayState *ds)
234
return ds->surface->height;
237
static inline int ds_get_bits_per_pixel(DisplayState *ds)
239
return ds->surface->pf.bits_per_pixel;
242
static inline int ds_get_bytes_per_pixel(DisplayState *ds)
244
return ds->surface->pf.bytes_per_pixel;
247
typedef unsigned long console_ch_t;
248
static inline void console_write_ch(console_ch_t *dest, uint32_t ch)
250
cpu_to_le32wu((uint32_t *) dest, ch);
97
253
typedef void (*vga_hw_update_ptr)(void *);
98
254
typedef void (*vga_hw_invalidate_ptr)(void *);
99
255
typedef void (*vga_hw_screen_dump_ptr)(void *, const char *);
101
TextConsole *graphic_console_init(DisplayState *ds, vga_hw_update_ptr update,
102
vga_hw_invalidate_ptr invalidate,
103
vga_hw_screen_dump_ptr screen_dump,
256
typedef void (*vga_hw_text_update_ptr)(void *, console_ch_t *);
258
DisplayState *graphic_console_init(vga_hw_update_ptr update,
259
vga_hw_invalidate_ptr invalidate,
260
vga_hw_screen_dump_ptr screen_dump,
261
vga_hw_text_update_ptr text_update,
105
264
void vga_hw_update(void);
106
265
void vga_hw_invalidate(void);
107
266
void vga_hw_screen_dump(const char *filename);
267
void vga_hw_text_update(console_ch_t *chardata);
109
269
int is_graphic_console(void);
110
CharDriverState *text_console_init(DisplayState *ds, const char *p);
270
int is_fixedsize_console(void);
271
CharDriverState *text_console_init(const char *p);
272
void text_consoles_set_display(DisplayState *ds);
111
273
void console_select(unsigned int index);
112
274
void console_color_init(DisplayState *ds);
275
void qemu_console_resize(DisplayState *ds, int width, int height);
276
void qemu_console_copy(DisplayState *ds, int src_x, int src_y,
277
int dst_x, int dst_y, int w, int h);
115
280
void sdl_display_init(DisplayState *ds, int full_screen, int no_frame);