From: Bartosz Kosiorek gang65@poczta.onet.pl
--- dlls/gdiplus/customlinecap.c | 6 +++++- dlls/gdiplus/tests/customlinecap.c | 19 +++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/dlls/gdiplus/customlinecap.c b/dlls/gdiplus/customlinecap.c index f35fea90eba..1e0ba9203ff 100644 --- a/dlls/gdiplus/customlinecap.c +++ b/dlls/gdiplus/customlinecap.c @@ -115,9 +115,13 @@ GpStatus WINGDIPAPI GdipCreateCustomLineCap(GpPath* fillPath, GpPath* strokePath
TRACE("%p %p %d %f %p\n", fillPath, strokePath, baseCap, baseInset, customCap);
- if(!customCap || !(fillPath || strokePath)) + if (!customCap || !(fillPath || strokePath)) return InvalidParameter;
+ /* The fillPath and strokePath parameters cannot be used at the same time */ + if (fillPath && strokePath) + return NotImplemented; + *customCap = heap_alloc_zero(sizeof(GpCustomLineCap)); if(!*customCap) return OutOfMemory;
diff --git a/dlls/gdiplus/tests/customlinecap.c b/dlls/gdiplus/tests/customlinecap.c index a8bb5cf371b..8a2bbb91c46 100644 --- a/dlls/gdiplus/tests/customlinecap.c +++ b/dlls/gdiplus/tests/customlinecap.c @@ -54,12 +54,12 @@ static void test_constructor_destructor(void)
stat = GdipCreatePath(FillModeAlternate, &path); expect(Ok, stat); - stat = GdipAddPathRectangle(path, 5.0, 5.0, 10.0, 10.0); + stat = GdipAddPathRectangle(path, -5.0, -4.0, 10.0, 8.0); expect(Ok, stat);
stat = GdipCreatePath(FillModeAlternate, &path2); expect(Ok, stat); - stat = GdipAddPathRectangle(path2, 5.0, 5.0, 10.0, 10.0); + stat = GdipAddPathRectangle(path2, -5.0, -5.0, 10.0, 10.0); expect(Ok, stat);
/* NULL args */ @@ -74,12 +74,27 @@ static void test_constructor_destructor(void) stat = GdipDeleteCustomLineCap(NULL); expect(InvalidParameter, stat);
+ /* The fillPath and strokePath parameters cannot be used at the same time */ + custom = NULL; + stat = GdipCreateCustomLineCap(path, path2, LineCapFlat, 0.0, &custom); + expect(NotImplemented, stat); + ok(custom == NULL, "Expected a failure on creation\n"); + /* valid args */ + custom = NULL; stat = GdipCreateCustomLineCap(NULL, path2, LineCapFlat, 0.0, &custom); expect(Ok, stat); + ok(custom != NULL, "Custom line cap was not created\n"); stat = GdipDeleteCustomLineCap(custom); expect(Ok, stat); + /* it's strange but native returns NotImplemented on stroke == NULL */ + custom = NULL; + stat = GdipCreateCustomLineCap(path, NULL, LineCapTriangle, 0.0, &custom); + todo_wine expect(NotImplemented, stat); + todo_wine ok(custom == NULL, "Expected a failure on creation\n"); + if(stat == Ok) GdipDeleteCustomLineCap(custom); + custom = NULL; stat = GdipCreateCustomLineCap(path, NULL, LineCapFlat, 10.0, &custom); todo_wine expect(NotImplemented, stat);