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