Module: wine Branch: master Commit: 9cdb0e1ca6d9cdbe5d40d5a544629d6f21baff2b URL: http://source.winehq.org/git/wine.git/?a=commit;h=9cdb0e1ca6d9cdbe5d40d5a544...
Author: Alexandre Julliard julliard@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 */