Jacek Caban : gdi32: Use get_dc_attr in SetStretchBltMode.

Alexandre Julliard julliard at winehq.org
Thu Jul 29 16:37:52 CDT 2021


Module: wine
Branch: master
Commit: 7517fdf229e0a5d8786559745a41f22d76cfda2c
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=7517fdf229e0a5d8786559745a41f22d76cfda2c

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Jul 29 13:22:03 2021 +0100

gdi32: Use get_dc_attr in SetStretchBltMode.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/gdi32/dc.c                      | 28 ----------------------------
 dlls/gdi32/enhmfdrv/dc.c             |  4 ++--
 dlls/gdi32/enhmfdrv/enhmetafiledrv.h |  1 -
 dlls/gdi32/enhmfdrv/init.c           |  2 +-
 dlls/gdi32/gdi_private.h             |  2 ++
 dlls/gdi32/gdidc.c                   | 23 +++++++++++++++++++++++
 dlls/gdi32/mfdrv/dc.c                |  4 ++--
 dlls/gdi32/mfdrv/init.c              |  2 +-
 dlls/gdi32/mfdrv/metafiledrv.h       |  1 -
 9 files changed, 31 insertions(+), 36 deletions(-)

diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c
index 70e7132d0c5..3c9dca8c512 100644
--- a/dlls/gdi32/dc.c
+++ b/dlls/gdi32/dc.c
@@ -1392,34 +1392,6 @@ UINT WINAPI SetBoundsRect(HDC hdc, const RECT* rect, UINT flags)
 }
 
 
-/***********************************************************************
- *		SetStretchBltMode (GDI32.@)
- */
-INT WINAPI SetStretchBltMode( HDC hdc, INT mode )
-{
-    INT ret = 0;
-    DC *dc;
-
-    if ((mode <= 0) || (mode > MAXSTRETCHBLTMODE))
-    {
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return 0;
-    }
-    if ((dc = get_dc_ptr( hdc )))
-    {
-        PHYSDEV physdev = GET_DC_PHYSDEV( dc, pSetStretchBltMode );
-        mode = physdev->funcs->pSetStretchBltMode( physdev, mode );
-        if (mode)
-        {
-            ret = dc->attr->stretch_blt_mode;
-            dc->attr->stretch_blt_mode = mode;
-        }
-        release_dc_ptr( dc );
-    }
-    return ret;
-}
-
-
 /***********************************************************************
  *		GetMapMode (GDI32.@)
  */
diff --git a/dlls/gdi32/enhmfdrv/dc.c b/dlls/gdi32/enhmfdrv/dc.c
index 78969c69783..1faf777c47e 100644
--- a/dlls/gdi32/enhmfdrv/dc.c
+++ b/dlls/gdi32/enhmfdrv/dc.c
@@ -134,13 +134,13 @@ BOOL EMFDC_SetPolyFillMode( DC_ATTR *dc_attr, INT mode )
     return EMFDRV_WriteRecord( dc_attr->emf, &emr.emr );
 }
 
-INT CDECL EMFDRV_SetStretchBltMode( PHYSDEV dev, INT mode )
+BOOL EMFDC_SetStretchBltMode( DC_ATTR *dc_attr, INT mode )
 {
     EMRSETSTRETCHBLTMODE emr;
     emr.emr.iType = EMR_SETSTRETCHBLTMODE;
     emr.emr.nSize = sizeof(emr);
     emr.iMode = mode;
-    return EMFDRV_WriteRecord( dev, &emr.emr ) ? mode : 0;
+    return EMFDRV_WriteRecord( dc_attr->emf, &emr.emr );
 }
 
 BOOL EMFDC_SetArcDirection( DC_ATTR *dc_attr, INT dir )
diff --git a/dlls/gdi32/enhmfdrv/enhmetafiledrv.h b/dlls/gdi32/enhmfdrv/enhmetafiledrv.h
index 12b39067b2b..981cdea7887 100644
--- a/dlls/gdi32/enhmfdrv/enhmetafiledrv.h
+++ b/dlls/gdi32/enhmfdrv/enhmetafiledrv.h
@@ -123,7 +123,6 @@ extern DWORD    CDECL EMFDRV_SetLayout( PHYSDEV dev, DWORD layout ) DECLSPEC_HID
 extern INT      CDECL EMFDRV_SetMapMode( PHYSDEV dev, INT mode ) DECLSPEC_HIDDEN;
 extern DWORD    CDECL EMFDRV_SetMapperFlags( PHYSDEV dev, DWORD flags ) DECLSPEC_HIDDEN;
 extern COLORREF CDECL EMFDRV_SetPixel( PHYSDEV dev, INT x, INT y, COLORREF color ) DECLSPEC_HIDDEN;
