Roderick Colenbrander : winex11: Add helper function get_xrender_format_from_color_shifts.
Alexandre Julliard
julliard at winehq.org
Thu Sep 10 09:08:35 CDT 2009
Module: wine
Branch: master
Commit: 88b990b2c1852eb8adec18b0cfa486706ec56d1e
URL: http://source.winehq.org/git/wine.git/?a=commit;h=88b990b2c1852eb8adec18b0cfa486706ec56d1e
Author: Roderick Colenbrander <thunderbird2k at gmail.com>
Date: Thu Sep 10 10:37:50 2009 +0200
winex11: Add helper function get_xrender_format_from_color_shifts.
---
dlls/winex11.drv/xrender.c | 57 ++++++++++++++++++++++---------------------
1 files changed, 29 insertions(+), 28 deletions(-)
diff --git a/dlls/winex11.drv/xrender.c b/dlls/winex11.drv/xrender.c
index a0f9b7b..bc759a8 100644
--- a/dlls/winex11.drv/xrender.c
+++ b/dlls/winex11.drv/xrender.c
@@ -427,39 +427,40 @@ static WineXRenderFormat *get_xrender_format(WXRFormat format)
return NULL;
}
-static WineXRenderFormat *get_xrender_format_from_pdevice(X11DRV_PDEVICE *physDev)
+static WineXRenderFormat *get_xrender_format_from_color_shifts(int depth, ColorShifts *shifts)
{
- if(physDev->depth == 1)
+ int redMask, greenMask, blueMask;
+ unsigned int i;
+
+ if(depth == 1)
return get_xrender_format(WXR_FORMAT_MONO);
+
/* physDevs of a depth <=8, don't have color_shifts set and XRender can't handle those except for 1-bit */
- else if(!physDev->color_shifts)
+ if(!shifts)
return default_format;
- else
- {
- int redMask=0, greenMask=0, blueMask=0;
- int i;
- ColorShifts *shifts = physDev->color_shifts;
- redMask = shifts->physicalRed.max << shifts->physicalRed.shift;
- greenMask = shifts->physicalGreen.max << shifts->physicalGreen.shift;
- blueMask = shifts->physicalBlue.max << shifts->physicalBlue.shift;
+ redMask = shifts->physicalRed.max << shifts->physicalRed.shift;
+ greenMask = shifts->physicalGreen.max << shifts->physicalGreen.shift;
+ blueMask = shifts->physicalBlue.max << shifts->physicalBlue.shift;
- /* Try to locate a format which matches the specification of the dibsection. */
- for(i = 0; i < (sizeof(wxr_formats_template) / sizeof(wxr_formats_template[0])); i++)
- {
- if( physDev->depth == wxr_formats_template[i].depth &&
- redMask == (wxr_formats_template[i].redMask << wxr_formats_template[i].red) &&
- greenMask == (wxr_formats_template[i].greenMask << wxr_formats_template[i].green) &&
- blueMask == (wxr_formats_template[i].blueMask << wxr_formats_template[i].blue) )
+ /* Try to locate a format which matches the specification of the dibsection. */
+ for(i = 0; i < (sizeof(wxr_formats_template) / sizeof(wxr_formats_template[0])); i++)
+ {
+ if( depth == wxr_formats_template[i].depth &&
+ redMask == (wxr_formats_template[i].redMask << wxr_formats_template[i].red) &&
+ greenMask == (wxr_formats_template[i].greenMask << wxr_formats_template[i].green) &&
+ blueMask == (wxr_formats_template[i].blueMask << wxr_formats_template[i].blue) )
- {
- /* When we reach this stage the format was found in our template table but this doesn't mean that
- * the Xserver also supports this format (e.g. its depth might be too low). The call below verifies that.
- */
- return get_xrender_format(wxr_formats_template[i].wxr_format);
- }
+ {
+ /* When we reach this stage the format was found in our template table but this doesn't mean that
+ * the Xserver also supports this format (e.g. its depth might be too low). The call below verifies that.
+ */
+ return get_xrender_format(wxr_formats_template[i].wxr_format);
}
}
+
+ /* This should not happen because when we reach 'shifts' must have been set and we only allows shifts which are backed by X */
+ ERR("No XRender format found!\n");
return NULL;
}
@@ -1398,7 +1399,7 @@ BOOL X11DRV_XRender_ExtTextOut( X11DRV_PDEVICE *physDev, INT x, INT y, UINT flag
unsigned int idx;
double cosEsc, sinEsc;
LOGFONTW lf;
- WineXRenderFormat *dst_format = get_xrender_format_from_pdevice(physDev);
+ WineXRenderFormat *dst_format = get_xrender_format_from_color_shifts(physDev->depth, physDev->color_shifts);
Picture tile_pict = 0;
/* Do we need to disable antialiasing because of palette mode? */
@@ -1804,7 +1805,7 @@ BOOL CDECL X11DRV_AlphaBlend(X11DRV_PDEVICE *devDst, INT xDst, INT yDst, INT wid
POINT pts[2];
BOOL top_down = FALSE;
RGNDATA *rgndata;
- WineXRenderFormat *dst_format = get_xrender_format_from_pdevice(devDst);
+ WineXRenderFormat *dst_format = get_xrender_format_from_color_shifts(devDst->depth, devDst->color_shifts);
WineXRenderFormat *src_format;
int repeat_src;
@@ -1994,8 +1995,8 @@ BOOL X11DRV_XRender_GetSrcAreaStretch(X11DRV_PDEVICE *physDevSrc, X11DRV_PDEVICE
int height = visRectDst->bottom - visRectDst->top;
int x_src = physDevSrc->dc_rect.left + visRectSrc->left;
int y_src = physDevSrc->dc_rect.top + visRectSrc->top;
- WineXRenderFormat *src_format = get_xrender_format_from_pdevice(physDevSrc);
- WineXRenderFormat *dst_format = get_xrender_format_from_pdevice(physDevDst);
+ WineXRenderFormat *src_format = get_xrender_format_from_color_shifts(physDevSrc->depth, physDevSrc->color_shifts);
+ WineXRenderFormat *dst_format = get_xrender_format_from_color_shifts(physDevDst->depth, physDevDst->color_shifts);
Picture src_pict=0, dst_pict=0, mask_pict=0;
double xscale = widthSrc/(double)widthDst;
More information about the wine-cvs
mailing list