Commit e1386528 authored by Roderick Colenbrander's avatar Roderick Colenbrander Committed by Alexandre Julliard

winex11: Move glyph code over to get_xrender_format.

parent bf86daa0
...@@ -54,10 +54,11 @@ static BOOL X11DRV_XRender_Installed = FALSE; ...@@ -54,10 +54,11 @@ static BOOL X11DRV_XRender_Installed = FALSE;
#define RepeatReflect 3 #define RepeatReflect 3
#endif #endif
#define MAX_FORMATS 9 #define MAX_FORMATS 10
typedef enum wine_xrformat typedef enum wine_xrformat
{ {
WXR_FORMAT_MONO, WXR_FORMAT_MONO,
WXR_FORMAT_GRAY,
WXR_FORMAT_X1R5G5B5, WXR_FORMAT_X1R5G5B5,
WXR_FORMAT_X1B5G5R5, WXR_FORMAT_X1B5G5R5,
WXR_FORMAT_R5G6B5, WXR_FORMAT_R5G6B5,
...@@ -86,6 +87,7 @@ static const WineXRenderFormatTemplate wxr_formats_template[] = ...@@ -86,6 +87,7 @@ static const WineXRenderFormatTemplate wxr_formats_template[] =
{ {
/* Format depth alpha mask red mask green mask blue mask*/ /* Format depth alpha mask red mask green mask blue mask*/
{WXR_FORMAT_MONO, 1, 0, 0x01, 0, 0, 0, 0, 0, 0 }, {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_X1R5G5B5, 16, 0, 0, 10, 0x1f, 5, 0x1f, 0, 0x1f },
{WXR_FORMAT_X1B5G5R5, 16, 0, 0, 0, 0x1f, 5, 0x1f, 10, 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 }, {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 ...@@ -121,7 +123,7 @@ typedef enum { AA_None = 0, AA_Grey, AA_RGB, AA_BGR, AA_VRGB, AA_VBGR, AA_MAXVAL
typedef struct typedef struct
{ {
GlyphSet glyphset; GlyphSet glyphset;
XRenderPictFormat *font_format; WineXRenderFormat *font_format;
int nrealized; int nrealized;
BOOL *realized; BOOL *realized;
void **bitmaps; void **bitmaps;
...@@ -828,8 +830,7 @@ static BOOL UploadGlyph(X11DRV_PDEVICE *physDev, int glyph, AA_Type format) ...@@ -828,8 +830,7 @@ static BOOL UploadGlyph(X11DRV_PDEVICE *physDev, int glyph, AA_Type format)
gsCacheEntry *entry = glyphsetCache + physDev->xrender->cache_index; gsCacheEntry *entry = glyphsetCache + physDev->xrender->cache_index;
gsCacheEntryFormat *formatEntry; gsCacheEntryFormat *formatEntry;
UINT ggo_format = GGO_GLYPH_INDEX; UINT ggo_format = GGO_GLYPH_INDEX;
XRenderPictFormat pf; WXRFormat wxr_format;
unsigned long pf_mask;
static const char zero[4]; static const char zero[4];
static const MAT2 identity = { {0,1},{0,0},{0,0},{0,1} }; 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) ...@@ -918,48 +919,28 @@ static BOOL UploadGlyph(X11DRV_PDEVICE *physDev, int glyph, AA_Type format)
if(formatEntry->glyphset == 0 && X11DRV_XRender_Installed) { if(formatEntry->glyphset == 0 && X11DRV_XRender_Installed) {
switch(format) { switch(format) {
case AA_Grey: case AA_Grey:
pf_mask = PictFormatType | PictFormatDepth | PictFormatAlpha | PictFormatAlphaMask, wxr_format = WXR_FORMAT_GRAY;
pf.type = PictTypeDirect; break;
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;
default: case AA_RGB:
ERR("aa = %d - not implemented\n", format); case AA_BGR:
case AA_None: case AA_VRGB:
pf_mask = PictFormatType | PictFormatDepth | PictFormatAlpha | PictFormatAlphaMask, case AA_VBGR:
pf.type = PictTypeDirect; wxr_format = WXR_FORMAT_A8R8G8B8;
pf.depth = 1; break;
pf.direct.alpha = 0;
pf.direct.alphaMask = 1;
break;
}
wine_tsx11_lock(); default:
formatEntry->font_format = pXRenderFindFormat(gdi_display, pf_mask, &pf, 0); ERR("aa = %d - not implemented\n", format);
formatEntry->glyphset = pXRenderCreateGlyphSet(gdi_display, formatEntry->font_format); case AA_None:
wine_tsx11_unlock(); 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 ...@@ -1571,7 +1552,7 @@ BOOL X11DRV_XRender_ExtTextOut( X11DRV_PDEVICE *physDev, INT x, INT y, UINT flag
pXRenderCompositeText16(gdi_display, render_op, pXRenderCompositeText16(gdi_display, render_op,
tile_pict, tile_pict,
physDev->xrender->pict, physDev->xrender->pict,
formatEntry->font_format, formatEntry->font_format->pict_format,
0, 0, 0, 0, elts, count); 0, 0, 0, 0, elts, count);
wine_tsx11_unlock(); wine_tsx11_unlock();
HeapFree(GetProcessHeap(), 0, elts); HeapFree(GetProcessHeap(), 0, elts);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment