From 90ff0fdd6c813a762fd490aee9a369146243c014 Mon Sep 17 00:00:00 2001 From: Evan Stade Date: Mon, 16 Jul 2007 19:45:10 -0700 Subject: [PATCH] gdiplus: Added GdipPathIterNextSubpath. --- dlls/gdiplus/gdiplus.spec | 2 +- dlls/gdiplus/pathiterator.c | 34 ++++++++++++++++++++++++++++++++++ include/gdiplusflat.h | 1 + 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec index f1ecbc187d9..1238e10e21c 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 de71e6eba1a..1bd119106e5 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 0aa2e7d5f5d..c9a3f50f835 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 }