Jacek Caban : gdi32: Use NtGdiSetTextJustification for SetTextJustification.

Alexandre Julliard julliard at winehq.org
Thu Aug 5 16:13:40 CDT 2021


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Aug  5 11:25:19 2021 +0200

gdi32: Use NtGdiSetTextJustification for SetTextJustification.

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/enhmfdrv/dc.c             |  8 ++++----
 dlls/gdi32/enhmfdrv/enhmetafiledrv.h |  1 -
 dlls/gdi32/enhmfdrv/init.c           |  2 +-
 dlls/gdi32/font.c                    | 40 +++++++++++++++---------------------
 dlls/gdi32/gdi_private.h             |  2 ++
 dlls/gdi32/gdidc.c                   | 14 +++++++++++++
 dlls/gdi32/mfdrv/dc.c                |  4 ++--
 dlls/gdi32/mfdrv/init.c              |  2 +-
 dlls/gdi32/mfdrv/metafiledrv.h       |  1 -
 9 files changed, 41 insertions(+), 33 deletions(-)

diff --git a/dlls/gdi32/enhmfdrv/dc.c b/dlls/gdi32/enhmfdrv/dc.c
index a0eb0c33344..f4c8ff709a6 100644
--- a/dlls/gdi32/enhmfdrv/dc.c
+++ b/dlls/gdi32/enhmfdrv/dc.c
@@ -63,14 +63,14 @@ BOOL EMFDC_SetTextAlign( DC_ATTR *dc_attr, UINT align )
     return EMFDRV_WriteRecord( dc_attr->emf, &emr.emr );
 }
 
-BOOL CDECL EMFDRV_SetTextJustification(PHYSDEV dev, INT nBreakExtra, INT nBreakCount)
+BOOL EMFDC_SetTextJustification( DC_ATTR *dc_attr, INT extra, INT breaks )
 {
     EMRSETTEXTJUSTIFICATION emr;
     emr.emr.iType = EMR_SETTEXTJUSTIFICATION;
     emr.emr.nSize = sizeof(emr);
-    emr.nBreakExtra = nBreakExtra;
-    emr.nBreakCount = nBreakCount;
-    return EMFDRV_WriteRecord(dev, &emr.emr);
+    emr.nBreakExtra = extra;
+    emr.nBreakCount = breaks;
+    return EMFDRV_WriteRecord( dc_attr->emf, &emr.emr );
 }
 
 BOOL EMFDC_SetBkMode( DC_ATTR *dc_attr, INT mode )
