diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2010-05-21 11:54:33 +0200 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2010-05-24 15:18:24 -0500 |
commit | fbe6d7a48d71e1dd05faa380c68965da4f8de1ac (patch) | |
tree | 63d524a1fb00d4647ef463ad01253bf3c4480d2c /hw/vmware_vga.c | |
parent | 254e59506e34efcc92384ef30af3c266e4633c66 (diff) |
use new cursor struct + functions for vmware vga and sdl.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'hw/vmware_vga.c')
-rw-r--r-- | hw/vmware_vga.c | 40 |
1 files changed, 35 insertions, 5 deletions
diff --git a/hw/vmware_vga.c b/hw/vmware_vga.c index e70936913d..bf2a6998c3 100644 --- a/hw/vmware_vga.c +++ b/hw/vmware_vga.c @@ -477,13 +477,43 @@ struct vmsvga_cursor_definition_s { static inline void vmsvga_cursor_define(struct vmsvga_state_s *s, struct vmsvga_cursor_definition_s *c) { - int i; - for (i = SVGA_BITMAP_SIZE(c->width, c->height) - 1; i >= 0; i --) - c->mask[i] = ~c->mask[i]; + QEMUCursor *qc; + int i, pixels; + + qc = cursor_alloc(c->width, c->height); + qc->hot_x = c->hot_x; + qc->hot_y = c->hot_y; + switch (c->bpp) { + case 1: + cursor_set_mono(qc, 0xffffff, 0x000000, (void*)c->image, + 1, (void*)c->mask); +#ifdef DEBUG + cursor_print_ascii_art(qc, "vmware/mono"); +#endif + break; + case 32: + /* fill alpha channel from mask, set color to zero */ + cursor_set_mono(qc, 0x000000, 0x000000, (void*)c->mask, + 1, (void*)c->mask); + /* add in rgb values */ + pixels = c->width * c->height; + for (i = 0; i < pixels; i++) { + qc->data[i] |= c->image[i] & 0xffffff; + } +#ifdef DEBUG + cursor_print_ascii_art(qc, "vmware/32bit"); +#endif + break; + default: + fprintf(stderr, "%s: unhandled bpp %d, using fallback cursor\n", + __FUNCTION__, c->bpp); + cursor_put(qc); + qc = cursor_builtin_left_ptr(); + } if (s->vga.ds->cursor_define) - s->vga.ds->cursor_define(c->width, c->height, c->bpp, c->hot_x, c->hot_y, - (uint8_t *) c->image, (uint8_t *) c->mask); + s->vga.ds->cursor_define(qc); + cursor_put(qc); } #endif |