Alexandre Julliard : winex11.drv: Don' t call GDI functions while holding the xrender lock.
Alexandre Julliard
julliard at winehq.org
Fri Sep 21 07:23:00 CDT 2007
Module: wine
Branch: master
Commit: d08fbfc3b0151368f01ccc7feacd605622500425
URL: http://source.winehq.org/git/wine.git/?a=commit;h=d08fbfc3b0151368f01ccc7feacd605622500425
Author: Alexandre Julliard <julliard at winehq.org>
Date: Fri Sep 21 10:47:45 2007 +0200
winex11.drv: Don't call GDI functions while holding the xrender lock.
---
dlls/winex11.drv/xrender.c | 20 ++++++++++----------
1 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/dlls/winex11.drv/xrender.c b/dlls/winex11.drv/xrender.c
index b659e21..cbf83bc 100644
--- a/dlls/winex11.drv/xrender.c
+++ b/dlls/winex11.drv/xrender.c
@@ -1130,7 +1130,6 @@ BOOL X11DRV_XRender_ExtTextOut( X11DRV_PDEVICE *physDev, INT x, INT y, UINT flag
{
RGNDATA *data;
XGCValues xgcval;
- int render_op = PictOpOver;
gsCacheEntry *entry;
gsCacheEntryFormat *formatEntry;
BOOL retv = FALSE;
@@ -1215,8 +1214,6 @@ BOOL X11DRV_XRender_ExtTextOut( X11DRV_PDEVICE *physDev, INT x, INT y, UINT flag
DeleteObject( clip_region );
}
- EnterCriticalSection(&xrender_cs);
-
if(X11DRV_XRender_Installed) {
if(!physDev->xrender->pict) {
XRenderPictureAttributes pa;
@@ -1245,15 +1242,10 @@ BOOL X11DRV_XRender_ExtTextOut( X11DRV_PDEVICE *physDev, INT x, INT y, UINT flag
wine_tsx11_unlock();
HeapFree( GetProcessHeap(), 0, data );
}
-
- tile_pict = get_tile_pict(depth_type, physDev->textPixel);
-
- /* FIXME the mapping of Text/BkColor onto 1 or 0 needs investigation.
- */
- if((depth_type == mono_drawable) && (textPixel == 0))
- render_op = PictOpOutReverse; /* This gives us 'black' text */
}
+ EnterCriticalSection(&xrender_cs);
+
entry = glyphsetCache + physDev->xrender->cache_index;
if( disable_antialias == FALSE )
aa_type = entry->aa_default;
@@ -1285,6 +1277,7 @@ BOOL X11DRV_XRender_ExtTextOut( X11DRV_PDEVICE *physDev, INT x, INT y, UINT flag
XGlyphElt16 *elts = HeapAlloc(GetProcessHeap(), 0, sizeof(XGlyphElt16) * count);
INT offset = 0;
POINT desired, current;
+ int render_op = PictOpOver;
/* There's a bug in XRenderCompositeText that ignores the xDst and yDst parameters.
So we pass zeros to the function and move to our starting position using the first
@@ -1294,6 +1287,13 @@ BOOL X11DRV_XRender_ExtTextOut( X11DRV_PDEVICE *physDev, INT x, INT y, UINT flag
desired.y = physDev->dc_rect.top + y;
current.x = current.y = 0;
+ tile_pict = get_tile_pict(depth_type, physDev->textPixel);
+
+ /* FIXME the mapping of Text/BkColor onto 1 or 0 needs investigation.
+ */
+ if((depth_type == mono_drawable) && (textPixel == 0))
+ render_op = PictOpOutReverse; /* This gives us 'black' text */
+
for(idx = 0; idx < count; idx++)
{
elts[idx].glyphset = formatEntry->glyphset;
More information about the wine-cvs
mailing list