From ea700f5d549f0cfbbb7ff2e445f714aa2858c7e1 Mon Sep 17 00:00:00 2001 From: Roderick Colenbrander Date: Mon, 6 Jul 2009 23:01:07 +0200 Subject: [PATCH] winex11: Add a helper function for converting a random color to a XRenderColor. --- dlls/winex11.drv/xrender.c | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/dlls/winex11.drv/xrender.c b/dlls/winex11.drv/xrender.c index dd53f23765e..a3f5c3ba54b 100644 --- a/dlls/winex11.drv/xrender.c +++ b/dlls/winex11.drv/xrender.c @@ -390,6 +390,29 @@ sym_not_found: else TRACE("Using X11 core fonts\n"); } +/* Helper function to convert from a color packed in a 32-bit integer to a XRenderColor */ +static void get_xrender_color(WineXRenderFormat *wxr_format, int src_color, XRenderColor *dst_color) +{ + XRenderPictFormat *pf = wxr_format->pict_format; + + if(pf->direct.redMask) + dst_color->red = ((src_color >> pf->direct.red) & pf->direct.redMask) * 65535/pf->direct.redMask; + else + dst_color->red = 0; + + if(pf->direct.greenMask) + dst_color->green = ((src_color >> pf->direct.green) & pf->direct.greenMask) * 65535/pf->direct.greenMask; + else + dst_color->green = 0; + + if(pf->direct.blueMask) + dst_color->blue = ((src_color >> pf->direct.blue) & pf->direct.blueMask) * 65535/pf->direct.blueMask; + else + dst_color->blue = 0; + + dst_color->alpha = 0xffff; +} + static WineXRenderFormat *get_xrender_format(WXRFormat format) { int i; @@ -1323,23 +1346,7 @@ static Picture get_tile_pict(WineXRenderFormat *wxr_format, int text_pixel) if(text_pixel != tile->current_color && wxr_format->format != WXR_FORMAT_MONO) { - /* Map 0 -- 0xff onto 0 -- 0xffff */ - int r_shift, r_len; - int g_shift, g_len; - int b_shift, b_len; - - ExamineBitfield (visual->red_mask, &r_shift, &r_len ); - ExamineBitfield (visual->green_mask, &g_shift, &g_len); - ExamineBitfield (visual->blue_mask, &b_shift, &b_len); - - col.red = GetField(text_pixel, r_shift, r_len); - col.red |= col.red << 8; - col.green = GetField(text_pixel, g_shift, g_len); - col.green |= col.green << 8; - col.blue = GetField(text_pixel, b_shift, b_len); - col.blue |= col.blue << 8; - col.alpha = 0xffff; - + get_xrender_color(wxr_format, text_pixel, &col); wine_tsx11_lock(); pXRenderFillRectangle(gdi_display, PictOpSrc, tile->pict, &col, 0, 0, 1, 1); wine_tsx11_unlock(); -- 2.11.4.GIT