-extern INT      CDECL EMFDRV_SetStretchBltMode( PHYSDEV dev, INT mode ) DECLSPEC_HIDDEN;
 extern COLORREF CDECL EMFDRV_SetTextColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN;
 extern BOOL     CDECL EMFDRV_SetTextJustification( PHYSDEV dev, INT nBreakExtra, INT nBreakCount ) DECLSPEC_HIDDEN;
 extern BOOL     CDECL EMFDRV_SetViewportExtEx( PHYSDEV dev, INT x, INT y, SIZE *size ) DECLSPEC_HIDDEN;
diff --git a/dlls/gdi32/enhmfdrv/init.c b/dlls/gdi32/enhmfdrv/init.c
index 8f210cb71a3..3eb01025e50 100644
--- a/dlls/gdi32/enhmfdrv/init.c
+++ b/dlls/gdi32/enhmfdrv/init.c
@@ -141,7 +141,7 @@ static const struct gdi_dc_funcs emfdrv_driver =
     EMFDRV_SetPixel,                 /* pSetPixel */
     NULL,                            /* pSetPolyFillMode */
     NULL,                            /* pSetRelAbs */
-    EMFDRV_SetStretchBltMode,        /* pSetStretchBltMode */
+    NULL,                            /* pSetStretchBltMode */
     NULL,                            /* pSetTextCharacterExtra */
     EMFDRV_SetTextColor,             /* pSetTextColor */
     EMFDRV_SetTextJustification,     /* pSetTextJustification */ 
diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h
index dec66f69dbc..105d72b23f0 100644
--- a/dlls/gdi32/gdi_private.h
+++ b/dlls/gdi32/gdi_private.h
@@ -71,6 +71,7 @@ extern BOOL METADC_SetPixel( HDC hdc, INT x, INT y, COLORREF color ) DECLSPEC_HI
 extern BOOL METADC_SetPolyFillMode( HDC hdc, INT mode ) DECLSPEC_HIDDEN;
 extern BOOL METADC_SetRelAbs( HDC hdc, INT mode ) DECLSPEC_HIDDEN;
 extern BOOL METADC_SetROP2( HDC hdc, INT rop ) DECLSPEC_HIDDEN;
+extern BOOL METADC_SetStretchBltMode( HDC hdc, INT mode ) DECLSPEC_HIDDEN;
 extern BOOL METADC_SetTextAlign( HDC hdc, UINT align ) DECLSPEC_HIDDEN;
 
 /* enhanced metafiles */
@@ -118,6 +119,7 @@ extern BOOL EMFDC_SetBkMode( DC_ATTR *dc_attr, INT mode ) DECLSPEC_HIDDEN;
 extern BOOL EMFDC_SetPixel( DC_ATTR *dc_attr, INT x, INT y, COLORREF color ) DECLSPEC_HIDDEN;
 extern BOOL EMFDC_SetPolyFillMode( DC_ATTR *dc_attr, INT mode ) DECLSPEC_HIDDEN;
 extern BOOL EMFDC_SetROP2( DC_ATTR *dc_attr, INT rop ) DECLSPEC_HIDDEN;
+extern BOOL EMFDC_SetStretchBltMode( DC_ATTR *dc_attr, INT mode ) DECLSPEC_HIDDEN;
 extern BOOL EMFDC_SetTextAlign( DC_ATTR *dc_attr, UINT align ) DECLSPEC_HIDDEN;
 
 #endif /* __WINE_GDI_PRIVATE_H */
diff --git a/dlls/gdi32/gdidc.c b/dlls/gdi32/gdidc.c
index f8a6eea6de5..35986dba37e 100644
--- a/dlls/gdi32/gdidc.c
+++ b/dlls/gdi32/gdidc.c
@@ -205,6 +205,29 @@ INT WINAPI GetStretchBltMode( HDC hdc )
     return dc_attr ? dc_attr->stretch_blt_mode : 0;
 }
 
