From ff88d4e18e806c6c5256ef00f8a8f612c1469ae8 Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Thu, 28 Aug 2008 17:34:22 +0400 Subject: [PATCH] gdiplus: Implemented GdipResetClip with tests. --- dlls/gdiplus/gdiplus.spec | 2 +- dlls/gdiplus/graphics.c | 11 +++++++++++ dlls/gdiplus/tests/graphics.c | 33 +++++++++++++++++++++++++++++++++ include/gdiplusflat.h | 1 + 4 files changed, 46 insertions(+), 1 deletion(-) diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec index 95add0d10a2..87dc7473531 100644 --- a/dlls/gdiplus/gdiplus.spec +++ b/dlls/gdiplus/gdiplus.spec @@ -474,7 +474,7 @@ @ stub GdipRecordMetafileStreamI @ stdcall GdipReleaseDC(ptr ptr) @ stdcall GdipRemovePropertyItem(ptr long) -@ stub GdipResetClip +@ stdcall GdipResetClip(ptr) @ stub GdipResetImageAttributes @ stub GdipResetLineTransform @ stub GdipResetPageTransform diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c index a2ff33ff77f..bcfe70f6e5e 100644 --- a/dlls/gdiplus/graphics.c +++ b/dlls/gdiplus/graphics.c @@ -2514,6 +2514,17 @@ GpStatus WINGDIPAPI GdipMeasureString(GpGraphics *graphics, return Ok; } +GpStatus WINGDIPAPI GdipResetClip(GpGraphics *graphics) +{ + if(!graphics) + return InvalidParameter; + + if(graphics->busy) + return ObjectBusy; + + return GdipSetInfinite(graphics->clip); +} + GpStatus WINGDIPAPI GdipResetWorldTransform(GpGraphics *graphics) { if(!graphics) diff --git a/dlls/gdiplus/tests/graphics.c b/dlls/gdiplus/tests/graphics.c index e316ab96b3a..8bd76d1dcce 100644 --- a/dlls/gdiplus/tests/graphics.c +++ b/dlls/gdiplus/tests/graphics.c @@ -674,6 +674,8 @@ static void test_Get_Release_DC(void) expect(ObjectBusy, status); status = Ok; /* GdipMeasureCharacterRanges */ /* GdipMeasureString */ + status = GdipResetClip(graphics); + expect(ObjectBusy, status); status = Ok; status = GdipResetWorldTransform(graphics); expect(ObjectBusy, status); status = Ok; /* GdipRestoreGraphics */ @@ -805,6 +807,37 @@ static void test_get_set_clip(void) expect(Ok, status); expect(TRUE, res); + /* remains infinite after reset */ + res = FALSE; + status = GdipResetClip(graphics); + expect(Ok, status); + status = GdipGetClip(graphics, clip); + expect(Ok, status); + status = GdipIsInfiniteRegion(clip, graphics, &res); + expect(Ok, status); + expect(TRUE, res); + + /* set to empty and then reset to infinite */ + status = GdipSetEmpty(clip); + expect(Ok, status); + status = GdipSetClipRegion(graphics, clip, CombineModeReplace); + expect(Ok, status); + + status = GdipGetClip(graphics, clip); + expect(Ok, status); + res = FALSE; + status = GdipIsEmptyRegion(clip, graphics, &res); + expect(Ok, status); + expect(TRUE, res); + status = GdipResetClip(graphics); + expect(Ok, status); + status = GdipGetClip(graphics, clip); + expect(Ok, status); + res = FALSE; + status = GdipIsInfiniteRegion(clip, graphics, &res); + expect(Ok, status); + expect(TRUE, res); + GdipDeleteRegion(clip); GdipDeleteGraphics(graphics); diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h index 8a1e8f70bd5..d9b70b2a57e 100644 --- a/include/gdiplusflat.h +++ b/include/gdiplusflat.h @@ -157,6 +157,7 @@ GpStatus WINGDIPAPI GdipFillRectanglesI(GpGraphics*,GpBrush*,GDIPCONST GpRect*,I GpStatus WINGDIPAPI GdipGetCompositingMode(GpGraphics*,CompositingMode*); GpStatus WINGDIPAPI GdipGetClip(GpGraphics*,GpRegion*); GpStatus WINGDIPAPI GdipSetClipRegion(GpGraphics*,GpRegion*,CombineMode); +GpStatus WINGDIPAPI GdipResetClip(GpGraphics*); GpStatus WINGDIPAPI GdipGetCompositingQuality(GpGraphics*,CompositingQuality*); GpStatus WINGDIPAPI GdipGetDC(GpGraphics*,HDC*); GpStatus WINGDIPAPI GdipGetImageDimension(GpImage*,REAL*,REAL*);