Alexandre Julliard : winex11: Add a SelectFont entry point in the XRender driver.
Alexandre Julliard
julliard at winehq.org
Mon Sep 12 11:42:59 CDT 2011
Module: wine
Branch: master
Commit: cbfcce1a3dd1de19cb7fade8455448ab24613e4e
URL: http://source.winehq.org/git/wine.git/?a=commit;h=cbfcce1a3dd1de19cb7fade8455448ab24613e4e
Author: Alexandre Julliard <julliard at winehq.org>
Date: Mon Sep 12 11:50:42 2011 +0200
winex11: Add a SelectFont entry point in the XRender driver.
---
dlls/winex11.drv/x11drv.h | 1 -
dlls/winex11.drv/xfont.c | 6 ------
dlls/winex11.drv/xrender.c | 42 ++++++++++++++++++++----------------------
3 files changed, 20 insertions(+), 29 deletions(-)
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index e8cda91..e5010b4 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -303,7 +303,6 @@ extern int client_side_antialias_with_render DECLSPEC_HIDDEN;
extern int using_client_side_fonts DECLSPEC_HIDDEN;
extern const struct gdi_dc_funcs *X11DRV_XRender_Init(void) DECLSPEC_HIDDEN;
extern void X11DRV_XRender_Finalize(void) DECLSPEC_HIDDEN;
-extern BOOL X11DRV_XRender_SelectFont(X11DRV_PDEVICE*, HFONT) DECLSPEC_HIDDEN;
extern void X11DRV_XRender_SetDeviceClipping(X11DRV_PDEVICE *physDev, const RGNDATA *data) DECLSPEC_HIDDEN;
extern void X11DRV_XRender_CopyBrush(X11DRV_PDEVICE *physDev, X_PHYSBITMAP *physBitmap, int width, int height) DECLSPEC_HIDDEN;
extern BOOL X11DRV_XRender_ExtTextOut(X11DRV_PDEVICE *physDev, INT x, INT y, UINT flags,
diff --git a/dlls/winex11.drv/xfont.c b/dlls/winex11.drv/xfont.c
index 1e6e47c..35d23d6 100644
--- a/dlls/winex11.drv/xfont.c
+++ b/dlls/winex11.drv/xfont.c
@@ -3238,12 +3238,6 @@ HFONT X11DRV_SelectFont( PHYSDEV dev, HFONT hfont, HANDLE gdiFont )
TRACE("gdiFont = %p\n", gdiFont);
- if(gdiFont && using_client_side_fonts) {
- X11DRV_XRender_SelectFont(physDev, hfont);
- physDev->has_gdi_font = TRUE;
- return FALSE;
- }
-
EnterCriticalSection( &crtsc_fonts_X11 );
if(fontList == NULL) X11DRV_FONT_InitX11Metrics();
diff --git a/dlls/winex11.drv/xrender.c b/dlls/winex11.drv/xrender.c
index e2a9858..7c70c30 100644
--- a/dlls/winex11.drv/xrender.c
+++ b/dlls/winex11.drv/xrender.c
@@ -1091,24 +1091,30 @@ void X11DRV_XRender_Finalize(void)
LeaveCriticalSection(&xrender_cs);
}
-
-/***********************************************************************
- * X11DRV_XRender_SelectFont
+/**********************************************************************
+ * xrenderdrv_SelectFont
*/
-BOOL X11DRV_XRender_SelectFont(X11DRV_PDEVICE *physDev, HFONT hfont)
+static HFONT xrenderdrv_SelectFont( PHYSDEV dev, HFONT hfont, HANDLE gdiFont )
{
+ struct xrender_physdev *physdev = get_xrender_dev( dev );
LFANDSIZE lfsz;
- struct xrender_info *info;
- GetObjectW(hfont, sizeof(lfsz.lf), &lfsz.lf);
+ if (!GetObjectW( hfont, sizeof(lfsz.lf), &lfsz.lf )) return HGDI_ERROR;
+
+ if (!gdiFont)
+ {
+ dev = GET_NEXT_PHYSDEV( dev, pSelectFont );
+ return dev->funcs->pSelectFont( dev, hfont, gdiFont );
+ }
+
TRACE("h=%d w=%d weight=%d it=%d charset=%d name=%s\n",
lfsz.lf.lfHeight, lfsz.lf.lfWidth, lfsz.lf.lfWeight,
lfsz.lf.lfItalic, lfsz.lf.lfCharSet, debugstr_w(lfsz.lf.lfFaceName));
lfsz.lf.lfWidth = abs( lfsz.lf.lfWidth );
- lfsz.devsize.cx = X11DRV_XWStoDS( physDev, lfsz.lf.lfWidth );
- lfsz.devsize.cy = X11DRV_YWStoDS( physDev, lfsz.lf.lfHeight );
+ lfsz.devsize.cx = X11DRV_XWStoDS( physdev->x11dev, lfsz.lf.lfWidth );
+ lfsz.devsize.cy = X11DRV_YWStoDS( physdev->x11dev, lfsz.lf.lfHeight );
- GetTransform( physDev->dev.hdc, 0x204, &lfsz.xform );
+ GetTransform( dev->hdc, 0x204, &lfsz.xform );
TRACE("font transform %f %f %f %f\n", lfsz.xform.eM11, lfsz.xform.eM12,
lfsz.xform.eM21, lfsz.xform.eM22);
@@ -1117,14 +1123,12 @@ BOOL X11DRV_XRender_SelectFont(X11DRV_PDEVICE *physDev, HFONT hfont)
lfsz_calc_hash(&lfsz);
- info = get_xrender_info(physDev);
- if (!info) return 0;
-
EnterCriticalSection(&xrender_cs);
- if(info->cache_index != -1)
- dec_ref_cache(info->cache_index);
- info->cache_index = GetCacheEntry(physDev, &lfsz);
+ if (physdev->info.cache_index != -1)
+ dec_ref_cache( physdev->info.cache_index );
+ physdev->info.cache_index = GetCacheEntry( physdev->x11dev, &lfsz );
LeaveCriticalSection(&xrender_cs);
+ physdev->x11dev->has_gdi_font = TRUE;
return 0;
}
@@ -2608,7 +2612,7 @@ static const struct gdi_dc_funcs xrender_funcs =
xrenderdrv_SelectBitmap, /* pSelectBitmap */
NULL, /* pSelectBrush */
NULL, /* pSelectClipPath */
- NULL, /* pSelectFont */
+ xrenderdrv_SelectFont, /* pSelectFont */
NULL, /* pSelectPalette */
NULL, /* pSelectPen */
NULL, /* pSetArcDirection */
@@ -2662,12 +2666,6 @@ void X11DRV_XRender_Finalize(void)
{
}
-BOOL X11DRV_XRender_SelectFont(X11DRV_PDEVICE *physDev, HFONT hfont)
-{
- assert(0);
- return FALSE;
-}
-
void X11DRV_XRender_SetDeviceClipping(X11DRV_PDEVICE *physDev, const RGNDATA *data)
{
assert(0);
More information about the wine-cvs
mailing list