diff --git a/dlls/gdi32/enhmfdrv/enhmetafiledrv.h b/dlls/gdi32/enhmfdrv/enhmetafiledrv.h
index 89b1cd6abfd..6e9cb2ad046 100644
--- a/dlls/gdi32/enhmfdrv/enhmetafiledrv.h
+++ b/dlls/gdi32/enhmfdrv/enhmetafiledrv.h
@@ -119,7 +119,6 @@ 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 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;
 extern BOOL     CDECL EMFDRV_SetViewportOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt ) DECLSPEC_HIDDEN;
 extern BOOL     CDECL EMFDRV_SetWindowExtEx( 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 7969029151a..260de37ec5a 100644
--- a/dlls/gdi32/enhmfdrv/init.c
+++ b/dlls/gdi32/enhmfdrv/init.c
@@ -135,7 +135,7 @@ static const struct gdi_dc_funcs emfdrv_driver =
     EMFDRV_SetPixel,                 /* pSetPixel */
     NULL,                            /* pSetTextCharacterExtra */
     EMFDRV_SetTextColor,             /* pSetTextColor */
-    EMFDRV_SetTextJustification,     /* pSetTextJustification */ 
+    NULL,                            /* pSetTextJustification */
     EMFDRV_SetViewportExtEx,         /* pSetViewportExtEx */
     EMFDRV_SetViewportOrgEx,         /* pSetViewportOrgEx */
     EMFDRV_SetWindowExtEx,           /* pSetWindowExtEx */
diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c
index 7eccc982bbe..039976dbc16 100644
--- a/dlls/gdi32/font.c
+++ b/dlls/gdi32/font.c
@@ -4773,36 +4773,30 @@ INT WINAPI SetTextCharacterExtra( HDC hdc, INT extra )
 
 
 /***********************************************************************
- *           SetTextJustification    (GDI32.@)
+ *           NtGdiSetTextJustification    (win32u.@)
  */
-BOOL WINAPI SetTextJustification( HDC hdc, INT extra, INT breaks )
+BOOL WINAPI NtGdiSetTextJustification( HDC hdc, INT extra, INT breaks )
 {
-    BOOL ret;
-    PHYSDEV physdev;
-    DC * dc = get_dc_ptr( hdc );
+    DC *dc;
 
-    if (!dc) return FALSE;
+    if (!(dc = get_dc_ptr( hdc ))) return FALSE;
 
-    physdev = GET_DC_PHYSDEV( dc, pSetTextJustification );
-    ret = physdev->funcs->pSetTextJustification( physdev, extra, breaks );
-    if (ret)
+    extra = abs( (extra * dc->attr->vport_ext.cx + dc->attr->wnd_ext.cx / 2) /
+                 dc->attr->wnd_ext.cx );
+    if (!extra) breaks = 0;
+    if (breaks)
     {
-        extra = abs( (extra * dc->attr->vport_ext.cx + dc->attr->wnd_ext.cx / 2) /
-                     dc->attr->wnd_ext.cx );
-        if (!extra) breaks = 0;
-        if (breaks)
-        {
-            dc->breakExtra = extra / breaks;
-            dc->breakRem   = extra - (breaks * dc->breakExtra);
-        }
-        else
-        {
-            dc->breakExtra = 0;
-            dc->breakRem   = 0;
-        }
+        dc->breakExtra = extra / breaks;
+        dc->breakRem   = extra - (breaks * dc->breakExtra);
+    }
+    else
+    {
+        dc->breakExtra = 0;
+        dc->breakRem   = 0;
     }
+
     release_dc_ptr( dc );
-    return ret;
+    return TRUE;
 }
 
 
diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h
index e183c40aec5..3a043f37966 100644
--- a/dlls/gdi32/gdi_private.h
+++ b/dlls/gdi32/gdi_private.h
@@ -82,6 +82,7 @@ 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;
+extern BOOL METADC_SetTextJustification( HDC hdc, INT extra, INT breaks ) DECLSPEC_HIDDEN;
 
 /* enhanced metafiles */
 extern BOOL EMFDC_AbortPath( DC_ATTR *dc_attr ) DECLSPEC_HIDDEN;
@@ -138,5 +139,6 @@ 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;
+extern BOOL EMFDC_SetTextJustification( DC_ATTR *dc_attr, INT extra, INT breaks ) DECLSPEC_HIDDEN;
 
 #endif /* __WINE_GDI_PRIVATE_H */
diff --git a/dlls/gdi32/gdidc.c b/dlls/gdi32/gdidc.c
index baa6c199b87..45314781b37 100644
--- a/dlls/gdi32/gdidc.c
+++ b/dlls/gdi32/gdidc.c
@@ -992,6 +992,20 @@ BOOL WINAPI ExtTextOutW( HDC hdc, INT x, INT y, UINT flags, const RECT *rect,
     return NtGdiExtTextOutW( hdc, x, y, flags, rect, str, count, dx, 0 );
 }
 
+/***********************************************************************
+ *           SetTextJustification    (GDI32.@)
+ */
+BOOL WINAPI SetTextJustification( HDC hdc, INT extra, INT breaks )
+{
+    DC_ATTR *dc_attr;
+
+    if (is_meta_dc( hdc )) return METADC_SetTextJustification( hdc, extra, breaks );
+    if (!(dc_attr = get_dc_attr( hdc ))) return FALSE;
+    if (dc_attr->emf && !EMFDC_SetTextJustification( dc_attr, extra, breaks ))
+        return FALSE;
+    return NtGdiSetTextJustification( hdc, extra, breaks );
+}
+
 /***********************************************************************
  *           PatBlt    (GDI32.@)
  */
diff --git a/dlls/gdi32/mfdrv/dc.c b/dlls/gdi32/mfdrv/dc.c
index 363274a40b0..013a2c98d4d 100644
--- a/dlls/gdi32/mfdrv/dc.c
+++ b/dlls/gdi32/mfdrv/dc.c
@@ -135,9 +135,9 @@ BOOL CDECL MFDRV_ScaleWindowExtEx( PHYSDEV dev, INT xNum, INT xDenom, INT yNum,
     return MFDRV_MetaParam4( dev, META_SCALEWINDOWEXT, xNum, xDenom, yNum, yDenom );
 }
 
-BOOL CDECL MFDRV_SetTextJustification( PHYSDEV dev, INT extra, INT breaks )
+BOOL METADC_SetTextJustification( HDC hdc, INT extra, INT breaks )
 {
-    return MFDRV_MetaParam2( dev, META_SETTEXTJUSTIFICATION, extra, breaks );
+    return metadc_param2( hdc, META_SETTEXTJUSTIFICATION, extra, breaks );
 }
 
 INT CDECL MFDRV_SetTextCharacterExtra( PHYSDEV dev, INT extra )
diff --git a/dlls/gdi32/mfdrv/init.c b/dlls/gdi32/mfdrv/init.c
index f49b03cd127..48fdbe5ebe9 100644
--- a/dlls/gdi32/mfdrv/init.c
+++ b/dlls/gdi32/mfdrv/init.c
@@ -200,7 +200,7 @@ static const struct gdi_dc_funcs MFDRV_Funcs =
     NULL,                            /* pSetPixel */
     MFDRV_SetTextCharacterExtra,     /* pSetTextCharacterExtra */
     MFDRV_SetTextColor,              /* pSetTextColor */
-    MFDRV_SetTextJustification,      /* pSetTextJustification */
+    NULL,                            /* pSetTextJustification */
     MFDRV_SetViewportExtEx,          /* pSetViewportExtEx */
     MFDRV_SetViewportOrgEx,          /* pSetViewportOrgEx */
     MFDRV_SetWindowExtEx,            /* pSetWindowExtEx */
diff --git a/dlls/gdi32/mfdrv/metafiledrv.h b/dlls/gdi32/mfdrv/metafiledrv.h
index 52768e641bc..dab24768a53 100644
--- a/dlls/gdi32/mfdrv/metafiledrv.h
+++ b/dlls/gdi32/mfdrv/metafiledrv.h
@@ -108,7 +108,6 @@ 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_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;
 extern BOOL CDECL MFDRV_SetViewportExtEx( PHYSDEV dev, INT x, INT y, SIZE *size ) DECLSPEC_HIDDEN;
 extern BOOL CDECL MFDRV_SetViewportOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt ) DECLSPEC_HIDDEN;
 extern BOOL CDECL MFDRV_SetWindowExtEx( PHYSDEV dev, INT x, INT y, SIZE *size ) DECLSPEC_HIDDEN;




More information about the wine-cvs mailing list