Module: wine Branch: master Commit: ea5fa7ddbef2ac8bbbfc12fee12a1761573d99a7 URL: http://source.winehq.org/git/wine.git/?a=commit;h=ea5fa7ddbef2ac8bbbfc12fee1...
Author: Alexandre Julliard julliard@winehq.org Date: Fri Apr 13 13:39:06 2012 +0200
gdi32: Map all the points at once in PolyPolyline, similarly to what PolyPolygon does.
---
dlls/gdi32/dibdrv/graphics.c | 19 +++++++++---------- 1 files changed, 9 insertions(+), 10 deletions(-)
diff --git a/dlls/gdi32/dibdrv/graphics.c b/dlls/gdi32/dibdrv/graphics.c index 5cffeac..d29c405 100644 --- a/dlls/gdi32/dibdrv/graphics.c +++ b/dlls/gdi32/dibdrv/graphics.c @@ -949,19 +949,21 @@ BOOL dibdrv_PolyPolygon( PHYSDEV dev, const POINT *pt, const INT *counts, DWORD BOOL dibdrv_PolyPolyline( PHYSDEV dev, const POINT* pt, const DWORD* counts, DWORD polylines ) { dibdrv_physdev *pdev = get_dibdrv_pdev(dev); - DWORD max_points = 0, i; + DWORD total, pos, i; POINT *points; BOOL ret = TRUE; HRGN outline = 0;
- for (i = 0; i < polylines; i++) + for (i = total = 0; i < polylines; i++) { if (counts[i] < 2) return FALSE; - max_points = max( counts[i], max_points ); + total += counts[i]; }
- points = HeapAlloc( GetProcessHeap(), 0, max_points * sizeof(*pt) ); + points = HeapAlloc( GetProcessHeap(), 0, total * sizeof(*pt) ); if (!points) return FALSE; + memcpy( points, pt, total * sizeof(*pt) ); + LPtoDP( dev->hdc, points, total );
if (pdev->pen_uses_region && !(outline = CreateRectRgn( 0, 0, 0, 0 ))) { @@ -969,14 +971,11 @@ BOOL dibdrv_PolyPolyline( PHYSDEV dev, const POINT* pt, const DWORD* counts, DWO return FALSE; }
- for (i = 0; i < polylines; i++) + for (i = pos = 0; i < polylines; i++) { - memcpy( points, pt, counts[i] * sizeof(*pt) ); - pt += counts[i]; - LPtoDP( dev->hdc, points, counts[i] ); - reset_dash_origin( pdev ); - pdev->pen_lines( pdev, counts[i], points, FALSE, outline ); + pdev->pen_lines( pdev, counts[i], points + pos, FALSE, outline ); + pos += counts[i]; }
if (outline)