Module: wine Branch: master Commit: 90ff0fdd6c813a762fd490aee9a369146243c014 URL: http://source.winehq.org/git/wine.git/?a=commit;h=90ff0fdd6c813a762fd490aee9...
Author: Evan Stade estade@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 }