xref: /reactos/sdk/include/psdk/gdiplusgraphics.h (revision 845faec4)
1 /*
2  * GdiPlusGraphics.h
3  *
4  * Windows GDI+
5  *
6  * This file is part of the w32api package.
7  *
8  * THIS SOFTWARE IS NOT COPYRIGHTED
9  *
10  * This source code is offered for use in the public domain. You may
11  * use, modify or distribute it freely.
12  *
13  * This code is distributed in the hope that it will be useful but
14  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
15  * DISCLAIMED. This includes but is not limited to warranties of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
17  */
18 
19 #ifndef _GDIPLUSGRAPHICS_H
20 #define _GDIPLUSGRAPHICS_H
21 
22 class Image;
23 class ImageAttributes;
24 class CachedBitmap;
25 class Region;
26 class Font;
27 class GraphicsPath;
28 class Metafile;
29 
30 class Graphics : public GdiplusBase
31 {
32   friend class Region;
33   friend class Font;
34   friend class Bitmap;
35   friend class CachedBitmap;
36 
37 public:
38   Graphics(Image *image)
39   {
40   }
41 
42   Graphics(HDC hdc)
43   {
44     GpGraphics *graphics = NULL;
45     status = DllExports::GdipCreateFromHDC(hdc, &graphics);
46     SetGraphics(graphics);
47   }
48 
49   Graphics(HDC hdc, HANDLE hdevice)
50   {
51   }
52 
53   Graphics(HWND hwnd, BOOL icm)
54   {
55   }
56 
57   Status AddMetafileComment(const BYTE *data, UINT sizeData)
58   {
59     return SetStatus(DllExports::GdipComment(graphics, sizeData, data));
60   }
61 
62   GraphicsContainer BeginContainer(VOID)
63   {
64     return GraphicsContainer();
65   }
66 
67   GraphicsContainer BeginContainer(const RectF &dstrect, const RectF &srcrect, Unit unit)
68   {
69     return GraphicsContainer();
70   }
71 
72   GraphicsContainer BeginContainer(const Rect &dstrect, const Rect &srcrect, Unit unit)
73   {
74     return GraphicsContainer();
75   }
76 
77   Status Clear(const Color &color)
78   {
79     return SetStatus(DllExports::GdipGraphicsClear(graphics, color.GetValue()));
80   }
81 
82   Status DrawArc(const Pen *pen, const Rect &rect, REAL startAngle, REAL sweepAngle)
83   {
84     return SetStatus(DllExports::GdipDrawArcI(graphics, pen ? pen->pen : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle));
85   }
86 
87   Status DrawArc(const Pen *pen, const RectF &rect, REAL startAngle, REAL sweepAngle)
88   {
89     return SetStatus(DllExports::GdipDrawArcI(graphics, pen ? pen->pen : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle));
90   }
91 
92   Status DrawArc(const Pen *pen, REAL x, REAL y, REAL width, REAL height, REAL startAngle, REAL sweepAngle)
93   {
94     return SetStatus(DllExports::GdipDrawArc(graphics, pen ? pen->pen : NULL, x, y, width, height, startAngle, sweepAngle));
95   }
96 
97   Status DrawArc(const Pen *pen, INT x, INT y, INT width, INT height, REAL startAngle, REAL sweepAngle)
98   {
99     return SetStatus(DllExports::GdipDrawArcI(graphics, pen ? pen->pen : NULL, x, y, width, height, startAngle, sweepAngle));
100   }
101 
102   Status DrawBezier(const Pen *pen, const Point &pt1, const Point &pt2, const Point &pt3, const Point &pt4)
103   {
104     return SetStatus(DllExports::GdipDrawBezierI(graphics, pen ? pen->pen : NULL, pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y));
105   }
106 
107   Status DrawBezier(const Pen *pen, const PointF &pt1, const PointF &pt2, const PointF &pt3, const PointF &pt4)
108   {
109     return SetStatus(DllExports::GdipDrawBezier(graphics, pen ? pen->pen : NULL, pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y));
110   }
111 
112   Status DrawBezier(const Pen *pen, REAL x1, REAL y1, REAL x2, REAL y2, REAL x3, REAL y3, REAL x4, REAL y4)
113   {
114     return SetStatus(DllExports::GdipDrawBezier(graphics, pen ? pen->pen : NULL, x1, y1, x2, y2, x3, y3, x4, y4));
115   }
116 
117   Status DrawBezier(const Pen *pen, INT x1, INT y1, INT x2, INT y2, INT x3, INT y3, INT x4, INT y4)
118   {
119     return SetStatus(DllExports::GdipDrawBezierI(graphics, pen ? pen->pen : NULL, x1, y1, x2, y2, x3, y3, x4, y4));
120   }
121 
122   Status DrawBeziers(const Pen *pen, const Point *points, INT count)
123   {
124     return SetStatus(DllExports::GdipDrawBeziersI(graphics, pen ? pen->pen : NULL, points, count));
125   }
126 
127   Status DrawBeziers(const Pen *pen, const PointF *points, INT count)
128   {
129     return SetStatus(DllExports::GdipDrawBeziers(graphics, pen ? pen->pen : NULL, points, count));
130   }
131 
132   Status DrawCachedBitmap(CachedBitmap *cb, INT x, INT y)
133   {
134     return NotImplemented;
135   }
136 
137   Status DrawClosedCurve(const Pen *pen, const Point *points, INT count)
138   {
139     return SetStatus(DllExports::GdipDrawClosedCurveI(graphics, pen ? pen->pen : NULL, points, count));
140   }
141 
142   Status DrawClosedCurve(const Pen *pen, const PointF *points, INT count)
143   {
144     return SetStatus(DllExports::GdipDrawClosedCurve(graphics, pen ? pen->pen : NULL, points, count));
145   }
146 
147   Status DrawClosedCurve(const Pen *pen, const PointF *points, INT count, REAL tension)
148   {
149     return SetStatus(DllExports::GdipDrawClosedCurve2(graphics, pen ? pen->pen : NULL, points, count, tension));
150   }
151 
152   Status DrawClosedCurve(const Pen *pen, const Point *points, INT count, REAL tension)
153   {
154     return SetStatus(DllExports::GdipDrawClosedCurve2I(graphics, pen ? pen->pen : NULL, points, count, tension));
155   }
156 
157   Status DrawCurve(const Pen *pen, const Point *points, INT count)
158   {
159     return SetStatus(DllExports::GdipDrawCurveI(graphics, pen ? pen->pen : NULL, points, count));
160   }
161 
162   Status DrawCurve(const Pen *pen, const PointF *points, INT count)
163   {
164     return SetStatus(DllExports::GdipDrawCurve(graphics, pen ? pen->pen : NULL, points, count));
165   }
166 
167   Status DrawCurve(const Pen *pen, const PointF *points, INT count, REAL tension)
168   {
169     return SetStatus(DllExports::GdipDrawCurve2(graphics, pen ? pen->pen : NULL, points, count, tension));
170   }
171 
172   Status DrawCurve(const Pen *pen, const Point *points, INT count, INT offset, INT numberOfSegments, REAL tension)
173   {
174     return SetStatus(DllExports::GdipDrawCurve3I(graphics, pen ? pen->pen : NULL, points, count, offset, numberOfSegments, tension));
175   }
176 
177   Status DrawCurve(const Pen *pen, const PointF *points, INT count, INT offset, INT numberOfSegments, REAL tension)
178   {
179     return SetStatus(DllExports::GdipDrawCurve3(graphics, pen ? pen->pen : NULL, points, count, offset, numberOfSegments, tension));
180   }
181 
182   Status DrawCurve(const Pen *pen, const Point *points, INT count, REAL tension)
183   {
184     return SetStatus(DllExports::GdipDrawCurve2I(graphics, pen ? pen->pen : NULL, points, count, tension));
185   }
186 
187   Status DrawDriverString(const UINT16 *text, INT length, const Font *font, const Brush *brush, const PointF *positions, INT flags, const Matrix *matrix)
188   {
189     return NotImplemented;
190   }
191 
192   Status DrawEllipse(const Pen *pen, const Rect &rect)
193   {
194     return SetStatus(DllExports::GdipDrawEllipseI(graphics, pen ? pen->pen : NULL, rect.X, rect.Y, rect.Width, rect.Height));
195   }
196 
197   Status DrawEllipse(const Pen *pen, REAL x, REAL y, REAL width, REAL height)
198   {
199     return SetStatus(DllExports::GdipDrawEllipse(graphics, pen ? pen->pen : NULL, x, y, width, height));
200   }
201 
202   Status DrawEllipse(const Pen *pen, const RectF &rect)
203   {
204     return SetStatus(DllExports::GdipDrawEllipse(graphics, pen ? pen->pen : NULL, rect.X, rect.Y, rect.Width, rect.Height));
205   }
206 
207   Status DrawEllipse(const Pen *pen, INT x, INT y, INT width, INT height)
208   {
209     return SetStatus(DllExports::GdipDrawEllipseI(graphics, pen ? pen->pen : NULL, x, y, width, height));
210   }
211 
212   Status DrawImage(Image *image, const Point *destPoints, INT count)
213   {
214     return NotImplemented;
215   }
216 
217   Status DrawImage(Image *image, INT x, INT y)
218   {
219     return NotImplemented;
220   }
221 
222   Status DrawImage(Image *image, const Point &point)
223   {
224     return NotImplemented;
225   }
226 
227   Status DrawImage(Image *image, REAL x, REAL y)
228   {
229     return NotImplemented;
230   }
231 
232   Status DrawImage(Image *image, const PointF &point)
233   {
234     return NotImplemented;
235   }
236 
237   Status DrawImage(Image *image, const PointF *destPoints, INT count)
238   {
239     return NotImplemented;
240   }
241 
242   Status DrawImage(Image *image, REAL x, REAL y, REAL srcx, REAL srcy, REAL srcwidth, REAL srcheight, Unit srcUnit)
243   {
244     return NotImplemented;
245   }
246 
247   Status DrawImage(Image *image, const RectF &rect)
248   {
249     return NotImplemented;
250   }
251 
252   Status DrawImage(Image *image, INT x, INT y, INT width, INT height)
253   {
254     return NotImplemented;
255   }
256 
257   Status DrawImage(Image *image, const PointF *destPoints, INT count, REAL srcx, REAL srcy, REAL srcwidth, REAL srcheight, Unit srcUnit, ImageAttributes *imageAttributes, DrawImageAbort callback, VOID *callbackData)
258   {
259     return NotImplemented;
260   }
261 
262   Status DrawImage(Image *image, const Rect &destRect, INT srcx, INT srcy, INT srcwidth, INT srcheight, Unit srcUnit, ImageAttributes *imageAttributes, DrawImageAbort callback, VOID *callbackData)
263   {
264     return NotImplemented;
265   }
266 
267   Status DrawImage(Image *image, const Point *destPoints, INT count, INT srcx, INT srcy, INT srcwidth, INT srcheight, Unit srcUnit, ImageAttributes *imageAttributes, DrawImageAbort callback, VOID *callbackData)
268   {
269     return NotImplemented;
270   }
271 
272   Status DrawImage(Image *image, REAL x, REAL y, REAL width, REAL height)
273   {
274     return NotImplemented;
275   }
276 
277   Status DrawImage(Image *image, const Rect &rect)
278   {
279     return NotImplemented;
280   }
281 
282   Status DrawImage(Image *image, INT x, INT y, INT srcx, INT srcy, INT srcwidth, INT srcheight, Unit srcUnit)
283   {
284     return NotImplemented;
285   }
286 
287   Status DrawImage(Image *image, const RectF &destRect, REAL srcx, REAL srcy, REAL srcwidth, REAL srcheight, Unit srcUnit, ImageAttributes *imageAttributes, DrawImageAbort callback, VOID *callbackData)
288   {
289     return NotImplemented;
290   }
291 
292   Status DrawLine(const Pen *pen, const Point &pt1, const Point &pt2)
293   {
294     return SetStatus(DllExports::GdipDrawLineI(graphics, pen ? pen->pen : NULL, pt1.X, pt1.Y, pt2.X, pt2.Y));
295   }
296 
297   Status DrawLine(const Pen *pen, const PointF &pt1, const Point &pt2)
298   {
299     return SetStatus(DllExports::GdipDrawLine(graphics, pen ? pen->pen : NULL, pt1.X, pt1.Y, pt2.X, pt2.Y));
300   }
301 
302   Status DrawLine(const Pen *pen, REAL x1, REAL y1, REAL x2, REAL y2)
303   {
304     return SetStatus(DllExports::GdipDrawLine(graphics, pen ? pen->pen : NULL, x1, y1, x2, y2));
305   }
306 
307   Status DrawLine(const Pen *pen, INT x1, INT y1, INT x2, INT y2)
308   {
309     return SetStatus(DllExports::GdipDrawLine(graphics, pen ? pen->pen : NULL, x1, y1, x2, y2));
310   }
311 
312   Status DrawLines(const Pen *pen, const Point *points, INT count)
313   {
314     return SetStatus(DllExports::GdipDrawLinesI(graphics, pen ? pen->pen : NULL, points, count));
315   }
316 
317   Status DrawLines(const Pen *pen, const PointF *points, INT count)
318   {
319     return SetStatus(DllExports::GdipDrawLines(graphics, pen ? pen->pen : NULL, points, count));
320   }
321 
322   Status DrawPath(const Pen *pen, const GraphicsPath *path)
323   {
324     return NotImplemented;
325   }
326 
327   Status DrawPie(const Pen *pen, const Rect &rect, REAL startAngle, REAL sweepAngle)
328   {
329     return SetStatus(DllExports::GdipDrawPieI(graphics, pen ? pen->pen : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle));
330   }
331 
332   Status DrawPie(const Pen *pen, INT x, INT y, INT width, INT height, REAL startAngle, REAL sweepAngle)
333   {
334     return SetStatus(DllExports::GdipDrawPieI(graphics, pen ? pen->pen : NULL, x, y, width, height, startAngle, sweepAngle));
335   }
336 
337   Status DrawPie(const Pen *pen, REAL x, REAL y, REAL width, REAL height, REAL startAngle, REAL sweepAngle)
338   {
339     return SetStatus(DllExports::GdipDrawPie(graphics, pen ? pen->pen : NULL, x, y, width, height, startAngle, sweepAngle));
340   }
341 
342   Status DrawPie(const Pen *pen, const RectF &rect, REAL startAngle, REAL sweepAngle)
343   {
344     return SetStatus(DllExports::GdipDrawPie(graphics, pen ? pen->pen : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle));
345   }
346 
347   Status DrawPolygon(const Pen *pen, const Point *points, INT count)
348   {
349     return SetStatus(DllExports::GdipDrawPolygonI(graphics, pen ? pen->pen : NULL, points, count));
350   }
351 
352   Status DrawPolygon(const Pen *pen, const PointF *points, INT count)
353   {
354     return SetStatus(DllExports::GdipDrawPolygon(graphics, pen ? pen->pen : NULL, points, count));
355   }
356 
357   Status DrawRectangle(const Pen *pen, const Rect &rect)
358   {
359     return SetStatus(DllExports::GdipDrawRectangleI(graphics, pen ? pen->pen : NULL, rect.X, rect.Y, rect.Width, rect.Height));
360   }
361 
362   Status DrawRectangle(const Pen *pen, INT x, INT y, INT width, INT height)
363   {
364     return SetStatus(DllExports::GdipDrawRectangleI(graphics, pen ? pen->pen : NULL, x, y, width, height));
365   }
366 
367   Status DrawRectangle(const Pen *pen, REAL x, REAL y, REAL width, REAL height)
368   {
369     return SetStatus(DllExports::GdipDrawRectangle(graphics, pen ? pen->pen : NULL, x, y, width, height));
370   }
371 
372   Status DrawRectangle(const Pen *pen, const RectF &rect)
373   {
374     return SetStatus(DllExports::GdipDrawRectangleI(graphics, pen ? pen->pen : NULL, rect.X, rect.Y, rect.Width, rect.Height));
375   }
376 
377   Status DrawRectangles(const Pen *pen, const Rect *rects, INT count)
378   {
379     return SetStatus(DllExports::GdipDrawRectanglesI(graphics, pen ? pen->pen : NULL, rects, count));
380   }
381 
382   Status DrawRectangles(const Pen *pen, const RectF *rects, INT count)
383   {
384     return SetStatus(DllExports::GdipDrawRectangles(graphics, pen ? pen->pen : NULL, rects, count));
385   }
386 
387   Status DrawString(const WCHAR *string, INT length, const Font *font, const RectF &layoutRect, const StringFormat *stringFormat, const Brush *brush)
388   {
389     return NotImplemented;
390   }
391 
392   Status DrawString(const WCHAR *string, INT length, const Font *font, const PointF &origin, const Brush *brush)
393   {
394     return NotImplemented;
395   }
396 
397   Status DrawString(const WCHAR *string, INT length, const Font *font, const PointF &origin, const StringFormat *stringFormat, const Brush *brush)
398   {
399     return NotImplemented;
400   }
401 
402   Status EndContainer(GraphicsContainer state)
403   {
404     return SetStatus(DllExports::GdipEndContainer(graphics, state));
405   }
406 
407   Status EnumerateMetafile(const Metafile *metafile, const Metafile &destPoint, EnumerateMetafileProc callback, VOID *callbackData, ImageAttributes *imageAttributes)
408   {
409     return NotImplemented;
410   }
411 
412   Status EnumerateMetafile(const Metafile *metafile, const Point *destPoints, INT count, EnumerateMetafileProc callback, VOID *callbackData, ImageAttributes *imageAttributes)
413   {
414     return NotImplemented;
415   }
416 
417   Status EnumerateMetafile(const Metafile *metafile, const Point &destPoint, const Rect &srcRect, Unit srcUnit, EnumerateMetafileProc callback, VOID *callbackData, ImageAttributes *imageAttributes)
418   {
419     return NotImplemented;
420   }
421 
422   Status EnumerateMetafile(const Metafile *metafile, const PointF *destPoints, INT count, EnumerateMetafileProc callback, VOID *callbackData, ImageAttributes *imageAttributes)
423   {
424     return NotImplemented;
425   }
426 
427   Status EnumerateMetafile(const Metafile *metafile, const Rect &destRect, EnumerateMetafileProc callback, VOID *callbackData, ImageAttributes *imageAttributes)
428   {
429     return NotImplemented;
430   }
431 
432   Status EnumerateMetafile(const Metafile *metafile, const RectF &destRect, const RectF &srcRect, Unit srcUnit, EnumerateMetafileProc callback, VOID *callbackData, ImageAttributes *imageAttributes)
433   {
434     return NotImplemented;
435   }
436 
437   Status EnumerateMetafile(const Metafile *metafile, const RectF &destRect, EnumerateMetafileProc callback, VOID *callbackData, ImageAttributes *imageAttributes)
438   {
439     return NotImplemented;
440   }
441 
442   Status EnumerateMetafile(const Metafile *metafile, const PointF &destPoint, const Rect &srcRect, Unit srcUnit, EnumerateMetafileProc callback, VOID *callbackData, ImageAttributes *imageAttributes)
443   {
444     return NotImplemented;
445   }
446 
447   Status EnumerateMetafile(const Metafile *metafile, const Point *destPoints, INT count, const Rect &srcRect, Unit srcUnit, EnumerateMetafileProc callback, VOID *callbackData, ImageAttributes *imageAttributes)
448   {
449     return NotImplemented;
450   }
451 
452   Status EnumerateMetafile(const Metafile *metafile, const Rect &destRect, const Rect &srcRect, Unit srcUnit, EnumerateMetafileProc callback, VOID *callbackData, ImageAttributes *imageAttributes)
453   {
454     return NotImplemented;
455   }
456 
457   Status EnumerateMetafile(const Metafile *metafile, const Point *destPoints, INT count, const RectF &srcRect, Unit srcUnit, EnumerateMetafileProc callback, VOID *callbackData, ImageAttributes *imageAttributes)
458   {
459     return NotImplemented;
460   }
461 
462   Status EnumerateMetafile(const Metafile *metafile, const PointF &destPoint, EnumerateMetafileProc callback, VOID *callbackData, ImageAttributes *imageAttributes)
463   {
464     return NotImplemented;
465   }
466 
467   Status ExcludeClip(const Rect& rect)
468   {
469     return NotImplemented;
470   }
471 
472   Status ExcludeClip(const RectF &rect)
473   {
474     return NotImplemented;
475   }
476 
477   Status ExcludeClip(const Region *region)
478   {
479     return NotImplemented;
480   }
481 
482   Status FillClosedCurve(const Brush *brush, const Point *points, INT count)
483   {
484     return SetStatus(DllExports::GdipFillClosedCurveI(graphics, brush ? brush->brush : NULL, points, count));
485   }
486 
487   Status FillClosedCurve(const Brush *brush, const Point *points, INT count, FillMode fillMode, REAL tension)
488   {
489     return SetStatus(DllExports::GdipFillClosedCurve2I(graphics, brush ? brush->brush : NULL, points, count, tension, fillMode));
490   }
491 
492   Status FillClosedCurve(const Brush *brush, const PointF *points, INT count)
493   {
494     return SetStatus(DllExports::GdipFillClosedCurve(graphics, brush ? brush->brush : NULL, points, count));
495   }
496 
497   Status FillClosedCurve(const Brush *brush, const PointF *points, INT count, FillMode fillMode, REAL tension)
498   {
499     return SetStatus(DllExports::GdipFillClosedCurve2(graphics, brush ? brush->brush : NULL, points, count, tension, fillMode));
500   }
501 
502   Status FillEllipse(const Brush *brush, const Rect &rect)
503   {
504     return SetStatus(DllExports::GdipFillEllipseI(graphics, brush ? brush->brush : NULL, rect.X, rect.Y, rect.Width, rect.Height));
505   }
506 
507   Status FillEllipse(const Brush *brush, REAL x, REAL y, REAL width, REAL height)
508   {
509     return SetStatus(DllExports::GdipFillEllipse(graphics, brush ? brush->brush : NULL, x, y, width, height));
510   }
511 
512   Status FillEllipse(const Brush *brush, const RectF &rect)
513   {
514     return SetStatus(DllExports::GdipFillEllipse(graphics, brush ? brush->brush : NULL, rect.X, rect.Y, rect.Width, rect.Height));
515   }
516 
517   Status FillEllipse(const Brush *brush, INT x, INT y, INT width, INT height)
518   {
519     return SetStatus(DllExports::GdipFillEllipseI(graphics, brush ? brush->brush : NULL, x, y, width, height));
520   }
521 
522   Status FillPath(const Brush *brush, const GraphicsPath *path)
523   {
524     return NotImplemented;
525   }
526 
527   Status FillPie(const Brush *brush, const Rect &rect, REAL startAngle, REAL sweepAngle)
528   {
529     return SetStatus(DllExports::GdipFillPieI(graphics, brush ? brush->brush : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle));
530   }
531 
532   Status FillPie(const Brush *brush, INT x, INT y, INT width, INT height, REAL startAngle, REAL sweepAngle)
533   {
534     return SetStatus(DllExports::GdipFillPieI(graphics, brush ? brush->brush : NULL, x, y, width, height, startAngle, sweepAngle));
535   }
536 
537   Status FillPie(const Brush *brush, REAL x, REAL y, REAL width, REAL height, REAL startAngle, REAL sweepAngle)
538   {
539     return SetStatus(DllExports::GdipFillPie(graphics, brush ? brush->brush : NULL, x, y, width, height, startAngle, sweepAngle));
540   }
541 
542   Status FillPie(const Brush *brush, RectF &rect, REAL startAngle, REAL sweepAngle)
543   {
544     return SetStatus(DllExports::GdipFillPie(graphics, brush ? brush->brush : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle));
545   }
546 
547   Status FillPolygon(const Brush *brush, const Point *points, INT count)
548   {
549     return SetStatus(DllExports::GdipFillPolygon2I(graphics, brush ? brush->brush : NULL, points, count));
550   }
551 
552   Status FillPolygon(const Brush *brush, const PointF *points, INT count)
553   {
554     return SetStatus(DllExports::GdipFillPolygon2(graphics, brush ? brush->brush : NULL, points, count));
555   }
556 
557   Status FillPolygon(const Brush *brush, const Point *points, INT count, FillMode fillMode)
558   {
559     return SetStatus(DllExports::GdipFillPolygonI(graphics, brush ? brush->brush : NULL, points, count, fillMode));
560   }
561 
562   Status FillPolygon(const Brush *brush, const PointF *points, INT count, FillMode fillMode)
563   {
564     return SetStatus(DllExports::GdipFillPolygon(graphics, brush ? brush->brush : NULL, points, count, fillMode));
565   }
566 
567   Status FillRectangle(const Brush *brush, const Rect &rect)
568   {
569     return SetStatus(DllExports::GdipFillRectangleI(graphics, brush ? brush->brush : NULL, rect.X, rect.Y, rect.Width, rect.Height));
570   }
571 
572   Status FillRectangle(const Brush *brush, const RectF &rect)
573   {
574     return SetStatus(DllExports::GdipFillRectangle(graphics, brush ? brush->brush : NULL, rect.X, rect.Y, rect.Width, rect.Height));
575   }
576 
577   Status FillRectangle(const Brush *brush, REAL x, REAL y, REAL width, REAL height)
578   {
579     return SetStatus(DllExports::GdipFillRectangle(graphics, brush ? brush->brush : NULL, x, y, width, height));
580   }
581 
582   Status FillRectangle(const Brush *brush, INT x, INT y, INT width, INT height)
583   {
584     return SetStatus(DllExports::GdipFillRectangleI(graphics, brush ? brush->brush : NULL, x, y, width, height));
585   }
586 
587   Status FillRectangles(const Brush *brush, const Rect *rects, INT count)
588   {
589     return SetStatus(DllExports::GdipFillRectanglesI(graphics, brush ? brush->brush : NULL, rects, count));
590   }
591 
592   Status FillRectangles(const Brush *brush, const RectF *rects, INT count)
593   {
594     return SetStatus(DllExports::GdipFillRectangles(graphics, brush ? brush->brush : NULL, rects, count));
595   }
596 
597   Status FillRegion(const Brush *brush, const Region *region)
598   {
599     return NotImplemented;
600   }
601 
602   VOID Flush(FlushIntention intention)
603   {
604   }
605 
606   static Graphics *FromHDC(HDC hdc)
607   {
608     return NULL;
609   }
610 
611   static Graphics *FromHDC(HDC hdc, HANDLE hDevice)
612   {
613     return NULL;
614   }
615 
616   static Graphics *FromHWND(HWND hWnd, BOOL icm)
617   {
618     return NULL;
619   }
620 
621   static Graphics *FromImage(Image *image)
622   {
623     return NULL;
624   }
625 
626   Status GetClip(Region *region) const
627   {
628     return NotImplemented;
629   }
630 
631   Status GetClipBounds(Rect* rect) const
632   {
633     return SetStatus(DllExports::GdipGetClipBoundsI(graphics, rect));
634   }
635 
636   Status GetClipBounds(RectF* rect) const
637   {
638     return SetStatus(DllExports::GdipGetClipBounds(graphics, rect));
639   }
640 
641   CompositingMode GetCompositingMode(VOID)
642   {
643     CompositingMode compositingMode;
644     SetStatus(DllExports::GdipGetCompositingMode(graphics, &compositingMode));
645     return compositingMode;
646   }
647 
648   CompositingQuality GetCompositingQuality(VOID)
649   {
650     CompositingQuality compositingQuality;
651     SetStatus(DllExports::GdipGetCompositingQuality(graphics, &compositingQuality));
652     return compositingQuality;
653   }
654 
655   REAL GetDpiX(VOID)
656   {
657     REAL dpi;
658     SetStatus(DllExports::GdipGetDpiX(graphics, &dpi));
659     return dpi;
660   }
661 
662   REAL GetDpiY(VOID)
663   {
664     REAL dpi;
665     SetStatus(DllExports::GdipGetDpiY(graphics, &dpi));
666     return dpi;
667   }
668 
669   static HPALETTE GetHalftonePalette(VOID)
670   {
671     return NULL;
672   }
673 
674   HDC GetHDC(VOID)
675   {
676     return NULL;
677   }
678 
679   InterpolationMode GetInterpolationMode(VOID)
680   {
681     InterpolationMode interpolationMode;
682     SetStatus(DllExports::GdipGetInterpolationMode(graphics, &interpolationMode));
683     return interpolationMode;
684   }
685 
686   Status GetLastStatus(VOID)
687   {
688     return status;
689   }
690 
691   Status GetNearestColor(Color* color) const
692   {
693     return NotImplemented;
694   }
695 
696   REAL GetPageScale(VOID)
697   {
698     REAL scale;
699     SetStatus(DllExports::GdipGetPageScale(graphics, &scale));
700     return scale;
701   }
702 
703   Unit GetPageUnit(VOID)
704   {
705     Unit unit;
706     SetStatus(DllExports::GdipGetPageUnit(graphics, &unit));
707     return unit;
708   }
709 
710   PixelOffsetMode GetPixelOffsetMode(VOID)
711   {
712     PixelOffsetMode pixelOffsetMode;
713     SetStatus(DllExports::GdipGetPixelOffsetMode(graphics, &pixelOffsetMode));
714     return pixelOffsetMode;
715   }
716 
717   Status GetRenderingOrigin(INT *x, INT *y)
718   {
719     return NotImplemented;  // FIXME: not available: SetStatus(DllExports::GdipGetRenderingOrigin(graphics, x, y));
720   }
721 
722   SmoothingMode GetSmoothingMode(VOID) const
723   {
724     SmoothingMode smoothingMode;
725     SetStatus(DllExports::GdipGetSmoothingMode(graphics, &smoothingMode));
726     return smoothingMode;
727   }
728 
729   UINT GetTextContrast(VOID) const
730   {
731     UINT contrast;
732     SetStatus(DllExports::GdipGetTextContrast(graphics, &contrast));
733     return contrast;
734   }
735 
736   TextRenderingHint GetTextRenderingHint(VOID) const
737   {
738     TextRenderingHint mode;
739     SetStatus(DllExports::GdipGetTextRenderingHint(graphics, &mode));
740     return mode;
741   }
742 
743   Status GetTransform(Matrix* matrix)
744   {
745     return NotImplemented;
746   }
747 
748   Status GetVisibleClipBounds(Rect* rect) const
749   {
750     return SetStatus(DllExports::GdipGetVisibleClipBoundsI(graphics, rect));
751   }
752 
753   Status GetVisibleClipBounds(RectF* rect) const
754   {
755     return SetStatus(DllExports::GdipGetVisibleClipBounds(graphics, rect));
756   }
757 
758   Status IntersectClip(const Rect& rect)
759   {
760     return NotImplemented;
761   }
762 
763   Status IntersectClip(const Region* region)
764   {
765     return NotImplemented;
766   }
767 
768   Status IntersectClip(const RectF& rect)
769   {
770     return NotImplemented;
771   }
772 
773   BOOL IsClipEmpty(VOID) const
774   {
775     BOOL result;
776     SetStatus(DllExports::GdipIsClipEmpty(graphics, &result));
777     return result;
778   }
779 
780   BOOL IsVisible(const Point& point) const
781   {
782     BOOL result;
783     SetStatus(DllExports::GdipIsVisiblePointI(graphics, point.X, point.Y, &result));
784     return result;
785   }
786 
787   BOOL IsVisible(const Rect& rect) const
788   {
789     BOOL result;
790     SetStatus(DllExports::GdipIsVisibleRectI(graphics, rect.X, rect.Y, rect.Width, rect.Height, &result));
791     return result;
792   }
793 
794   BOOL IsVisible(REAL x, REAL y) const
795   {
796     BOOL result;
797     SetStatus(DllExports::GdipIsVisiblePoint(graphics, x, y, &result));
798     return result;
799   }
800 
801   BOOL IsVisible(const RectF& rect) const
802   {
803     BOOL result;
804     SetStatus(DllExports::GdipIsVisibleRect(graphics, rect.X, rect.Y, rect.Width, rect.Height, &result));
805     return result;
806   }
807 
808   BOOL IsVisible(INT x, INT y, INT width, INT height) const
809   {
810     BOOL result;
811     SetStatus(DllExports::GdipIsVisibleRectI(graphics, x, y, width, height, &result));
812     return result;
813   }
814 
815   BOOL IsVisible(INT x, INT y) const
816   {
817     BOOL result;
818     SetStatus(DllExports::GdipIsVisiblePointI(graphics, x, y, &result));
819     return result;
820   }
821 
822   BOOL IsVisible(const PointF& point) const
823   {
824     BOOL result;
825     SetStatus(DllExports::GdipIsVisiblePoint(graphics, point.X, point.Y, &result));
826     return result;
827   }
828 
829   BOOL IsVisible(REAL x, REAL y, REAL width, REAL height) const
830   {
831     BOOL result;
832     SetStatus(DllExports::GdipIsVisibleRect(graphics, x, y, width, height, &result));
833     return result;
834   }
835 
836   BOOL IsVisibleClipEmpty(VOID) const
837   {
838     return FALSE;  /* FIXME: not available:
839     BOOL result;
840     SetStatus(DllExports::GdipIsVisibleClipEmpty(graphics, &result));
841     return result;*/
842   }
843 
844   Status MeasureCharacterRanges(const WCHAR *string, INT length, const Font *font, const RectF &layoutRect, const StringFormat *stringFormat, INT regionCount, Region *regions) const
845   {
846     return NotImplemented;
847   }
848 
849   Status MeasureDriverString(const UINT16 *text, INT length, const Font *font, const PointF *positions, INT flags, const Matrix *matrix, RectF *boundingBox) const
850   {
851     return NotImplemented;
852   }
853 
854   Status MeasureString(const WCHAR *string, INT length, const Font *font, const RectF &layoutRect, RectF *boundingBox) const
855   {
856     return NotImplemented;
857   }
858 
859   Status MeasureString(const WCHAR *string, INT length, const Font *font, const PointF &origin, const StringFormat *stringFormat, RectF *boundingBox) const
860   {
861     return NotImplemented;
862   }
863 
864   Status MeasureString(const WCHAR *string, INT length, const Font *font, const RectF &layoutRect, const StringFormat *stringFormat, RectF *boundingBox, INT *codepointsFitted, INT *linesFilled) const
865   {
866     return NotImplemented;
867   }
868 
869   Status MeasureString(const WCHAR *string, INT length, const Font *font, const SizeF &layoutRectSize, const StringFormat *stringFormat, SizeF *size, INT *codepointsFitted, INT *linesFilled) const
870   {
871     return NotImplemented;
872   }
873 
874   Status MeasureString(const WCHAR *string, INT length, const Font *font, const PointF &origin, RectF *boundingBox) const
875   {
876     return NotImplemented;
877   }
878 
879   Status MultiplyTransform(Matrix *matrix, MatrixOrder order)
880   {
881     return NotImplemented;
882   }
883 
884   VOID ReleaseHDC(HDC hdc)
885   {
886   }
887 
888   Status ResetClip(VOID)
889   {
890     return SetStatus(DllExports::GdipResetClip(graphics));
891   }
892 
893   Status ResetTransform(VOID)
894   {
895     return SetStatus(DllExports::GdipResetWorldTransform(graphics));
896   }
897 
898   Status Restore(GraphicsState gstate)
899   {
900     return NotImplemented;
901   }
902 
903   Status RotateTransform(REAL angle, MatrixOrder order)
904   {
905     return SetStatus(DllExports::GdipRotateWorldTransform(graphics, angle, order));
906   }
907 
908   GraphicsState Save(VOID)
909   {
910     return 0;
911   }
912 
913   Status ScaleTransform(REAL sx, REAL sy, MatrixOrder order)
914   {
915     return SetStatus(DllExports::GdipScaleWorldTransform(graphics, sx, sy, order));
916   }
917 
918   Status SetClip(const Graphics *g, CombineMode combineMode)
919   {
920     return SetStatus(DllExports::GdipSetClipGraphics(graphics, g ? g->graphics : NULL, combineMode));
921   }
922 
923   Status SetClip(const GraphicsPath *path, CombineMode combineMode)
924   {
925     return NotImplemented;
926   }
927 
928   Status SetClip(const Region *region, CombineMode combineMode)
929   {
930     return NotImplemented;
931   }
932 
933   Status SetClip(const Rect &rect, CombineMode combineMode)
934   {
935     return SetStatus(DllExports::GdipSetClipRectI(graphics, rect.X, rect.Y, rect.Width, rect.Height, combineMode));
936   }
937 
938   Status SetClip(HRGN hRgn, CombineMode combineMode)
939   {
940     return SetStatus(DllExports::GdipSetClipHrgn(graphics, hRgn, combineMode));
941   }
942 
943   Status SetClip(const RectF& rect, CombineMode combineMode)
944   {
945     return SetStatus(DllExports::GdipSetClipRect(graphics, rect.X, rect.Y, rect.Width, rect.Height, combineMode));
946   }
947 
948   Status SetCompositingMode(CompositingMode compositingMode)
949   {
950     return SetStatus(DllExports::GdipSetCompositingMode(graphics, compositingMode));
951   }
952 
953   Status SetCompositingQuality(CompositingQuality compositingQuality)
954   {
955     return SetStatus(DllExports::GdipSetCompositingQuality(graphics, compositingQuality));
956   }
957 
958   Status SetInterpolationMode(InterpolationMode interpolationMode)
959   {
960     return SetStatus(DllExports::GdipSetInterpolationMode(graphics, interpolationMode));
961   }
962 
963   Status SetPageScale(REAL scale)
964   {
965     return SetStatus(DllExports::GdipSetPageScale(graphics, scale));
966   }
967 
968   Status SetPageUnit(Unit unit)
969   {
970     return SetStatus(DllExports::GdipSetPageUnit(graphics, unit));
971   }
972 
973   Status SetPixelOffsetMode(PixelOffsetMode pixelOffsetMode)
974   {
975     return SetStatus(DllExports::GdipSetPixelOffsetMode(graphics, pixelOffsetMode));
976   }
977 
978   Status SetRenderingOrigin(INT x, INT y)
979   {
980     return SetStatus(DllExports::GdipSetRenderingOrigin(graphics, x, y));
981   }
982 
983   Status SetSmoothingMode(SmoothingMode smoothingMode)
984   {
985     return SetStatus(DllExports::GdipSetSmoothingMode(graphics, smoothingMode));
986   }
987 
988   Status SetTextContrast(UINT contrast)
989   {
990     return SetStatus(DllExports::GdipSetTextContrast(graphics, contrast));
991   }
992 
993   Status SetTextRenderingHint(TextRenderingHint newMode)
994   {
995     return SetStatus(DllExports::GdipSetTextRenderingHint(graphics, newMode));
996   }
997 
998   Status SetTransform(const Matrix *matrix)
999   {
1000     return NotImplemented;
1001   }
1002 
1003   Status TransformPoints(CoordinateSpace destSpace, CoordinateSpace srcSpace, Point *pts, INT count)
1004   {
1005     return SetStatus(DllExports::GdipTransformPointsI(graphics, destSpace, srcSpace, pts, count));
1006   }
1007 
1008   Status TranslateClip(INT dx, INT dy)
1009   {
1010     return SetStatus(DllExports::GdipTranslateClipI(graphics, dx, dy));
1011   }
1012 
1013   Status TranslateClip(REAL dx, REAL dy)
1014   {
1015     return SetStatus(DllExports::GdipTranslateClip(graphics, dx, dy));
1016   }
1017 
1018   Status TranslateTransform(REAL dx, REAL dy, MatrixOrder order)
1019   {
1020     return SetStatus(DllExports::GdipTranslateWorldTransform(graphics, dx, dy, order));
1021   }
1022 
1023 private:
1024   Status SetStatus(Status status) const
1025   {
1026     if (status == Ok)
1027       return status;
1028     this->status = status;
1029     return status;
1030   }
1031 
1032   VOID SetGraphics(GpGraphics *graphics)
1033   {
1034     this->graphics = graphics;
1035   }
1036 
1037 private:
1038   mutable Status status;
1039   GpGraphics *graphics;
1040 };
1041 
1042 #endif /* _GDIPLUSGRAPHICS_H */
1043