Huw Davies : gdi32: Implement Polyline and PolyPolyline in the dib driver.
Alexandre Julliard
julliard at winehq.org
Mon Aug 22 13:29:11 CDT 2011
Module: wine
Branch: master
Commit: c6f6c3f727556734905a5bbf4fe1b59079e37bf5
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c6f6c3f727556734905a5bbf4fe1b59079e37bf5
Author: Huw Davies <huw at codeweavers.com>
Date: Fri Aug 19 16:26:19 2011 +0100
gdi32: Implement Polyline and PolyPolyline in the dib driver.
---
dlls/gdi32/dibdrv/dc.c | 4 +-
dlls/gdi32/dibdrv/dibdrv.h | 3 ++
dlls/gdi32/dibdrv/graphics.c | 55 ++++++++++++++++++++++++++++++++++++++++++
3 files changed, 60 insertions(+), 2 deletions(-)
diff --git a/dlls/gdi32/dibdrv/dc.c b/dlls/gdi32/dibdrv/dc.c
index 64769be..03e3f65 100644
--- a/dlls/gdi32/dibdrv/dc.c
+++ b/dlls/gdi32/dibdrv/dc.c
@@ -773,9 +773,9 @@ const DC_FUNCTIONS dib_driver =
NULL, /* pPolyBezierTo */
NULL, /* pPolyDraw */
NULL, /* pPolyPolygon */
- NULL, /* pPolyPolyline */
+ dibdrv_PolyPolyline, /* pPolyPolyline */
NULL, /* pPolygon */
- NULL, /* pPolyline */
+ dibdrv_Polyline, /* pPolyline */
NULL, /* pPolylineTo */
dibdrv_PutImage, /* pPutImage */
NULL, /* pRealizeDefaultPalette */
diff --git a/dlls/gdi32/dibdrv/dibdrv.h b/dlls/gdi32/dibdrv/dibdrv.h
index bab52cd..760c02e 100644
--- a/dlls/gdi32/dibdrv/dibdrv.h
+++ b/dlls/gdi32/dibdrv/dibdrv.h
@@ -21,6 +21,9 @@
extern BOOL dibdrv_LineTo( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN;
extern BOOL dibdrv_PatBlt( PHYSDEV dev, struct bitblt_coords *dst, DWORD rop ) DECLSPEC_HIDDEN;
extern BOOL dibdrv_PaintRgn( PHYSDEV dev, HRGN hrgn ) DECLSPEC_HIDDEN;
+extern BOOL dibdrv_PolyPolyline( PHYSDEV dev, const POINT* pt, const DWORD* counts,
+ DWORD polylines ) DECLSPEC_HIDDEN;
+extern BOOL dibdrv_Polyline( PHYSDEV dev, const POINT* pt, INT count ) DECLSPEC_HIDDEN;
extern BOOL dibdrv_Rectangle( PHYSDEV dev, INT left, INT top, INT right, INT bottom ) DECLSPEC_HIDDEN;
extern HBRUSH dibdrv_SelectBrush( PHYSDEV dev, HBRUSH hbrush ) DECLSPEC_HIDDEN;
extern HPEN dibdrv_SelectPen( PHYSDEV dev, HPEN hpen ) DECLSPEC_HIDDEN;
diff --git a/dlls/gdi32/dibdrv/graphics.c b/dlls/gdi32/dibdrv/graphics.c
index ff83d1a..b2e9f2c 100644
--- a/dlls/gdi32/dibdrv/graphics.c
+++ b/dlls/gdi32/dibdrv/graphics.c
@@ -147,6 +147,61 @@ BOOL dibdrv_PaintRgn( PHYSDEV dev, HRGN rgn )
}
/***********************************************************************
+ * dibdrv_PolyPolyline
+ */
+BOOL dibdrv_PolyPolyline( PHYSDEV dev, const POINT* pt, const DWORD* counts, DWORD polylines )
+{
+ dibdrv_physdev *pdev = get_dibdrv_pdev(dev);
+ PHYSDEV next = GET_NEXT_PHYSDEV( dev, pPolyPolyline );
+ DWORD max_points = 0, i;
+ POINT *points;
+
+ if (defer_pen( pdev )) return next->funcs->pPolyPolyline( next, pt, counts, polylines );
+
+ for (i = 0; i < polylines; i++) max_points = max( counts[i], max_points );
+
+ points = HeapAlloc( GetProcessHeap(), 0, max_points * sizeof(*pt) );
+ if (!points) return FALSE;
+
+ for (i = 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 );
+ }
+
+ HeapFree( GetProcessHeap(), 0, points );
+ return TRUE;
+}
+
+/***********************************************************************
+ * dibdrv_Polyline
+ */
+BOOL dibdrv_Polyline( PHYSDEV dev, const POINT* pt, INT count )
+{
+ dibdrv_physdev *pdev = get_dibdrv_pdev(dev);
+ PHYSDEV next = GET_NEXT_PHYSDEV( dev, pPolyline );
+ POINT *points;
+
+ if (defer_pen( pdev )) return next->funcs->pPolyline( next, pt, count );
+
+ points = HeapAlloc( GetProcessHeap(), 0, count * sizeof(*pt) );
+ if (!points) return FALSE;
+
+ memcpy( points, pt, count * sizeof(*pt) );
+ LPtoDP( dev->hdc, points, count );
+
+ reset_dash_origin( pdev );
+ pdev->pen_lines( pdev, count, points );
+
+ HeapFree( GetProcessHeap(), 0, points );
+ return TRUE;
+}
+
+/***********************************************************************
* dibdrv_Rectangle
*/
BOOL dibdrv_Rectangle( PHYSDEV dev, INT left, INT top, INT right, INT bottom )
More information about the wine-cvs
mailing list