+/***********************************************************************
+ *		SetStretchBltMode (GDI32.@)
+ */
+INT WINAPI SetStretchBltMode( HDC hdc, INT mode )
+{
+    DC_ATTR *dc_attr;
+    INT ret;
+
+    if (mode <= 0 || mode > MAXSTRETCHBLTMODE)
+    {
+        SetLastError(ERROR_INVALID_PARAMETER);
+        return 0;
+    }
+
+    if (is_meta_dc( hdc )) return METADC_SetStretchBltMode( hdc, mode );
+    if (!(dc_attr = get_dc_attr( hdc ))) return 0;
+    if (dc_attr->emf && !EMFDC_SetStretchBltMode( dc_attr, mode )) return 0;
+
+    ret = dc_attr->stretch_blt_mode;
+    dc_attr->stretch_blt_mode = mode;
+    return ret;
+}
+
 /***********************************************************************
  *		GetCurrentPositionEx (GDI32.@)
  */
diff --git a/dlls/gdi32/mfdrv/dc.c b/dlls/gdi32/mfdrv/dc.c
index 4b886aaba6d..044e228b2bf 100644
--- a/dlls/gdi32/mfdrv/dc.c
+++ b/dlls/gdi32/mfdrv/dc.c
@@ -65,9 +65,9 @@ BOOL METADC_SetPolyFillMode( HDC hdc, INT mode )
     return metadc_param1( hdc, META_SETPOLYFILLMODE, mode );
 }
 
-INT CDECL MFDRV_SetStretchBltMode( PHYSDEV dev, INT mode )
+BOOL METADC_SetStretchBltMode( HDC hdc, INT mode )
 {
-    return MFDRV_MetaParam1( dev, META_SETSTRETCHBLTMODE, (WORD)mode) ? mode : 0;
+    return metadc_param1( hdc, META_SETSTRETCHBLTMODE, mode );
 }
 
 INT CDECL MFDRV_IntersectClipRect( PHYSDEV dev, INT left, INT top, INT right, INT bottom )
diff --git a/dlls/gdi32/mfdrv/init.c b/dlls/gdi32/mfdrv/init.c
index f8c4153c410..12ea0f55948 100644
--- a/dlls/gdi32/mfdrv/init.c
+++ b/dlls/gdi32/mfdrv/init.c
@@ -204,7 +204,7 @@ static const struct gdi_dc_funcs MFDRV_Funcs =
     NULL,                            /* pSetPixel */
     NULL,                            /* pSetPolyFillMode */
     NULL,                            /* pSetRelAbs */
-    MFDRV_SetStretchBltMode,         /* pSetStretchBltMode */
+    NULL,                            /* pSetStretchBltMode */
     MFDRV_SetTextCharacterExtra,     /* pSetTextCharacterExtra */
     MFDRV_SetTextColor,              /* pSetTextColor */
     MFDRV_SetTextJustification,      /* pSetTextJustification */
diff --git a/dlls/gdi32/mfdrv/metafiledrv.h b/dlls/gdi32/mfdrv/metafiledrv.h
index 889cdfbb6a2..567b60158b2 100644
--- a/dlls/gdi32/mfdrv/metafiledrv.h
+++ b/dlls/gdi32/mfdrv/metafiledrv.h
@@ -111,7 +111,6 @@ extern COLORREF CDECL MFDRV_SetDCPenColor( PHYSDEV dev, COLORREF color ) DECLSPE
 extern DWORD    CDECL MFDRV_SetLayout( PHYSDEV dev, DWORD layout ) DECLSPEC_HIDDEN;
 extern INT  CDECL MFDRV_SetMapMode( PHYSDEV dev, INT mode ) DECLSPEC_HIDDEN;
 extern DWORD CDECL MFDRV_SetMapperFlags( PHYSDEV dev, DWORD flags ) DECLSPEC_HIDDEN;
-extern INT  CDECL MFDRV_SetStretchBltMode( PHYSDEV dev, INT mode ) DECLSPEC_HIDDEN;
 extern INT  CDECL MFDRV_SetTextCharacterExtra( PHYSDEV dev, INT extra ) DECLSPEC_HIDDEN;
 extern COLORREF  CDECL MFDRV_SetTextColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN;
 extern BOOL CDECL MFDRV_SetTextJustification( PHYSDEV dev, INT extra, INT breaks ) DECLSPEC_HIDDEN;




More information about the wine-cvs mailing list