diff options
author | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2004-06-06 15:17:19 +0000 |
---|---|---|
committer | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2004-06-06 15:17:19 +0000 |
commit | a8aa669ba406a0d6530f48e0c87a358ba614aa95 (patch) | |
tree | cfb82fa622338d9b6f23baa4b38d592dedb82571 /hw/vga_template.h | |
parent | a5082316e97abb65d3e10085c50b6497473a9265 (diff) | |
download | qemu-a8aa669ba406a0d6530f48e0c87a358ba614aa95.zip qemu-a8aa669ba406a0d6530f48e0c87a358ba614aa95.tar.gz qemu-a8aa669ba406a0d6530f48e0c87a358ba614aa95.tar.bz2 |
generic hardware cursor support
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@903 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'hw/vga_template.h')
-rw-r--r-- | hw/vga_template.h | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/hw/vga_template.h b/hw/vga_template.h index 766257c..721abcb 100644 --- a/hw/vga_template.h +++ b/hw/vga_template.h @@ -434,6 +434,74 @@ static void glue(vga_draw_line32_, DEPTH)(VGAState *s1, uint8_t *d, #endif } +#if DEPTH != 15 +void glue(vga_draw_cursor_line_, DEPTH)(uint8_t *d1, + const uint8_t *src1, + int poffset, int w, + unsigned int color0, + unsigned int color1, + unsigned int color_xor) +{ + const uint8_t *plane0, *plane1; + int x, b0, b1; + uint8_t *d; + + d = d1; + plane0 = src1; + plane1 = src1 + poffset; + for(x = 0; x < w; x++) { + b0 = (plane0[x >> 3] >> (7 - (x & 7))) & 1; + b1 = (plane1[x >> 3] >> (7 - (x & 7))) & 1; +#if DEPTH == 8 + switch(b0 | (b1 << 1)) { + case 0: + break; + case 1: + d[0] ^= color_xor; + break; + case 2: + d[0] = color0; + break; + case 3: + d[0] = color1; + break; + } +#elif DEPTH == 16 + switch(b0 | (b1 << 1)) { + case 0: + break; + case 1: + ((uint16_t *)d)[0] ^= color_xor; + break; + case 2: + ((uint16_t *)d)[0] = color0; + break; + case 3: + ((uint16_t *)d)[0] = color1; + break; + } +#elif DEPTH == 32 + switch(b0 | (b1 << 1)) { + case 0: + break; + case 1: + ((uint32_t *)d)[0] ^= color_xor; + break; + case 2: + ((uint32_t *)d)[0] = color0; + break; + case 3: + ((uint32_t *)d)[0] = color1; + break; + } +#else +#error unsupported depth +#endif + d += (DEPTH / 8); + } +} +#endif + #undef PUT_PIXEL2 #undef DEPTH #undef BPP |