gdi32: Disable anti-aliasing when necessary in the various drivers.

oldstable
Alexandre Julliard 2012-10-31 16:07:51 +01:00
parent ccc034c27e
commit 9cdb0e1ca6
8 changed files with 30 additions and 10 deletions

View File

@ -484,7 +484,7 @@ const struct gdi_dc_funcs dib_driver =
dibdrv_SelectBitmap, /* pSelectBitmap */ dibdrv_SelectBitmap, /* pSelectBitmap */
dibdrv_SelectBrush, /* pSelectBrush */ dibdrv_SelectBrush, /* pSelectBrush */
NULL, /* pSelectClipPath */ NULL, /* pSelectClipPath */
NULL, /* pSelectFont */ dibdrv_SelectFont, /* pSelectFont */
NULL, /* pSelectPalette */ NULL, /* pSelectPalette */
dibdrv_SelectPen, /* pSelectPen */ dibdrv_SelectPen, /* pSelectPen */
NULL, /* pSetArcDirection */ NULL, /* pSetArcDirection */

View File

@ -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, extern BOOL dibdrv_RoundRect( PHYSDEV dev, INT left, INT top, INT right, INT bottom,
INT ellipse_width, INT ellipse_height ) DECLSPEC_HIDDEN; INT ellipse_width, INT ellipse_height ) DECLSPEC_HIDDEN;
extern HBRUSH dibdrv_SelectBrush( PHYSDEV dev, HBRUSH hbrush, const struct brush_pattern *pattern ) 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 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_SetDCBrushColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN;
extern COLORREF dibdrv_SetDCPenColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN; extern COLORREF dibdrv_SetDCPenColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN;

View File

@ -711,6 +711,19 @@ done:
return TRUE; return TRUE;
} }
/***********************************************************************
* 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 * dibdrv_Arc
*/ */

View File

@ -314,6 +314,7 @@ HFONT EMFDRV_SelectFont( PHYSDEV dev, HFONT hFont, UINT *aa_flags )
if(!EMFDRV_WriteRecord( dev, &emr.emr )) if(!EMFDRV_WriteRecord( dev, &emr.emr ))
return 0; return 0;
done: done:
*aa_flags = GGO_BITMAP; /* no point in anti-aliasing on metafiles */
dev = GET_NEXT_PHYSDEV( dev, pSelectFont ); dev = GET_NEXT_PHYSDEV( dev, pSelectFont );
dev->funcs->pSelectFont( dev, hFont, aa_flags ); dev->funcs->pSelectFont( dev, hFont, aa_flags );
return hFont; return hFont;

View File

@ -397,14 +397,6 @@ UINT get_font_aa_flags( HDC hdc, const LOGFONTW *lf )
static int subpixel_enabled = -1; static int subpixel_enabled = -1;
enum smoothing smoothing; 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) if (hinter == -1 || subpixel_enabled == -1)
{ {
RASTERIZER_STATUS status; RASTERIZER_STATUS status;

View File

@ -290,6 +290,7 @@ HFONT MFDRV_SelectFont( PHYSDEV dev, HFONT hfont, UINT *aa_flags )
LOGFONTW font; LOGFONTW font;
INT16 index; INT16 index;
*aa_flags = GGO_BITMAP; /* no point in anti-aliasing on metafiles */
index = MFDRV_FindObject(dev, hfont); index = MFDRV_FindObject(dev, hfont);
if( index < 0 ) if( index < 0 )
{ {

View File

@ -47,6 +47,8 @@ HFONT PSDRV_SelectFont( PHYSDEV dev, HFONT hfont, UINT *aa_flags )
if (!GetObjectW( hfont, sizeof(lf), &lf )) return 0; 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", TRACE("FaceName = %s Height = %d Italic = %d Weight = %d\n",
debugstr_w(lf.lfFaceName), lf.lfHeight, lf.lfItalic, debugstr_w(lf.lfFaceName), lf.lfHeight, lf.lfItalic,
lf.lfWeight); lf.lfWeight);

View File

@ -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.@) * ExtEscape (X11DRV.@)
*/ */
@ -532,7 +542,7 @@ static const struct gdi_dc_funcs x11drv_funcs =
NULL, /* pSelectBitmap */ NULL, /* pSelectBitmap */
X11DRV_SelectBrush, /* pSelectBrush */ X11DRV_SelectBrush, /* pSelectBrush */
NULL, /* pSelectClipPath */ NULL, /* pSelectClipPath */
NULL, /* pSelectFont */ X11DRV_SelectFont, /* pSelectFont */
NULL, /* pSelectPalette */ NULL, /* pSelectPalette */
X11DRV_SelectPen, /* pSelectPen */ X11DRV_SelectPen, /* pSelectPen */
NULL, /* pSetArcDirection */ NULL, /* pSetArcDirection */