Alexandre Julliard : gdi32: Disable anti-aliasing when necessary in the various drivers.
Alexandre Julliard
julliard at winehq.org
Fri Nov 2 15:52:02 CDT 2012
Module: wine
Branch: master
Commit: 9cdb0e1ca6d9cdbe5d40d5a544629d6f21baff2b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=9cdb0e1ca6d9cdbe5d40d5a544629d6f21baff2b
Author: Alexandre Julliard <julliard at winehq.org>
Date: Wed Oct 31 16:07:51 2012 +0100
gdi32: Disable anti-aliasing when necessary in the various drivers.
---
dlls/gdi32/dibdrv/dc.c | 2 +-
dlls/gdi32/dibdrv/dibdrv.h | 1 +
dlls/gdi32/dibdrv/graphics.c | 13 +++++++++++++
dlls/gdi32/enhmfdrv/objects.c | 1 +
dlls/gdi32/font.c | 8 --------
dlls/gdi32/mfdrv/objects.c | 1 +
dlls/wineps.drv/font.c | 2 ++
dlls/winex11.drv/init.c | 12 +++++++++++-
8 files changed, 30 insertions(+), 10 deletions(-)
diff --git a/dlls/gdi32/dibdrv/dc.c b/dlls/gdi32/dibdrv/dc.c
index 0b6013d..4d84452 100644
--- a/dlls/gdi32/dibdrv/dc.c
+++ b/dlls/gdi32/dibdrv/dc.c
@@ -484,7 +484,7 @@ const struct gdi_dc_funcs dib_driver =
dibdrv_SelectBitmap, /* pSelectBitmap */
dibdrv_SelectBrush, /* pSelectBrush */
NULL, /* pSelectClipPath */
- NULL, /* pSelectFont */
+ dibdrv_SelectFont, /* pSelectFont */
NULL, /* pSelectPalette */
dibdrv_SelectPen, /* pSelectPen */
NULL, /* pSetArcDirection */
diff --git a/dlls/gdi32/dibdrv/dibdrv.h b/dlls/gdi32/dibdrv/dibdrv.h
index 564fe95..1cd87e3 100644
--- a/dlls/gdi32/dibdrv/dibdrv.h
+++ b/dlls/gdi32/dibdrv/dibdrv.h
@@ -141,6 +141,7 @@ extern BOOL dibdrv_Rectangle( PHYSDEV dev, INT left, INT top, INT right, INT
extern BOOL dibdrv_RoundRect( PHYSDEV dev, INT left, INT top, INT right, INT bottom,
INT ellipse_width, INT ellipse_height ) DECLSPEC_HIDDEN;
extern HBRUSH dibdrv_SelectBrush( PHYSDEV dev, HBRUSH hbrush, const struct brush_pattern *pattern ) DECLSPEC_HIDDEN;
+extern HFONT dibdrv_SelectFont( PHYSDEV dev, HFONT font, UINT *aa_flags ) DECLSPEC_HIDDEN;
extern HPEN dibdrv_SelectPen( PHYSDEV dev, HPEN hpen, const struct brush_pattern *pattern ) DECLSPEC_HIDDEN;
extern COLORREF dibdrv_SetDCBrushColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN;
extern COLORREF dibdrv_SetDCPenColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN;
diff --git a/dlls/gdi32/dibdrv/graphics.c b/dlls/gdi32/dibdrv/graphics.c
index 6f936e0..0b54188 100644
--- a/dlls/gdi32/dibdrv/graphics.c
+++ b/dlls/gdi32/dibdrv/graphics.c
@@ -712,6 +712,19 @@ done:
}
/***********************************************************************
+ * dibdrv_SelectFont
+ */
+HFONT dibdrv_SelectFont( PHYSDEV dev, HFONT font, UINT *aa_flags )
+{
+ dibdrv_physdev *pdev = get_dibdrv_pdev(dev);
+
+ if (pdev->dib.bit_count <= 8) *aa_flags = GGO_BITMAP; /* no anti-aliasing on <= 8bpp */
+
+ dev = GET_NEXT_PHYSDEV( dev, pSelectFont );
+ return dev->funcs->pSelectFont( dev, font, aa_flags );
+}
+
+/***********************************************************************
* dibdrv_Arc
*/
BOOL dibdrv_Arc( PHYSDEV dev, INT left, INT top, INT right, INT bottom,
diff --git a/dlls/gdi32/enhmfdrv/objects.c b/dlls/gdi32/enhmfdrv/objects.c
index 8dd88f6..4c85fe7 100644
--- a/dlls/gdi32/enhmfdrv/objects.c
+++ b/dlls/gdi32/enhmfdrv/objects.c
@@ -314,6 +314,7 @@ HFONT EMFDRV_SelectFont( PHYSDEV dev, HFONT hFont, UINT *aa_flags )
if(!EMFDRV_WriteRecord( dev, &emr.emr ))
return 0;
done:
+ *aa_flags = GGO_BITMAP; /* no point in anti-aliasing on metafiles */
dev = GET_NEXT_PHYSDEV( dev, pSelectFont );
dev->funcs->pSelectFont( dev, hFont, aa_flags );
return hFont;
diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c
index d5396ff..a2d4d3e 100644
--- a/dlls/gdi32/font.c
+++ b/dlls/gdi32/font.c
@@ -397,14 +397,6 @@ UINT get_font_aa_flags( HDC hdc, const LOGFONTW *lf )
static int subpixel_enabled = -1;
enum smoothing smoothing;
- if (GetObjectType( hdc ) == OBJ_MEMDC)
- {
- BITMAP bm;
- GetObjectW( GetCurrentObject( hdc, OBJ_BITMAP ), sizeof(bm), &bm );
- if (bm.bmBitsPixel <= 8) return GGO_BITMAP;
- }
- else if (GetDeviceCaps( hdc, BITSPIXEL ) <= 8) return GGO_BITMAP;
-
if (hinter == -1 || subpixel_enabled == -1)
{
RASTERIZER_STATUS status;
diff --git a/dlls/gdi32/mfdrv/objects.c b/dlls/gdi32/mfdrv/objects.c
index 07e66b7..697644d 100644
--- a/dlls/gdi32/mfdrv/objects.c
+++ b/dlls/gdi32/mfdrv/objects.c
@@ -290,6 +290,7 @@ HFONT MFDRV_SelectFont( PHYSDEV dev, HFONT hfont, UINT *aa_flags )
LOGFONTW font;
INT16 index;
+ *aa_flags = GGO_BITMAP; /* no point in anti-aliasing on metafiles */
index = MFDRV_FindObject(dev, hfont);
if( index < 0 )
{
diff --git a/dlls/wineps.drv/font.c b/dlls/wineps.drv/font.c
index f04d069..4888af3 100644
--- a/dlls/wineps.drv/font.c
+++ b/dlls/wineps.drv/font.c
@@ -47,6 +47,8 @@ HFONT PSDRV_SelectFont( PHYSDEV dev, HFONT hfont, UINT *aa_flags )
if (!GetObjectW( hfont, sizeof(lf), &lf )) return 0;
+ *aa_flags = GGO_BITMAP; /* no anti-aliasing on printer devices */
+
TRACE("FaceName = %s Height = %d Italic = %d Weight = %d\n",
debugstr_w(lf.lfFaceName), lf.lfHeight, lf.lfItalic,
lf.lfWeight);
diff --git a/dlls/winex11.drv/init.c b/dlls/winex11.drv/init.c
index d729fd0..7cf318f 100644
--- a/dlls/winex11.drv/init.c
+++ b/dlls/winex11.drv/init.c
@@ -295,6 +295,16 @@ static INT X11DRV_GetDeviceCaps( PHYSDEV dev, INT cap )
}
+/***********************************************************************
+ * SelectFont
+ */
+static HFONT X11DRV_SelectFont( PHYSDEV dev, HFONT hfont, UINT *aa_flags )
+{
+ if (default_visual.depth <= 8) *aa_flags = GGO_BITMAP; /* no anti-aliasing on <= 8bpp */
+ dev = GET_NEXT_PHYSDEV( dev, pSelectFont );
+ return dev->funcs->pSelectFont( dev, hfont, aa_flags );
+}
+
/**********************************************************************
* ExtEscape (X11DRV.@)
*/
@@ -532,7 +542,7 @@ static const struct gdi_dc_funcs x11drv_funcs =
NULL, /* pSelectBitmap */
X11DRV_SelectBrush, /* pSelectBrush */
NULL, /* pSelectClipPath */
- NULL, /* pSelectFont */
+ X11DRV_SelectFont, /* pSelectFont */
NULL, /* pSelectPalette */
X11DRV_SelectPen, /* pSelectPen */
NULL, /* pSetArcDirection */
More information about the wine-cvs
mailing list