[Gdiplus 11/15] Implement GdipCreateRegionRect

Huw Davies huw at codeweavers.com
Wed Jul 9 05:58:23 CDT 2008


On Wed, Jul 09, 2008 at 03:34:01AM -0400, Adam Petaccia wrote:
> ---
>  dlls/gdiplus/region.c       |   28 ++++++++++++++++++++++++----
>  dlls/gdiplus/tests/region.c |    8 ++++----
>  2 files changed, 28 insertions(+), 8 deletions(-)
> 
> diff --git a/dlls/gdiplus/region.c b/dlls/gdiplus/region.c
> index 59e2fa6..de86ce1 100644
> --- a/dlls/gdiplus/region.c
> +++ b/dlls/gdiplus/region.c
> @@ -129,12 +129,32 @@ GpStatus WINGDIPAPI GdipCreateRegionPath(GpPath *path, GpRegion **region)
>      return Ok;
>  }
>  
> -GpStatus WINGDIPAPI GdipCreateRegionRect(GDIPCONST GpRectF *rect, GpRegion **region)
> +GpStatus WINGDIPAPI GdipCreateRegionRect(GDIPCONST GpRectF *rect,
> +        GpRegion **region)
>  {
> -    FIXME("(%p, %p): stub\n", rect, region);
> +    GpPath *path;
> +    GpStatus stat;
>  
> -    *region = NULL;
> -    return NotImplemented;
> +    if (!(rect && region))
> +        return InvalidParameter;
> +
> +    TRACE("%p, %p\n", rect, region);
> +
> +    *region = GdipAlloc(sizeof(GpRegion*));
> +    if(!*region)
> +        return OutOfMemory;
> +
> +    stat = GdipCreatePath(FillModeAlternate, &path);
> +    if (stat != Ok) { GdipDeleteRegion(*region); return stat;}
> +    stat = GdipAddPathRectangle(path, rect->X, rect->Y,
> +            rect->Width, rect->Height);
> +    if (stat != Ok) { GdipDeleteRegion(*region); return stat;}
> +    stat = GdipCreateRegionPath(path, region);
> +    if (stat != Ok) { GdipDeleteRegion(*region); return stat;}
> +
> +    GdipDeletePath(path);
> +
> +    return Ok;
>  }


This doesn't look right.  See the GdipGetRegionData tests (and extend
them to add paths), these are supposed to help understanding how
regions are stored.  It looks to me that a region is stored as a
sequence of rects and paths that are combined with various CombineMode
ops.

I'll send a patch that adds paths to the test in a bit.

Huw. 
-- 
Huw Davies
huw at codeweavers.com



More information about the wine-devel mailing list