Jacek Caban : gdi32: Use NtGdiExtEscape for ExtEscape.

Alexandre Julliard julliard at winehq.org
Fri Aug 13 14:44:14 CDT 2021


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Aug 13 12:09:34 2021 +0200

gdi32: Use NtGdiExtEscape for ExtEscape.

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/driver.c      | 21 ++++-----------------
 dlls/gdi32/gdi_private.h |  2 ++
 dlls/gdi32/gdidc.c       | 11 +++++++++++
 dlls/gdi32/mfdrv/init.c  | 22 +++++++++++-----------
 include/ntgdi.h          |  4 ++--
 5 files changed, 30 insertions(+), 30 deletions(-)

diff --git a/dlls/gdi32/driver.c b/dlls/gdi32/driver.c
index 3cb9c2d1e65..a00fe510233 100644
--- a/dlls/gdi32/driver.c
+++ b/dlls/gdi32/driver.c
@@ -1253,25 +1253,12 @@ INT WINAPI Escape( HDC hdc, INT escape, INT in_count, LPCSTR in_data, LPVOID out
 
 
 /******************************************************************************
- *		ExtEscape	[GDI32.@]
+ *		NtGdiExtEscape   (win32u.@)
  *
  * Access capabilities of a particular device that are not available through GDI.
- *
- * PARAMS
- *    hdc         [I] Handle to device context
- *    nEscape     [I] Escape function
- *    cbInput     [I] Number of bytes in input structure
- *    lpszInData  [I] Pointer to input structure
- *    cbOutput    [I] Number of bytes in output structure
- *    lpszOutData [O] Pointer to output structure
- *
- * RETURNS
- *    Success: >0
- *    Not implemented: 0
- *    Failure: <0
  */
-INT WINAPI ExtEscape( HDC hdc, INT nEscape, INT cbInput, LPCSTR lpszInData,
-                      INT cbOutput, LPSTR lpszOutData )
+INT WINAPI NtGdiExtEscape( HDC hdc, WCHAR *driver, int driver_id, INT escape, INT input_size,
+                           const char *input, INT output_size, char *output )
 {
     PHYSDEV physdev;
     INT ret;
@@ -1280,7 +1267,7 @@ INT WINAPI ExtEscape( HDC hdc, INT nEscape, INT cbInput, LPCSTR lpszInData,
     if (!dc) return 0;
     update_dc( dc );
     physdev = GET_DC_PHYSDEV( dc, pExtEscape );
-    ret = physdev->funcs->pExtEscape( physdev, nEscape, cbInput, lpszInData, cbOutput, lpszOutData );
+    ret = physdev->funcs->pExtEscape( physdev, escape, input_size, input, output_size, output );
     release_dc_ptr( dc );
     return ret;
 }
diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h
index 038766e5688..6d23e7e0ecc 100644
--- a/dlls/gdi32/gdi_private.h
+++ b/dlls/gdi32/gdi_private.h
@@ -55,6 +55,8 @@ extern BOOL METADC_Chord( HDC hdc, INT left, INT top, INT right, INT bottom, INT
 extern BOOL METADC_Ellipse( HDC hdc, INT left, INT top, INT right, INT bottom ) DECLSPEC_HIDDEN;
 extern BOOL METADC_ExcludeClipRect( HDC hdc, INT left, INT top, INT right,
                                     INT bottom ) DECLSPEC_HIDDEN;
+extern BOOL METADC_ExtEscape( HDC hdc, INT escape, INT input_size, const void *input,
+                              INT output_size, void *output ) DECLSPEC_HIDDEN;
 extern BOOL METADC_ExtFloodFill( HDC hdc, INT x, INT y, COLORREF color,
                                  UINT fill_type ) DECLSPEC_HIDDEN;
 extern BOOL METADC_ExtSelectClipRgn( HDC hdc, HRGN hrgn, INT mode ) DECLSPEC_HIDDEN;
diff --git a/dlls/gdi32/gdidc.c b/dlls/gdi32/gdidc.c
index c512982c35d..0545dfef696 100644
--- a/dlls/gdi32/gdidc.c
+++ b/dlls/gdi32/gdidc.c
@@ -135,6 +135,17 @@ INT WINAPI GetDeviceCaps( HDC hdc, INT cap )
     return NtGdiGetDeviceCaps( hdc, cap );
 }
 
+/***********************************************************************
+ *		ExtEscape	[GDI32.@]
+ */
+INT WINAPI ExtEscape( HDC hdc, INT escape, INT input_size, const char *input,
+                      INT output_size, char *output )
+{
+    if (is_meta_dc( hdc ))
+        return METADC_ExtEscape( hdc, escape, input_size, input, output_size, output );
+    return NtGdiExtEscape( hdc, NULL, 0, escape, input_size, input, output_size, output );
+}
+
 /***********************************************************************
  *		GetTextAlign (GDI32.@)
  */
diff --git a/dlls/gdi32/mfdrv/init.c b/dlls/gdi32/mfdrv/init.c
index 40fdc5d7a01..7b9880cd789 100644
--- a/dlls/gdi32/mfdrv/init.c
+++ b/dlls/gdi32/mfdrv/init.c
@@ -35,25 +35,25 @@ static BOOL CDECL MFDRV_DeleteDC( PHYSDEV dev );
 
 
 /**********************************************************************
- *           MFDRV_ExtEscape
+ *           METADC_ExtEscape
  */
-static INT CDECL MFDRV_ExtEscape( PHYSDEV dev, INT nEscape, INT cbInput, LPCVOID in_data,
-                                  INT cbOutput, LPVOID out_data )
+BOOL METADC_ExtEscape( HDC hdc, INT escape, INT input_size, const void *input,
+                       INT output_size, void *output )
 {
     METARECORD *mr;
     DWORD len;
-    INT ret;
+    BOOL ret;
 
-    if (cbOutput) return 0;  /* escapes that require output cannot work in metafiles */
+    if (output_size) return FALSE;  /* escapes that require output cannot work in metafiles */
 
-    len = sizeof(*mr) + sizeof(WORD) + ((cbInput + 1) & ~1);
+    len = sizeof(*mr) + sizeof(WORD) + ((input_size + 1) & ~1);
     mr = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len);
     mr->rdSize = len / 2;
     mr->rdFunction = META_ESCAPE;
-    mr->rdParm[0] = nEscape;
-    mr->rdParm[1] = cbInput;
-    memcpy(&(mr->rdParm[2]), in_data, cbInput);
-    ret = MFDRV_WriteRecord( dev, mr, len);
+    mr->rdParm[0] = escape;
+    mr->rdParm[1] = input_size;
+    memcpy( &mr->rdParm[2], input, input_size );
+    ret = metadc_record( hdc, mr, len );
     HeapFree(GetProcessHeap(), 0, mr);
     return ret;
 }
@@ -123,7 +123,7 @@ static const struct gdi_dc_funcs MFDRV_Funcs =
     NULL,                            /* pEnumFonts */
     NULL,                            /* pEnumICMProfiles */
     NULL,                            /* pExtDeviceMode */
-    MFDRV_ExtEscape,                 /* pExtEscape */
+    NULL,                            /* pExtEscape */
     NULL,                            /* pExtFloodFill */
     NULL,                            /* pExtTextOut */
     MFDRV_FillPath,                  /* pFillPath */
diff --git a/include/ntgdi.h b/include/ntgdi.h
index 618ac89a042..a48464f67a8 100644
--- a/include/ntgdi.h
+++ b/include/ntgdi.h
@@ -190,8 +190,8 @@ HRGN     WINAPI NtGdiExtCreateRegion( const XFORM *xform, DWORD count, const RGN
 INT      WINAPI NtGdiExtGetObjectW( HGDIOBJ handle, INT count, void *buffer );
 INT      WINAPI NtGdiExtSelectClipRgn( HDC hdc, HRGN region, INT mode );
 BOOL     WINAPI NtGdiFillRgn( HDC hdc, HRGN hrgn, HBRUSH hbrush );
-INT      WINAPI NtGdiExtEscape( HDC hdc, INT escape, INT input_size, const char *input,
-                                INT output_size, char *output );
+INT      WINAPI NtGdiExtEscape( HDC hdc, WCHAR *driver, INT driver_id, INT escape, INT input_size,
+                                const char *input, INT output_size, char *output );
 BOOL     WINAPI NtGdiExtFloodFill( HDC hdc, INT x, INT y, COLORREF color, UINT type );
 BOOL     WINAPI NtGdiFrameRgn( HDC hdc, HRGN hrgn, HBRUSH brush,
                                INT width, INT height );




More information about the wine-cvs mailing list