2 * Copyright (C) 2008 Google (Lei Zhang)
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
28 #include "gdiplus_private.h"
29 #include "wine/debug.h"
31 WINE_DEFAULT_DEBUG_CHANNEL(gdiplus);
33 /**********************************************************
35 * Data returned by GdipGetRegionData looks something like this:
37 * struct region_data_header
39 * DWORD size; size in bytes of the data - 8.
40 * DWORD magic1; probably a checksum.
41 * DWORD magic2; always seems to be 0xdbc01001 - version?
42 * DWORD num_ops; number of combining ops * 2
45 * Then follows a sequence of combining ops and region elements.
47 * A region element is either a RECTF or some path data.
49 * Combining ops are just stored as their CombineMode value.
51 * Each RECTF is preceded by the DWORD 0x10000000. An empty rect is
52 * stored as 0x10000002 (with no following RECTF) and an infinite rect
53 * is stored as 0x10000003 (again with no following RECTF).
55 * Path data is preceded by the DWORD 0x10000001. Then follows a
56 * DWORD size and then size bytes of data.
58 * The combining ops are stored in the reverse order to the region
59 * elements and in the reverse order to which the region was
62 * When two or more complex regions (ie those with more than one
63 * element) are combined, the combining op for the two regions comes
64 * first, then the combining ops for the region elements in region 1,
65 * followed by the region elements for region 1, then follows the
66 * combining ops for region 2 and finally region 2's region elements.
67 * Presumably you're supposed to use the 0x1000000x header to find the
68 * end of the op list (the count of the elements in each region is not
71 * When a simple region (1 element) is combined, it's treated as if a
72 * single rect/path is being combined.
76 GpStatus WINGDIPAPI GdipCloneRegion(GpRegion *region, GpRegion **clone)
78 FIXME("(%p %p): stub\n", region, clone);
81 return NotImplemented;
84 GpStatus WINGDIPAPI GdipCombineRegionPath(GpRegion *region, GpPath *path, CombineMode mode)
86 FIXME("(%p %p %d): stub\n", region, path, mode);
87 return NotImplemented;
90 GpStatus WINGDIPAPI GdipCombineRegionRect(GpRegion *region, GDIPCONST GpRectF *rect,
93 FIXME("(%p %p %d): stub\n", region, rect, mode);
94 return NotImplemented;
97 GpStatus WINGDIPAPI GdipCombineRegionRectI(GpRegion *region, GDIPCONST GpRect *rect,
100 FIXME("(%p %p %d): stub\n", region, rect, mode);
101 return NotImplemented;
104 GpStatus WINGDIPAPI GdipCombineRegionRegion(GpRegion *region1, GpRegion *region2,
107 FIXME("(%p %p %d): stub\n", region1, region2, mode);
108 return NotImplemented;
111 GpStatus WINGDIPAPI GdipCreateRegion(GpRegion **region)
113 FIXME("(%p): stub\n", region);
116 return NotImplemented;
119 GpStatus WINGDIPAPI GdipCreateRegionPath(GpPath *path, GpRegion **region)
121 FIXME("(%p, %p): stub\n", path, region);
124 return NotImplemented;
127 GpStatus WINGDIPAPI GdipCreateRegionRect(GDIPCONST GpRectF *rect, GpRegion **region)
129 FIXME("(%p, %p): stub\n", rect, region);
132 return NotImplemented;
135 GpStatus WINGDIPAPI GdipCreateRegionRectI(GDIPCONST GpRect *rect, GpRegion **region)
137 FIXME("(%p, %p): stub\n", rect, region);
140 return NotImplemented;
143 GpStatus WINGDIPAPI GdipCreateRegionRgnData(GDIPCONST BYTE *data, INT size, GpRegion **region)
145 FIXME("(%p, %d, %p): stub\n", data, size, region);
148 return NotImplemented;
151 GpStatus WINGDIPAPI GdipCreateRegionHrgn(HRGN hrgn, GpRegion **region)
153 FIXME("(%p, %p): stub\n", hrgn, region);
156 return NotImplemented;
159 GpStatus WINGDIPAPI GdipDeleteRegion(GpRegion *region)
161 FIXME("(%p): stub\n", region);
162 return NotImplemented;
165 GpStatus WINGDIPAPI GdipGetRegionBounds(GpRegion *region, GpGraphics *graphics, GpRectF *rect)
167 FIXME("(%p, %p, %p): stub\n", region, graphics, rect);
169 return NotImplemented;
172 GpStatus WINGDIPAPI GdipGetRegionBoundsI(GpRegion *region, GpGraphics *graphics, GpRect *rect)
174 FIXME("(%p, %p, %p): stub\n", region, graphics, rect);
176 return NotImplemented;
179 GpStatus WINGDIPAPI GdipGetRegionData(GpRegion *region, BYTE *buffer, UINT size, UINT *needed)
181 FIXME("(%p, %p, %d, %p): stub\n", region, buffer, size, needed);
183 return NotImplemented;
186 GpStatus WINGDIPAPI GdipGetRegionDataSize(GpRegion *region, UINT *needed)
188 FIXME("(%p, %p): stub\n", region, needed);
190 return NotImplemented;
193 GpStatus WINGDIPAPI GdipGetRegionHRgn(GpRegion *region, GpGraphics *graphics, HRGN *hrgn)
195 FIXME("(%p, %p, %p): stub\n", region, graphics, hrgn);
198 return NotImplemented;
201 GpStatus WINGDIPAPI GdipIsEmptyRegion(GpRegion *region, GpGraphics *graphics, BOOL *res)
203 FIXME("(%p, %p, %p): stub\n", region, graphics, res);
205 return NotImplemented;
208 GpStatus WINGDIPAPI GdipIsEqualRegion(GpRegion *region, GpRegion *region2, GpGraphics *graphics,
211 FIXME("(%p, %p, %p, %p): stub\n", region, region2, graphics, res);
213 return NotImplemented;
216 GpStatus WINGDIPAPI GdipIsInfiniteRegion(GpRegion *region, GpGraphics *graphics, BOOL *res)
218 FIXME("(%p, %p, %p): stub\n", region, graphics, res);
220 return NotImplemented;
223 GpStatus WINGDIPAPI GdipSetEmpty(GpRegion *region)
228 FIXME("not implemented\n");
230 return NotImplemented;
233 GpStatus WINGDIPAPI GdipSetInfinite(GpRegion *region)
238 FIXME("not implemented\n");
240 return NotImplemented;
243 GpStatus WINGDIPAPI GdipTransformRegion(GpRegion *region, GpMatrix *matrix)
245 FIXME("(%p, %p): stub\n", region, matrix);
247 return NotImplemented;
250 GpStatus WINGDIPAPI GdipTranslateRegion(GpRegion *region, REAL dx, REAL dy)
252 FIXME("(%p, %f, %f): stub\n", region, dx, dy);
254 return NotImplemented;
257 GpStatus WINGDIPAPI GdipTranslateRegionI(GpRegion *region, INT dx, INT dy)
259 FIXME("(%p, %d, %d): stub\n", region, dx, dy);
261 return NotImplemented;