Alexandre Julliard : gdi32: Implement the polygon entry points in the path driver.
Alexandre Julliard
julliard at winehq.org
Thu Oct 27 13:30:11 CDT 2011
Module: wine
Branch: master
Commit: d4889bef47331f556cc1bfdbecfb8a65ccd513cb
URL: http://source.winehq.org/git/wine.git/?a=commit;h=d4889bef47331f556cc1bfdbecfb8a65ccd513cb
Author: Alexandre Julliard <julliard at winehq.org>
Date: Tue Oct 25 15:40:42 2011 +0200
gdi32: Implement the polygon entry points in the path driver.
---
dlls/gdi32/gdi_private.h | 2 -
dlls/gdi32/painting.c | 16 ++-------
dlls/gdi32/path.c | 80 ++++++++++++++++++++++------------------------
3 files changed, 42 insertions(+), 56 deletions(-)
diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h
index 68b5abf..73b7db5 100644
--- a/dlls/gdi32/gdi_private.h
+++ b/dlls/gdi32/gdi_private.h
@@ -329,9 +329,7 @@ extern BOOL PATH_ExtTextOut(DC *dc, INT x, INT y, UINT flags, const RECT *lprc,
LPCWSTR str, UINT count, const INT *dx) DECLSPEC_HIDDEN;
extern BOOL PATH_PolylineTo(DC *dc, const POINT *pt, DWORD cbCount) DECLSPEC_HIDDEN;
extern BOOL PATH_Polyline(DC *dc, const POINT *pt, DWORD cbCount) DECLSPEC_HIDDEN;
-extern BOOL PATH_Polygon(DC *dc, const POINT *pt, DWORD cbCount) DECLSPEC_HIDDEN;
extern BOOL PATH_PolyPolyline(DC *dc, const POINT *pt, const DWORD *counts, DWORD polylines) DECLSPEC_HIDDEN;
-extern BOOL PATH_PolyPolygon(DC *dc, const POINT *pt, const INT *counts, UINT polygons) DECLSPEC_HIDDEN;
/* painting.c */
extern POINT *GDI_Bezier( const POINT *Points, INT count, INT *nPtsOut ) DECLSPEC_HIDDEN;
diff --git a/dlls/gdi32/painting.c b/dlls/gdi32/painting.c
index d0c2955..87b5302 100644
--- a/dlls/gdi32/painting.c
+++ b/dlls/gdi32/painting.c
@@ -777,13 +777,9 @@ BOOL WINAPI Polygon( HDC hdc, const POINT* pt, INT count )
if (dc)
{
+ PHYSDEV physdev = GET_DC_PHYSDEV( dc, pPolygon );
update_dc( dc );
- if (PATH_IsPathOpen(dc->path)) ret = PATH_Polygon(dc, pt, count);
- else
- {
- PHYSDEV physdev = GET_DC_PHYSDEV( dc, pPolygon );
- ret = physdev->funcs->pPolygon( physdev, pt, count );
- }
+ ret = physdev->funcs->pPolygon( physdev, pt, count );
release_dc_ptr( dc );
}
return ret;
@@ -801,13 +797,9 @@ BOOL WINAPI PolyPolygon( HDC hdc, const POINT* pt, const INT* counts,
if (dc)
{
+ PHYSDEV physdev = GET_DC_PHYSDEV( dc, pPolyPolygon );
update_dc( dc );
- if (PATH_IsPathOpen(dc->path)) ret = PATH_PolyPolygon(dc, pt, counts, polygons);
- else
- {
- PHYSDEV physdev = GET_DC_PHYSDEV( dc, pPolyPolygon );
- ret = physdev->funcs->pPolyPolygon( physdev, pt, counts, polygons );
- }
+ ret = physdev->funcs->pPolyPolygon( physdev, pt, counts, polygons );
release_dc_ptr( dc );
}
return ret;
diff --git a/dlls/gdi32/path.c b/dlls/gdi32/path.c
index 896d145..c7dde62 100644
--- a/dlls/gdi32/path.c
+++ b/dlls/gdi32/path.c
@@ -1373,51 +1373,47 @@ BOOL PATH_PolylineTo(DC *dc, const POINT *pts, DWORD cbPoints)
}
-BOOL PATH_Polygon(DC *dc, const POINT *pts, DWORD cbPoints)
+/*************************************************************
+ * pathdrv_Polygon
+ */
+static BOOL pathdrv_Polygon( PHYSDEV dev, const POINT *pts, INT cbPoints )
{
- GdiPath *pPath = &dc->path;
- POINT pt;
- UINT i;
-
- /* Check that path is open */
- if(pPath->state!=PATH_Open)
- return FALSE;
+ struct path_physdev *physdev = get_path_physdev( dev );
+ POINT pt;
+ INT i;
- for(i = 0; i < cbPoints; i++) {
- pt = pts[i];
- if(!LPtoDP(dc->hSelf, &pt, 1))
- return FALSE;
- PATH_AddEntry(pPath, &pt, (i == 0) ? PT_MOVETO :
- ((i == cbPoints-1) ? PT_LINETO | PT_CLOSEFIGURE :
- PT_LINETO));
- }
- return TRUE;
+ for(i = 0; i < cbPoints; i++) {
+ pt = pts[i];
+ LPtoDP( dev->hdc, &pt, 1 );
+ PATH_AddEntry(physdev->path, &pt, (i == 0) ? PT_MOVETO :
+ ((i == cbPoints-1) ? PT_LINETO | PT_CLOSEFIGURE :
+ PT_LINETO));
+ }
+ return TRUE;
}
-BOOL PATH_PolyPolygon( DC *dc, const POINT* pts, const INT* counts,
- UINT polygons )
-{
- GdiPath *pPath = &dc->path;
- POINT pt, startpt;
- UINT poly, i;
- INT point;
- /* Check that path is open */
- if(pPath->state!=PATH_Open)
- return FALSE;
-
- for(i = 0, poly = 0; poly < polygons; poly++) {
- for(point = 0; point < counts[poly]; point++, i++) {
- pt = pts[i];
- if(!LPtoDP(dc->hSelf, &pt, 1))
- return FALSE;
- if(point == 0) startpt = pt;
- PATH_AddEntry(pPath, &pt, (point == 0) ? PT_MOVETO : PT_LINETO);
- }
- /* win98 adds an extra line to close the figure for some reason */
- PATH_AddEntry(pPath, &startpt, PT_LINETO | PT_CLOSEFIGURE);
- }
- return TRUE;
+/*************************************************************
+ * pathdrv_PolyPolygon
+ */
+static BOOL pathdrv_PolyPolygon( PHYSDEV dev, const POINT* pts, const INT* counts, UINT polygons )
+{
+ struct path_physdev *physdev = get_path_physdev( dev );
+ POINT pt, startpt;
+ UINT poly, i;
+ INT point;
+
+ for(i = 0, poly = 0; poly < polygons; poly++) {
+ for(point = 0; point < counts[poly]; point++, i++) {
+ pt = pts[i];
+ LPtoDP( dev->hdc, &pt, 1 );
+ if(point == 0) startpt = pt;
+ PATH_AddEntry(physdev->path, &pt, (point == 0) ? PT_MOVETO : PT_LINETO);
+ }
+ /* win98 adds an extra line to close the figure for some reason */
+ PATH_AddEntry(physdev->path, &startpt, PT_LINETO | PT_CLOSEFIGURE);
+ }
+ return TRUE;
}
BOOL PATH_PolyPolyline( DC *dc, const POINT* pts, const DWORD* counts,
@@ -2362,9 +2358,9 @@ const struct gdi_dc_funcs path_driver =
pathdrv_PolyBezier, /* pPolyBezier */
pathdrv_PolyBezierTo, /* pPolyBezierTo */
pathdrv_PolyDraw, /* pPolyDraw */
- NULL, /* pPolyPolygon */
+ pathdrv_PolyPolygon, /* pPolyPolygon */
NULL, /* pPolyPolyline */
- NULL, /* pPolygon */
+ pathdrv_Polygon, /* pPolygon */
NULL, /* pPolyline */
NULL, /* pPolylineTo */
NULL, /* pPutImage */
More information about the wine-cvs
mailing list