Uses Xrender extension to allow client side font rendering.
Adds nice things like anti-aliased text.
diff --git a/graphics/x11drv/clipping.c b/graphics/x11drv/clipping.c
index d890f12..1200da0 100644
--- a/graphics/x11drv/clipping.c
+++ b/graphics/x11drv/clipping.c
@@ -99,6 +99,8 @@
dc->DCOrgY = org_y;
physDev->drawable = drawable;
TSXSetSubwindowMode( gdi_display, physDev->gc, mode );
+ if(physDev->xrender)
+ X11DRV_XRender_UpdateDrawable(dc);
GDI_ReleaseObj( hdc );
}
}
diff --git a/graphics/x11drv/init.c b/graphics/x11drv/init.c
index 040f825..a1f675c 100644
--- a/graphics/x11drv/init.c
+++ b/graphics/x11drv/init.c
@@ -66,6 +66,9 @@
if (!X11DRV_BITMAP_Init()) return FALSE;
+ /* Initialize XRender */
+ X11DRV_XRender_Init();
+
/* Initialize fonts and text caps */
log_pixels_x = MulDiv( WidthOfScreen(screen), 254, WidthMMOfScreen(screen) * 10 );
@@ -157,6 +160,9 @@
BOOL X11DRV_DeleteDC( DC *dc )
{
X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
+
+ if(physDev->xrender)
+ X11DRV_XRender_DeleteDC(dc);
wine_tsx11_lock();
XFreeGC( gdi_display, physDev->gc );
while (physDev->used_visuals-- > 0)
diff --git a/graphics/x11drv/text.c b/graphics/x11drv/text.c
index 5e7d223..f01453f 100644
--- a/graphics/x11drv/text.c
+++ b/graphics/x11drv/text.c
@@ -46,11 +46,17 @@
BOOL dibUpdateFlag = FALSE;
BOOL result = TRUE;
+
+ if(dc->gdiFont)
+ return X11DRV_XRender_ExtTextOut(dc, x, y, flags, lprect, wstr, count,
+ lpDx);
+
+
if (!X11DRV_SetupGCForText( dc )) return TRUE;
pfo = XFONT_GetFontObject( physDev->font );
font = pfo->fs;
-
+
if (pfo->lf.lfEscapement && pfo->lpX11Trans)
rotated = TRUE;
dfBreakChar = (char)pfo->fi->df.dfBreakChar;
diff --git a/graphics/x11drv/xfont.c b/graphics/x11drv/xfont.c
index 08a2629..5b517a0 100644
--- a/graphics/x11drv/xfont.c
+++ b/graphics/x11drv/xfont.c
@@ -206,6 +206,10 @@
{ "1", DEFAULT_CHARSET, 0, X11DRV_CPTABLE_UNICODE },
{ NULL, DEFAULT_CHARSET, 0, X11DRV_CPTABLE_UNICODE }};
+static const SuffixCharset sufch_dec[] = {
+ { "dectech", SYMBOL_CHARSET, CP_SYMBOL, X11DRV_CPTABLE_SBCS },
+ { NULL, 0, 0, X11DRV_CPTABLE_SBCS }};
+
/* Each of these must be matched explicitly */
static const SuffixCharset sufch_any[] = {
{ "fontspecific", SYMBOL_CHARSET, CP_SYMBOL, X11DRV_CPTABLE_SBCS },
@@ -244,6 +248,7 @@
{ "unicode", sufch_unicode, &__fETTable[19]},
{ "iso10646", sufch_iso10646, &__fETTable[20]},
{ "cp", sufch_windows, &__fETTable[21]},
+ { "dec", sufch_dec, &__fETTable[22]},
/* NULL prefix matches anything so put it last */
{ NULL, sufch_any, NULL },
};
@@ -2919,6 +2924,10 @@
RAW_ASCENT = TSXInternAtom(gdi_display, "RAW_ASCENT", TRUE);
RAW_DESCENT = TSXInternAtom(gdi_display, "RAW_DESCENT", TRUE);
+
+ if(X11DRV_XRender_Installed)
+ XTextCaps |= TC_VA_ABLE;
+
return XTextCaps;
}
@@ -3166,10 +3175,16 @@
LOGFONT16 lf;
X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
+ TRACE("dc=%p, hfont=%04x\n", dc, hfont);
+
if (!GetObjectW( hfont, sizeof(logfont), &logfont )) return GDI_ERROR;
- /* If we want to use a gdi font, we should check for XRender extension
- and return FALSE here */
+ TRACE("dc->gdiFont = %p\n", dc->gdiFont);
+
+ if(dc->gdiFont && X11DRV_XRender_Installed) {
+ X11DRV_XRender_SelectFont(dc, hfont);
+ return FALSE;
+ }
EnterCriticalSection( &crtsc_fonts_X11 );