Module: wine Branch: master Commit: e13865285eae43abd8d0b04dcb6182e0b0694e78 URL: http://source.winehq.org/git/wine.git/?a=commit;h=e13865285eae43abd8d0b04dcb...
Author: Roderick Colenbrander thunderbird2k@gmail.com Date: Sun Jul 5 21:03:48 2009 +0200
winex11: Move glyph code over to get_xrender_format.
---
dlls/winex11.drv/xrender.c | 71 ++++++++++++++++---------------------------- 1 files changed, 26 insertions(+), 45 deletions(-)
diff --git a/dlls/winex11.drv/xrender.c b/dlls/winex11.drv/xrender.c index afbadb3..dd53f23 100644 --- a/dlls/winex11.drv/xrender.c +++ b/dlls/winex11.drv/xrender.c @@ -54,10 +54,11 @@ static BOOL X11DRV_XRender_Installed = FALSE; #define RepeatReflect 3 #endif
-#define MAX_FORMATS 9 +#define MAX_FORMATS 10 typedef enum wine_xrformat { WXR_FORMAT_MONO, + WXR_FORMAT_GRAY, WXR_FORMAT_X1R5G5B5, WXR_FORMAT_X1B5G5R5, WXR_FORMAT_R5G6B5, @@ -86,6 +87,7 @@ static const WineXRenderFormatTemplate wxr_formats_template[] = { /* Format depth alpha mask red mask green mask blue mask*/ {WXR_FORMAT_MONO, 1, 0, 0x01, 0, 0, 0, 0, 0, 0 }, + {WXR_FORMAT_GRAY, 8, 0, 0xff, 0, 0, 0, 0, 0, 0 }, {WXR_FORMAT_X1R5G5B5, 16, 0, 0, 10, 0x1f, 5, 0x1f, 0, 0x1f }, {WXR_FORMAT_X1B5G5R5, 16, 0, 0, 0, 0x1f, 5, 0x1f, 10, 0x1f }, {WXR_FORMAT_R5G6B5, 16, 0, 0, 11, 0x1f, 5, 0x3f, 0, 0x1f }, @@ -121,7 +123,7 @@ typedef enum { AA_None = 0, AA_Grey, AA_RGB, AA_BGR, AA_VRGB, AA_VBGR, AA_MAXVAL typedef struct { GlyphSet glyphset; - XRenderPictFormat *font_format; + WineXRenderFormat *font_format; int nrealized; BOOL *realized; void **bitmaps; @@ -828,8 +830,7 @@ static BOOL UploadGlyph(X11DRV_PDEVICE *physDev, int glyph, AA_Type format) gsCacheEntry *entry = glyphsetCache + physDev->xrender->cache_index; gsCacheEntryFormat *formatEntry; UINT ggo_format = GGO_GLYPH_INDEX; - XRenderPictFormat pf; - unsigned long pf_mask; + WXRFormat wxr_format; static const char zero[4]; static const MAT2 identity = { {0,1},{0,0},{0,0},{0,1} };
@@ -918,48 +919,28 @@ static BOOL UploadGlyph(X11DRV_PDEVICE *physDev, int glyph, AA_Type format)
if(formatEntry->glyphset == 0 && X11DRV_XRender_Installed) { switch(format) { - case AA_Grey: - pf_mask = PictFormatType | PictFormatDepth | PictFormatAlpha | PictFormatAlphaMask, - pf.type = PictTypeDirect; - pf.depth = 8; - pf.direct.alpha = 0; - pf.direct.alphaMask = 0xff; - break; - - case AA_RGB: - case AA_BGR: - case AA_VRGB: - case AA_VBGR: - pf_mask = PictFormatType | PictFormatDepth | PictFormatRed | PictFormatRedMask | - PictFormatGreen | PictFormatGreenMask | PictFormatBlue | - PictFormatBlueMask | PictFormatAlpha | PictFormatAlphaMask; - pf.type = PictTypeDirect; - pf.depth = 32; - pf.direct.red = 16; - pf.direct.redMask = 0xff; - pf.direct.green = 8; - pf.direct.greenMask = 0xff; - pf.direct.blue = 0; - pf.direct.blueMask = 0xff; - pf.direct.alpha = 24; - pf.direct.alphaMask = 0xff; - break; + case AA_Grey: + wxr_format = WXR_FORMAT_GRAY; + break;
- default: - ERR("aa = %d - not implemented\n", format); - case AA_None: - pf_mask = PictFormatType | PictFormatDepth | PictFormatAlpha | PictFormatAlphaMask, - pf.type = PictTypeDirect; - pf.depth = 1; - pf.direct.alpha = 0; - pf.direct.alphaMask = 1; - break; - } + case AA_RGB: + case AA_BGR: + case AA_VRGB: + case AA_VBGR: + wxr_format = WXR_FORMAT_A8R8G8B8; + break;
- wine_tsx11_lock(); - formatEntry->font_format = pXRenderFindFormat(gdi_display, pf_mask, &pf, 0); - formatEntry->glyphset = pXRenderCreateGlyphSet(gdi_display, formatEntry->font_format); - wine_tsx11_unlock(); + default: + ERR("aa = %d - not implemented\n", format); + case AA_None: + wxr_format = WXR_FORMAT_MONO; + break; + } + + wine_tsx11_lock(); + formatEntry->font_format = get_xrender_format(wxr_format); + formatEntry->glyphset = pXRenderCreateGlyphSet(gdi_display, formatEntry->font_format->pict_format); + wine_tsx11_unlock(); }
@@ -1571,7 +1552,7 @@ BOOL X11DRV_XRender_ExtTextOut( X11DRV_PDEVICE *physDev, INT x, INT y, UINT flag pXRenderCompositeText16(gdi_display, render_op, tile_pict, physDev->xrender->pict, - formatEntry->font_format, + formatEntry->font_format->pict_format, 0, 0, 0, 0, elts, count); wine_tsx11_unlock(); HeapFree(GetProcessHeap(), 0, elts);