push 585d938e6dafa7e4b71343fb5b928a9214e5518c
[wine/hacks.git] / dlls / gdiplus / region.c
blob3d95723b52999408c10afa211fadc93fc90d5c26
1 /*
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
19 #include <stdarg.h>
21 #include "windef.h"
22 #include "winbase.h"
23 #include "wingdi.h"
25 #include "objbase.h"
27 #include "gdiplus.h"
28 #include "gdiplus_private.h"
29 #include "wine/debug.h"
31 WINE_DEFAULT_DEBUG_CHANNEL(gdiplus);
33 /**********************************************************
35 * Data returned by GdipGetRegionData (for rectangle based regions)
36 * looks something like this:
38 * struct region_data_header
39 * {
40 * DWORD size; size in bytes of the data - 8.
41 * DWORD magic1; probably a checksum.
42 * DWORD magic2; always seems to be 0xdbc01001 - version?
43 * DWORD num_ops; number of combining ops * 2
44 * };
46 * Then follows a sequence of combining ops and RECTFs.
48 * Combining ops are just stored as their CombineMode value.
50 * Each RECTF is preceded by the DWORD 0x10000000. An empty rect is
51 * stored as 0x10000002 (with no following RECTF) and an infinite rect
52 * is stored as 0x10000003 (again with no following RECTF).
54 * The combining ops are stored in the reverse order to the RECTFs and in the
55 * reverse order to which the region was constructed.
57 * When two or more complex regions (ie those with more than one rect)
58 * are combined, the combining op for the two regions comes first,
59 * then the combining ops for the rects in region 1, followed by the
60 * rects for region 1, then follows the combining ops for region 2 and
61 * finally region 2's rects. Presumably you're supposed to use the
62 * 0x10000000 rect header to find the end of the op list (the count of
63 * the rects in each region is not stored).
65 * When a simple region (1 rect) is combined, it's treated as if a single rect
66 * is being combined.
70 GpStatus WINGDIPAPI GdipCloneRegion(GpRegion *region, GpRegion **clone)
72 FIXME("(%p %p): stub\n", region, clone);
74 *clone = NULL;
75 return NotImplemented;
78 GpStatus WINGDIPAPI GdipCombineRegionPath(GpRegion *region, GpPath *path, CombineMode mode)
80 FIXME("(%p %p %d): stub\n", region, path, mode);
81 return NotImplemented;
84 GpStatus WINGDIPAPI GdipCombineRegionRect(GpRegion *region, GDIPCONST GpRectF *rect,
85 CombineMode mode)
87 FIXME("(%p %p %d): stub\n", region, rect, mode);
88 return NotImplemented;
91 GpStatus WINGDIPAPI GdipCombineRegionRectI(GpRegion *region, GDIPCONST GpRect *rect,
92 CombineMode mode)
94 FIXME("(%p %p %d): stub\n", region, rect, mode);
95 return NotImplemented;
98 GpStatus WINGDIPAPI GdipCombineRegionRegion(GpRegion *region1, GpRegion *region2,
99 CombineMode mode)
101 FIXME("(%p %p %d): stub\n", region1, region2, mode);
102 return NotImplemented;
105 GpStatus WINGDIPAPI GdipCreateRegion(GpRegion **region)
107 FIXME("(%p): stub\n", region);
109 *region = NULL;
110 return NotImplemented;
113 GpStatus WINGDIPAPI GdipCreateRegionPath(GpPath *path, GpRegion **region)
115 FIXME("(%p, %p): stub\n", path, region);
117 *region = NULL;
118 return NotImplemented;
121 GpStatus WINGDIPAPI GdipCreateRegionRect(GDIPCONST GpRectF *rect, GpRegion **region)
123 FIXME("(%p, %p): stub\n", rect, region);
125 *region = NULL;
126 return NotImplemented;
129 GpStatus WINGDIPAPI GdipCreateRegionRectI(GDIPCONST GpRect *rect, GpRegion **region)
131 FIXME("(%p, %p): stub\n", rect, region);
133 *region = NULL;
134 return NotImplemented;
137 GpStatus WINGDIPAPI GdipCreateRegionRgnData(GDIPCONST BYTE *data, INT size, GpRegion **region)
139 FIXME("(%p, %d, %p): stub\n", data, size, region);
141 *region = NULL;
142 return NotImplemented;
145 GpStatus WINGDIPAPI GdipCreateRegionHrgn(HRGN hrgn, GpRegion **region)
147 FIXME("(%p, %p): stub\n", hrgn, region);
149 *region = NULL;
150 return NotImplemented;
153 GpStatus WINGDIPAPI GdipDeleteRegion(GpRegion *region)
155 FIXME("(%p): stub\n", region);
156 return NotImplemented;
159 GpStatus WINGDIPAPI GdipGetRegionBounds(GpRegion *region, GpGraphics *graphics, GpRectF *rect)
161 FIXME("(%p, %p, %p): stub\n", region, graphics, rect);
163 return NotImplemented;
166 GpStatus WINGDIPAPI GdipGetRegionBoundsI(GpRegion *region, GpGraphics *graphics, GpRect *rect)
168 FIXME("(%p, %p, %p): stub\n", region, graphics, rect);
170 return NotImplemented;
173 GpStatus WINGDIPAPI GdipGetRegionData(GpRegion *region, BYTE *buffer, UINT size, UINT *needed)
175 FIXME("(%p, %p, %d, %p): stub\n", region, buffer, size, needed);
177 return NotImplemented;
180 GpStatus WINGDIPAPI GdipGetRegionDataSize(GpRegion *region, UINT *needed)
182 FIXME("(%p, %p): stub\n", region, needed);
184 return NotImplemented;
187 GpStatus WINGDIPAPI GdipGetRegionHRgn(GpRegion *region, GpGraphics *graphics, HRGN *hrgn)
189 FIXME("(%p, %p, %p): stub\n", region, graphics, hrgn);
191 *hrgn = NULL;
192 return NotImplemented;
195 GpStatus WINGDIPAPI GdipIsEmptyRegion(GpRegion *region, GpGraphics *graphics, BOOL *res)
197 FIXME("(%p, %p, %p): stub\n", region, graphics, res);
199 return NotImplemented;
202 GpStatus WINGDIPAPI GdipIsEqualRegion(GpRegion *region, GpRegion *region2, GpGraphics *graphics,
203 BOOL *res)
205 FIXME("(%p, %p, %p, %p): stub\n", region, region2, graphics, res);
207 return NotImplemented;
210 GpStatus WINGDIPAPI GdipIsInfiniteRegion(GpRegion *region, GpGraphics *graphics, BOOL *res)
212 FIXME("(%p, %p, %p): stub\n", region, graphics, res);
214 return NotImplemented;
217 GpStatus WINGDIPAPI GdipSetEmpty(GpRegion *region)
219 static int calls;
221 if(!(calls++))
222 FIXME("not implemented\n");
224 return NotImplemented;
227 GpStatus WINGDIPAPI GdipSetInfinite(GpRegion *region)
229 static int calls;
231 if(!(calls++))
232 FIXME("not implemented\n");
234 return NotImplemented;
237 GpStatus WINGDIPAPI GdipTransformRegion(GpRegion *region, GpMatrix *matrix)
239 FIXME("(%p, %p): stub\n", region, matrix);
241 return NotImplemented;
244 GpStatus WINGDIPAPI GdipTranslateRegion(GpRegion *region, REAL dx, REAL dy)
246 FIXME("(%p, %f, %f): stub\n", region, dx, dy);
248 return NotImplemented;
251 GpStatus WINGDIPAPI GdipTranslateRegionI(GpRegion *region, INT dx, INT dy)
253 FIXME("(%p, %d, %d): stub\n", region, dx, dy);
255 return NotImplemented;