[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 06/24] pixman: render vgafont glyphs into pixman ima
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PATCH 06/24] pixman: render vgafont glyphs into pixman images |
Date: |
Thu, 4 Apr 2013 09:28:48 +0200 |
Add helper functions to create pixman mask images for glyphs
and to render these glyphs into a pixman image.
Signed-off-by: Gerd Hoffmann <address@hidden>
---
include/ui/qemu-pixman.h | 7 +++++++
ui/qemu-pixman.c | 43 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 50 insertions(+)
diff --git a/include/ui/qemu-pixman.h b/include/ui/qemu-pixman.h
index b0f09b5..f012ec5 100644
--- a/include/ui/qemu-pixman.h
+++ b/include/ui/qemu-pixman.h
@@ -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 */
diff --git a/ui/qemu-pixman.c b/ui/qemu-pixman.c
index be551e0..254bd8c 100644
--- a/ui/qemu-pixman.c
+++ b/ui/qemu-pixman.c
@@ -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);
+}
--
1.7.9.7
- [Qemu-devel] [PATCH v3 00/24] console: console overhaul continued, Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 03/24] hw/vmware_vga.c: add tracepoints for mmio reads+writes, Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 02/24] hw/vmware_vga.c: fix screen resize bug introduced after console revamp, Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 06/24] pixman: render vgafont glyphs into pixman images,
Gerd Hoffmann <=
- [Qemu-devel] [PATCH 09/24] console: switch color_table_rgb to pixman_color_t, Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 10/24] console: add trace events, Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 04/24] hw/vmware_vga.c: various vmware vga fixes., Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 11/24] console: displaystate init revamp, Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 13/24] console: give each QemuConsole its own DisplaySurface, Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 08/24] console: use pixman for font rendering, Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 07/24] console: use pixman for fill+blit, Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 15/24] console: zap g_width + g_height, Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 05/24] pixman: add qemu_pixman_color(), Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 17/24] console: make DisplayState private to console.c, Gerd Hoffmann, 2013/04/04