Module: wine Branch: master Commit: 378fc7f0fda83b9afd418fc0f34a438db0fa4f55 URL: https://gitlab.winehq.org/wine/wine/-/commit/378fc7f0fda83b9afd418fc0f34a438...
Author: Piotr Caban piotr@codeweavers.com Date: Fri Mar 24 11:20:20 2023 +0100
wineps: Introduce helper for PolyBezier drawing.
---
dlls/wineps.drv/graphics.c | 61 ++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 35 deletions(-)
diff --git a/dlls/wineps.drv/graphics.c b/dlls/wineps.drv/graphics.c index 45f20728183..3ea663ccb2d 100644 --- a/dlls/wineps.drv/graphics.c +++ b/dlls/wineps.drv/graphics.c @@ -375,58 +375,49 @@ BOOL CDECL PSDRV_PolyPolygon( PHYSDEV dev, const POINT* pts, const INT* counts, return TRUE; }
- -/*********************************************************************** - * PSDRV_PolyBezier - */ -BOOL CDECL PSDRV_PolyBezier( PHYSDEV dev, const POINT *pts, DWORD count ) +static BOOL poly_bezier( PHYSDEV dev, const POINT *pt0, const POINT *pts, DWORD count) { + POINT dev_pts[3]; DWORD i; - POINT *dev_pts;
- TRACE("\n"); + TRACE( "\n" );
- if (!(dev_pts = HeapAlloc( GetProcessHeap(), 0, count * sizeof(*dev_pts) ))) return FALSE; - memcpy( dev_pts, pts, count * sizeof(*dev_pts) ); - LPtoDP( dev->hdc, dev_pts, count ); + dev_pts[0] = *pt0; + LPtoDP( dev->hdc, dev_pts, 1 );
- PSDRV_WriteSpool(dev, "%PolyBezier\n",12); - PSDRV_SetPen(dev); - PSDRV_SetClip(dev); - PSDRV_WriteMoveTo(dev, dev_pts[0].x, dev_pts[0].y ); - for (i = 1; i < count; i += 3) PSDRV_WriteCurveTo( dev, dev_pts + i ); + PSDRV_WriteSpool( dev, "%PolyBezier\n", 12 ); + PSDRV_SetPen( dev ); + PSDRV_SetClip( dev ); + PSDRV_WriteMoveTo( dev, dev_pts[0].x, dev_pts[0].y ); + for (i = 0; i < count; i += 3) + { + memcpy( dev_pts, pts, sizeof(dev_pts) ); + LPtoDP( dev->hdc, dev_pts, 3 ); + PSDRV_WriteCurveTo( dev, dev_pts ); + } PSDRV_DrawLine(dev); PSDRV_ResetClip(dev); - HeapFree( GetProcessHeap(), 0, dev_pts ); return TRUE; }
+/*********************************************************************** + * PSDRV_PolyBezier + */ +BOOL CDECL PSDRV_PolyBezier( PHYSDEV dev, const POINT *pts, DWORD count ) +{ + return poly_bezier( dev, pts, pts + 1, count - 1 ); +} +
/*********************************************************************** * PSDRV_PolyBezierTo */ BOOL CDECL PSDRV_PolyBezierTo( PHYSDEV dev, const POINT *pts, DWORD count ) { - DWORD i; - POINT *dev_pts; - - TRACE("\n"); + POINT pt0;
- count++; /* add initial position */ - if (!(dev_pts = HeapAlloc( GetProcessHeap(), 0, count * sizeof(*dev_pts) ))) return FALSE; - GetCurrentPositionEx( dev->hdc, dev_pts ); - memcpy( dev_pts + 1, pts, (count - 1) * sizeof(*dev_pts) ); - LPtoDP( dev->hdc, dev_pts, count ); - - PSDRV_WriteSpool(dev, "%PolyBezier\n",12); - PSDRV_SetPen(dev); - PSDRV_SetClip(dev); - PSDRV_WriteMoveTo(dev, dev_pts[0].x, dev_pts[0].y ); - for (i = 1; i < count; i += 3) PSDRV_WriteCurveTo( dev, dev_pts + i ); - PSDRV_DrawLine(dev); - PSDRV_ResetClip(dev); - HeapFree( GetProcessHeap(), 0, dev_pts ); - return TRUE; + GetCurrentPositionEx( dev->hdc, &pt0 ); + return poly_bezier( dev, &pt0, pts, count ); }