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 (for rectangle based regions)
36 * looks something like this:
38 * struct region_data_header
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
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
70 GpStatus WINGDIPAPI
GdipCloneRegion(GpRegion
*region
, GpRegion
**clone
)
72 FIXME("(%p %p): stub\n", region
, clone
);
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
,
87 FIXME("(%p %p %d): stub\n", region
, rect
, mode
);
88 return NotImplemented
;
91 GpStatus WINGDIPAPI
GdipCombineRegionRectI(GpRegion
*region
, GDIPCONST GpRect
*rect
,
94 FIXME("(%p %p %d): stub\n", region
, rect
, mode
);
95 return NotImplemented
;
98 GpStatus WINGDIPAPI
GdipCombineRegionRegion(GpRegion
*region1
, GpRegion
*region2
,
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
);
110 return NotImplemented
;
113 GpStatus WINGDIPAPI
GdipCreateRegionPath(GpPath
*path
, GpRegion
**region
)
115 FIXME("(%p, %p): stub\n", path
, region
);
118 return NotImplemented
;
121 GpStatus WINGDIPAPI
GdipCreateRegionRect(GDIPCONST GpRectF
*rect
, GpRegion
**region
)
123 FIXME("(%p, %p): stub\n", rect
, region
);
126 return NotImplemented
;
129 GpStatus WINGDIPAPI
GdipCreateRegionRectI(GDIPCONST GpRect
*rect
, GpRegion
**region
)
131 FIXME("(%p, %p): stub\n", rect
, region
);
134 return NotImplemented
;
137 GpStatus WINGDIPAPI
GdipCreateRegionRgnData(GDIPCONST BYTE
*data
, INT size
, GpRegion
**region
)
139 FIXME("(%p, %d, %p): stub\n", data
, size
, region
);
142 return NotImplemented
;
145 GpStatus WINGDIPAPI
GdipCreateRegionHrgn(HRGN hrgn
, GpRegion
**region
)
147 FIXME("(%p, %p): stub\n", hrgn
, region
);
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
);
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
,
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
)
222 FIXME("not implemented\n");
224 return NotImplemented
;
227 GpStatus WINGDIPAPI
GdipSetInfinite(GpRegion
*region
)
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
;