Loading include/ui/qemu-pixman.h +7 −0 Original line number Diff line number Diff line Loading @@ -44,5 +44,12 @@ pixman_image_t *qemu_pixman_mirror_create(pixman_format_code_t format, void qemu_pixman_image_unref(pixman_image_t *image); pixman_color_t qemu_pixman_color(PixelFormat *pf, uint32_t color); pixman_image_t *qemu_pixman_glyph_from_vgafont(int height, const uint8_t *font, unsigned int ch); void qemu_pixman_glyph_render(pixman_image_t *glyph, pixman_image_t *surface, pixman_color_t *fgcol, pixman_color_t *bgcol, int x, int y, int cw, int ch); #endif /* QEMU_PIXMAN_H */ ui/qemu-pixman.c +43 −0 Original line number Diff line number Diff line Loading @@ -90,3 +90,46 @@ pixman_color_t qemu_pixman_color(PixelFormat *pf, uint32_t color) c.alpha = ((color & pf->amask) >> pf->ashift) << (16 - pf->abits); return c; } pixman_image_t *qemu_pixman_glyph_from_vgafont(int height, const uint8_t *font, unsigned int ch) { pixman_image_t *glyph; uint8_t *data; bool bit; int x, y; glyph = pixman_image_create_bits(PIXMAN_a8, 8, height, NULL, 0); data = (uint8_t *)pixman_image_get_data(glyph); font += height * ch; for (y = 0; y < height; y++, font++) { for (x = 0; x < 8; x++, data++) { bit = (*font) & (1 << (7-x)); *data = bit ? 0xff : 0x00; } } return glyph; } void qemu_pixman_glyph_render(pixman_image_t *glyph, pixman_image_t *surface, pixman_color_t *fgcol, pixman_color_t *bgcol, int x, int y, int cw, int ch) { pixman_image_t *ifg = pixman_image_create_solid_fill(fgcol); pixman_image_t *ibg = pixman_image_create_solid_fill(bgcol); pixman_image_composite(PIXMAN_OP_SRC, ibg, NULL, surface, 0, 0, 0, 0, cw * x, ch * y, cw, ch); pixman_image_composite(PIXMAN_OP_OVER, ifg, glyph, surface, 0, 0, 0, 0, cw * x, ch * y, cw, ch); pixman_image_unref(ifg); pixman_image_unref(ibg); } Loading
include/ui/qemu-pixman.h +7 −0 Original line number Diff line number Diff line Loading @@ -44,5 +44,12 @@ pixman_image_t *qemu_pixman_mirror_create(pixman_format_code_t format, void qemu_pixman_image_unref(pixman_image_t *image); pixman_color_t qemu_pixman_color(PixelFormat *pf, uint32_t color); pixman_image_t *qemu_pixman_glyph_from_vgafont(int height, const uint8_t *font, unsigned int ch); void qemu_pixman_glyph_render(pixman_image_t *glyph, pixman_image_t *surface, pixman_color_t *fgcol, pixman_color_t *bgcol, int x, int y, int cw, int ch); #endif /* QEMU_PIXMAN_H */
ui/qemu-pixman.c +43 −0 Original line number Diff line number Diff line Loading @@ -90,3 +90,46 @@ pixman_color_t qemu_pixman_color(PixelFormat *pf, uint32_t color) c.alpha = ((color & pf->amask) >> pf->ashift) << (16 - pf->abits); return c; } pixman_image_t *qemu_pixman_glyph_from_vgafont(int height, const uint8_t *font, unsigned int ch) { pixman_image_t *glyph; uint8_t *data; bool bit; int x, y; glyph = pixman_image_create_bits(PIXMAN_a8, 8, height, NULL, 0); data = (uint8_t *)pixman_image_get_data(glyph); font += height * ch; for (y = 0; y < height; y++, font++) { for (x = 0; x < 8; x++, data++) { bit = (*font) & (1 << (7-x)); *data = bit ? 0xff : 0x00; } } return glyph; } void qemu_pixman_glyph_render(pixman_image_t *glyph, pixman_image_t *surface, pixman_color_t *fgcol, pixman_color_t *bgcol, int x, int y, int cw, int ch) { pixman_image_t *ifg = pixman_image_create_solid_fill(fgcol); pixman_image_t *ibg = pixman_image_create_solid_fill(bgcol); pixman_image_composite(PIXMAN_OP_SRC, ibg, NULL, surface, 0, 0, 0, 0, cw * x, ch * y, cw, ch); pixman_image_composite(PIXMAN_OP_OVER, ifg, glyph, surface, 0, 0, 0, 0, cw * x, ch * y, cw, ch); pixman_image_unref(ifg); pixman_image_unref(ibg); }