Evan Stade : gdiplus: Added GdipPathIterNextSubpath.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Jul 17 07:36:50 CDT 2007


Module: wine
Branch: master
Commit: 90ff0fdd6c813a762fd490aee9a369146243c014
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=90ff0fdd6c813a762fd490aee9a369146243c014

Author: Evan Stade <estade at gmail.com>
Date:   Mon Jul 16 19:45:10 2007 -0700

gdiplus: Added GdipPathIterNextSubpath.

---

 dlls/gdiplus/gdiplus.spec   |    2 +-
 dlls/gdiplus/pathiterator.c |   34 ++++++++++++++++++++++++++++++++++
 include/gdiplusflat.h       |    1 +
 3 files changed, 36 insertions(+), 1 deletions(-)

diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec
index f1ecbc1..1238e10 100644
--- a/dlls/gdiplus/gdiplus.spec
+++ b/dlls/gdiplus/gdiplus.spec
@@ -440,7 +440,7 @@
 @ stub GdipPathIterNextMarker
 @ stub GdipPathIterNextMarkerPath
 @ stub GdipPathIterNextPathType
-@ stub GdipPathIterNextSubpath
+@ stdcall GdipPathIterNextSubpath(ptr ptr ptr ptr ptr)
 @ stub GdipPathIterNextSubpathPath
 @ stub GdipPathIterRewind
 @ stub GdipPlayMetafileRecord
diff --git a/dlls/gdiplus/pathiterator.c b/dlls/gdiplus/pathiterator.c
index de71e6e..1bd1191 100644
--- a/dlls/gdiplus/pathiterator.c
+++ b/dlls/gdiplus/pathiterator.c
@@ -83,3 +83,37 @@ GpStatus WINGDIPAPI GdipPathIterCopyData(GpPathIterator* iterator,
 
     return Ok;
 }
+
+GpStatus WINGDIPAPI GdipPathIterNextSubpath(GpPathIterator* iterator,
+    INT *resultCount, INT* startIndex, INT* endIndex, BOOL* isClosed)
+{
+    INT i, count;
+
+    if(!iterator)
+        return InvalidParameter;
+
+    count = iterator->pathdata.Count;
+
+    if(iterator->subpath_pos == count){
+        *startIndex = *endIndex = *resultCount = 0;
+        *isClosed = 1;
+        return Ok;
+    }
+
+    *startIndex = iterator->subpath_pos;
+
+    for(i = iterator->subpath_pos + 1; i < count &&
+        !(iterator->pathdata.Types[i] == PathPointTypeStart); i++);
+
+    *endIndex = i - 1;
+    iterator->subpath_pos = i;
+
+    *resultCount = *endIndex - *startIndex + 1;
+
+    if(iterator->pathdata.Types[*endIndex] & PathPointTypeCloseSubpath)
+        *isClosed = TRUE;
+    else
+        *isClosed = FALSE;
+
+    return Ok;
+}
diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h
index 0aa2e7d..c9a3f50 100644
--- a/include/gdiplusflat.h
+++ b/include/gdiplusflat.h
@@ -89,6 +89,7 @@ GpStatus WINGDIPAPI GdipCreatePathIter(GpPathIterator**,GpPath*);
 GpStatus WINGDIPAPI GdipDeletePathIter(GpPathIterator*);
 GpStatus WINGDIPAPI GdipPathIterCopyData(GpPathIterator*,INT*,GpPointF*,BYTE*,
     INT,INT);
+GpStatus WINGDIPAPI GdipPathIterNextSubpath(GpPathIterator*,INT*,INT*,INT*,BOOL*);
 
 #ifdef __cplusplus
 }




More information about the wine-cvs mailing list