diff mbox

[07/23] console: switch color_table_rgb to pixman_color_t

Message ID 1363772625-9182-8-git-send-email-kraxel@redhat.com
State New
Headers show

Commit Message

Gerd Hoffmann March 20, 2013, 9:43 a.m. UTC
Now that all text console rendering uses pixman we can easily
switch the color tables to use pixman_color_t directly.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 ui/console.c |   24 ++++++++----------------
 1 file changed, 8 insertions(+), 16 deletions(-)

Comments

Igor Mitsyanko March 20, 2013, 7:25 p.m. UTC | #1
On 03/20/2013 01:43 PM, Gerd Hoffmann wrote:
>
>> Now that all text console rendering uses pixman we can easily
>> switch the color tables to use pixman_color_t directly.
>>
>> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
>> ---
>>   ui/console.c |   24 ++++++++----------------
>>   1 file changed, 8 insertions(+), 16 deletions(-)
>>
>>
>

After this patch qemu_pixman_color is not used by anyone, maybe remove it
here?
Søren Sandmann March 21, 2013, 4:49 a.m. UTC | #2
Gerd Hoffmann <kraxel@redhat.com> writes:

> @@ -255,7 +250,10 @@ enum color_names {
>  };
>  #endif
>  
> -static const uint32_t color_table_rgb[2][8] = {
> +#define QEMU_RGB(r, g, b)                                               \
> +    { .red = r << 8, .green = g << 8, .blue = b << 8, .alpha = 0 }

Are you sure you don't want alpha = 0xffff here? When using alpha = 0
with the OVER operator, the result will be that the color is added to
the background rather than composited with it. For example if the
foreground color is pink: 0xff00ff and the background is green:
0x00ff00, the result will be white (0xff00ff + 0x00ff00 = 0xffffff) text
on green background. With alpha = 0xffff, you would get pink text on
green background.


Søren
diff mbox

Patch

diff --git a/ui/console.c b/ui/console.c
index 4e79268..fbec6cb 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -32,9 +32,6 @@ 
 #define MAX_CONSOLES 12
 #define CONSOLE_CURSOR_PERIOD 500
 
-#define QEMU_RGBA(r, g, b, a) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b))
-#define QEMU_RGB(r, g, b) QEMU_RGBA(r, g, b, 0xff)
-
 typedef struct TextAttributes {
     uint8_t fgcol:4;
     uint8_t bgcol:4;
@@ -210,17 +207,15 @@  void vga_hw_text_update(console_ch_t *chardata)
 
 static void vga_fill_rect(QemuConsole *con,
                           int posx, int posy, int width, int height,
-                          uint32_t color)
+                          pixman_color_t color)
 {
     DisplaySurface *surface = qemu_console_surface(con);
     pixman_rectangle16_t rect = {
         .x = posx, .y = posy, .width = width, .height = height
     };
-    pixman_color_t pcolor;
 
-    pcolor = qemu_pixman_color(&surface->pf, color);
     pixman_image_fill_rectangles(PIXMAN_OP_SRC, surface->image,
-                                 &pcolor, 1, &rect);
+                                 &color, 1, &rect);
 }
 
 /* copy from (xs, ys) to (xd, yd) a rectangle of size (w, h) */
@@ -255,7 +250,10 @@  enum color_names {
 };
 #endif
 
-static const uint32_t color_table_rgb[2][8] = {
+#define QEMU_RGB(r, g, b)                                               \
+    { .red = r << 8, .green = g << 8, .blue = b << 8, .alpha = 0 }
+
+static const pixman_color_t color_table_rgb[2][8] = {
     {   /* dark */
         QEMU_RGB(0x00, 0x00, 0x00),  /* black */
         QEMU_RGB(0xaa, 0x00, 0x00),  /* red */
@@ -316,9 +314,7 @@  static void vga_putcharxy(QemuConsole *s, int x, int y, int ch,
 {
     static pixman_image_t *glyphs[256];
     DisplaySurface *surface = qemu_console_surface(s);
-    unsigned int fgcol, bgcol;
-    pixman_image_t *ifg, *ibg;
-    pixman_color_t cfg, cbg;
+    pixman_color_t fgcol, bgcol;
 
     if (t_attrib->invers) {
         bgcol = color_table_rgb[t_attrib->bold][t_attrib->fgcol];
@@ -327,16 +323,12 @@  static void vga_putcharxy(QemuConsole *s, int x, int y, int ch,
         fgcol = color_table_rgb[t_attrib->bold][t_attrib->fgcol];
         bgcol = color_table_rgb[t_attrib->bold][t_attrib->bgcol];
     }
-    cfg = qemu_pixman_color(&surface->pf, fgcol);
-    cbg = qemu_pixman_color(&surface->pf, bgcol);
-    ifg = pixman_image_create_solid_fill(&cfg);
-    ibg = pixman_image_create_solid_fill(&cbg);
 
     if (!glyphs[ch]) {
         glyphs[ch] = qemu_pixman_glyph_from_vgafont(FONT_HEIGHT, vgafont16, ch);
     }
     qemu_pixman_glyph_render(glyphs[ch], surface->image,
-                             &cfg, &cbg, x, y, FONT_WIDTH, FONT_HEIGHT);
+                             &fgcol, &bgcol, x, y, FONT_WIDTH, FONT_HEIGHT);
 }
 
 static void text_console_resize(QemuConsole *s)