/* * gdiplusgraphics.h * * GDI+ Graphics class * * This file is part of the w32api package. * * Contributors: * Created by Markus Koenig <markus@stber-koenig.de> * * THIS SOFTWARE IS NOT COPYRIGHTED * * This source code is offered for use in the public domain. You may * use, modify or distribute it freely. * * This code is distributed in the hope that it will be useful but * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY * DISCLAIMED. This includes but is not limited to warranties of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * */ #ifndef __GDIPLUS_GRAPHICS_H #define __GDIPLUS_GRAPHICS_H #if __GNUC__ >=3 #pragma GCC system_header #endif #ifndef __cplusplus #error "A C++ compiler is required to include gdiplusgraphics.h." #endif class Graphics: public GdiplusBase { friend class Bitmap; friend class CachedBitmap; friend class Font; friend class GraphicsPath; friend class Metafile; friend class Region; public: static Graphics* FromHDC(HDC hdc) { return new Graphics(hdc); } static Graphics* FromHDC(HDC hdc, HANDLE hdevice) { return new Graphics(hdc, hdevice); } static Graphics* FromHWND(HWND hwnd, BOOL icm = FALSE) { return new Graphics(hwnd, icm); } static Graphics* FromImage(Image *image) { return new Graphics(image); } static HPALETTE GetHalftonePalette() { return DllExports::GdipCreateHalftonePalette(); } Graphics(Image *image): nativeGraphics(NULL), lastStatus(Ok) { lastStatus = DllExports::GdipGetImageGraphicsContext( image ? image->nativeImage : NULL, &nativeGraphics); } Graphics(HDC hdc): nativeGraphics(NULL), lastStatus(Ok) { lastStatus = DllExports::GdipCreateFromHDC( hdc, &nativeGraphics); } Graphics(HDC hdc, HANDLE hdevice): nativeGraphics(NULL), lastStatus(Ok) { lastStatus = DllExports::GdipCreateFromHDC2( hdc, hdevice, &nativeGraphics); } Graphics(HWND hwnd, BOOL icm = FALSE): nativeGraphics(NULL), lastStatus(Ok) { if (icm) { lastStatus = DllExports::GdipCreateFromHWNDICM( hwnd, &nativeGraphics); } else { lastStatus = DllExports::GdipCreateFromHWND( hwnd, &nativeGraphics); } } ~Graphics() { DllExports::GdipDeleteGraphics(nativeGraphics); } Status AddMetafileComment(const BYTE *data, UINT sizeData) { return updateStatus(DllExports::GdipComment( nativeGraphics, sizeData, data)); } GraphicsContainer BeginContainer() { GraphicsContainer result = 0; updateStatus(DllExports::GdipBeginContainer2( nativeGraphics, &result)); return result; } GraphicsContainer BeginContainer(const RectF& dstrect, const RectF& srcrect, Unit unit) { GraphicsContainer result = 0; updateStatus(DllExports::GdipBeginContainer( nativeGraphics, &dstrect, &srcrect, unit, &result)); return result; } GraphicsContainer BeginContainer(const Rect& dstrect, const Rect& srcrect, Unit unit) { GraphicsContainer result = 0; updateStatus(DllExports::GdipBeginContainerI( nativeGraphics, &dstrect, &srcrect, unit, &result)); return result; } Status Clear(const Color& color) { return updateStatus(DllExports::GdipGraphicsClear( nativeGraphics, color.GetValue())); } Status DrawArc(const Pen *pen, REAL x, REAL y, REAL width, REAL height, REAL startAngle, REAL sweepAngle) { return updateStatus(DllExports::GdipDrawArc( nativeGraphics, pen ? pen->nativePen : NULL, x, y, width, height, startAngle, sweepAngle)); } Status DrawArc(const Pen *pen, INT x, INT y, INT width, INT height, REAL startAngle, REAL sweepAngle) { return updateStatus(DllExports::GdipDrawArcI( nativeGraphics, pen ? pen->nativePen : NULL, x, y, width, height, startAngle, sweepAngle)); } Status DrawArc(const Pen *pen, const RectF& rect, REAL startAngle, REAL sweepAngle) { return updateStatus(DllExports::GdipDrawArc( nativeGraphics, pen ? pen->nativePen : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)); } Status DrawArc(const Pen *pen, const Rect& rect, REAL startAngle, REAL sweepAngle) { return updateStatus(DllExports::GdipDrawArcI( nativeGraphics, pen ? pen->nativePen : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)); } Status DrawBezier(const Pen *pen, REAL x1, REAL y1, REAL x2, REAL y2, REAL x3, REAL y3, REAL x4, REAL y4) { return updateStatus(DllExports::GdipDrawBezier( nativeGraphics, pen ? pen->nativePen : NULL, x1, y1, x2, y2, x3, y3, x4, y4)); } Status DrawBezier(const Pen *pen, INT x1, INT y1, INT x2, INT y2, INT x3, INT y3, INT x4, INT y4) { return updateStatus(DllExports::GdipDrawBezierI( nativeGraphics, pen ? pen->nativePen : NULL, x1, y1, x2, y2, x3, y3, x4, y4)); } Status DrawBezier(const Pen *pen, const PointF& pt1, const PointF& pt2, const PointF& pt3, const PointF& pt4) { return updateStatus(DllExports::GdipDrawBezier( nativeGraphics, pen ? pen->nativePen : NULL, pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y)); } Status DrawBezier(const Pen *pen, const Point& pt1, const Point& pt2, const Point& pt3, const Point& pt4) { return updateStatus(DllExports::GdipDrawBezierI( nativeGraphics, pen ? pen->nativePen : NULL, pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y)); } Status DrawBeziers(const Pen *pen, const PointF *points, INT count) { return updateStatus(DllExports::GdipDrawBeziers( nativeGraphics, pen ? pen->nativePen : NULL, points, count)); } Status DrawBeziers(const Pen *pen, const Point *points, INT count) { return updateStatus(DllExports::GdipDrawBeziersI( nativeGraphics, pen ? pen->nativePen : NULL, points, count)); } Status DrawCachedBitmap(CachedBitmap *cb, INT x, INT y) { return updateStatus(DllExports::GdipDrawCachedBitmap( nativeGraphics, cb ? cb->nativeCachedBitmap : NULL, x, y)); } Status DrawClosedCurve(const Pen *pen, const PointF *points, INT count) { return updateStatus(DllExports::GdipDrawClosedCurve( nativeGraphics, pen ? pen->nativePen : NULL, points, count)); } Status DrawClosedCurve(const Pen *pen, const Point *points, INT count) { return updateStatus(DllExports::GdipDrawClosedCurveI( nativeGraphics, pen ? pen->nativePen : NULL, points, count)); } Status DrawClosedCurve(const Pen *pen, const PointF *points, INT count, REAL tension) { return updateStatus(DllExports::GdipDrawClosedCurve2( nativeGraphics, pen ? pen->nativePen : NULL, points, count, tension)); } Status DrawClosedCurve(const Pen *pen, const Point *points, INT count, REAL tension) { return updateStatus(DllExports::GdipDrawClosedCurve2I( nativeGraphics, pen ? pen->nativePen : NULL, points, count, tension)); } Status DrawCurve(const Pen *pen, const PointF *points, INT count) { return updateStatus(DllExports::GdipDrawCurve( nativeGraphics, pen ? pen->nativePen : NULL, points, count)); } Status DrawCurve(const Pen *pen, const Point *points, INT count) { return updateStatus(DllExports::GdipDrawCurveI( nativeGraphics, pen ? pen->nativePen : NULL, points, count)); } Status DrawCurve(const Pen *pen, const PointF *points, INT count, REAL tension) { return updateStatus(DllExports::GdipDrawCurve2( nativeGraphics, pen ? pen->nativePen : NULL, points, count, tension)); } Status DrawCurve(const Pen *pen, const Point *points, INT count, REAL tension) { return updateStatus(DllExports::GdipDrawCurve2I( nativeGraphics, pen ? pen->nativePen : NULL, points, count, tension)); } Status DrawCurve(const Pen *pen, const PointF *points, INT count, INT offset, INT numberOfSegments, REAL tension) { return updateStatus(DllExports::GdipDrawCurve3( nativeGraphics, pen ? pen->nativePen : NULL, points, count, offset, numberOfSegments, tension)); } Status DrawCurve(const Pen *pen, const Point *points, INT count, INT offset, INT numberOfSegments, REAL tension) { return updateStatus(DllExports::GdipDrawCurve3I( nativeGraphics, pen ? pen->nativePen : NULL, points, count, offset, numberOfSegments, tension)); } Status DrawDriverString(const UINT16 *text, INT length, const Font *font, const Brush *brush, const PointF *positions, INT flags, const Matrix *matrix) { return updateStatus(DllExports::GdipDrawDriverString( nativeGraphics, text, length, font ? font->nativeFont : NULL, brush ? brush->nativeBrush : NULL, positions, flags, matrix ? matrix->nativeMatrix : NULL)); } Status DrawEllipse(const Pen *pen, REAL x, REAL y, REAL width, REAL height) { return updateStatus(DllExports::GdipDrawEllipse( nativeGraphics, pen ? pen->nativePen : NULL, x, y, width, height)); } Status DrawEllipse(const Pen *pen, INT x, INT y, INT width, INT height) { return updateStatus(DllExports::GdipDrawEllipseI( nativeGraphics, pen ? pen->nativePen : NULL, x, y, width, height)); } Status DrawEllipse(const Pen *pen, const RectF& rect) { return updateStatus(DllExports::GdipDrawEllipse( nativeGraphics, pen ? pen->nativePen : NULL, rect.X, rect.Y, rect.Width, rect.Height)); } Status DrawEllipse(const Pen *pen, const Rect& rect) { return updateStatus(DllExports::GdipDrawEllipseI( nativeGraphics, pen ? pen->nativePen : NULL, rect.X, rect.Y, rect.Width, rect.Height)); } Status DrawImage(Image *image, REAL x, REAL y) { return updateStatus(DllExports::GdipDrawImage( nativeGraphics, image ? image->nativeImage : NULL, x, y)); } Status DrawImage(Image *image, INT x, INT y) { return updateStatus(DllExports::GdipDrawImageI( nativeGraphics, image ? image->nativeImage : NULL, x, y)); } Status DrawImage(Image *image, const PointF& point) { return updateStatus(DllExports::GdipDrawImage( nativeGraphics, image ? image->nativeImage : NULL, point.X, point.Y)); } Status DrawImage(Image *image, const Point& point) { return updateStatus(DllExports::GdipDrawImageI( nativeGraphics, image ? image->nativeImage : NULL, point.X, point.Y)); } Status DrawImage(Image *image, REAL x, REAL y, REAL width, REAL height) { return updateStatus(DllExports::GdipDrawImageRect( nativeGraphics, image ? image->nativeImage : NULL, x, y, width, height)); } Status DrawImage(Image *image, INT x, INT y, INT width, INT height) { return updateStatus(DllExports::GdipDrawImageRectI( nativeGraphics, image ? image->nativeImage : NULL, x, y, width, height)); } Status DrawImage(Image *image, const RectF& rect) { return updateStatus(DllExports::GdipDrawImageRect( nativeGraphics, image ? image->nativeImage : NULL, rect.X, rect.Y, rect.Width, rect.Height)); } Status DrawImage(Image *image, const Rect& rect) { return updateStatus(DllExports::GdipDrawImageRectI( nativeGraphics, image ? image->nativeImage : NULL, rect.X, rect.Y, rect.Width, rect.Height)); } Status DrawImage(Image *image, const PointF *destPoints, INT count) { return updateStatus(DllExports::GdipDrawImagePoints( nativeGraphics, image ? image->nativeImage : NULL, destPoints, count)); } Status DrawImage(Image *image, const Point *destPoints, INT count) { return updateStatus(DllExports::GdipDrawImagePointsI( nativeGraphics, image ? image->nativeImage : NULL, destPoints, count)); } Status DrawImage(Image *image, REAL x, REAL y, REAL srcx, REAL srcy, REAL srcwidth, REAL srcheight, Unit srcUnit) { return updateStatus(DllExports::GdipDrawImagePointRect( nativeGraphics, image ? image->nativeImage : NULL, x, y, srcx, srcy, srcwidth, srcheight, srcUnit)); } Status DrawImage(Image *image, INT x, INT y, INT srcx, INT srcy, INT srcwidth, INT srcheight, Unit srcUnit) { return updateStatus(DllExports::GdipDrawImagePointRectI( nativeGraphics, image ? image->nativeImage : NULL, x, y, srcx, srcy, srcwidth, srcheight, srcUnit)); } Status DrawImage(Image *image, const RectF& destRect, REAL srcx, REAL srcy, REAL srcwidth, REAL srcheight, Unit srcUnit, const ImageAttributes *imageAttributes = NULL, DrawImageAbort callback = NULL, VOID *callbackData = NULL) { return updateStatus(DllExports::GdipDrawImageRectRect( nativeGraphics, image ? image->nativeImage : NULL, destRect.X, destRect.Y, destRect.Width, destRect.Height, srcx, srcy, srcwidth, srcheight, srcUnit, imageAttributes ? imageAttributes->nativeImageAttributes : NULL, callback, callbackData)); } Status DrawImage(Image *image, const Rect& destRect, INT srcx, INT srcy, INT srcwidth, INT srcheight, Unit srcUnit, const ImageAttributes *imageAttributes = NULL, DrawImageAbort callback = NULL, VOID *callbackData = NULL) { return updateStatus(DllExports::GdipDrawImageRectRectI( nativeGraphics, image ? image->nativeImage : NULL, destRect.X, destRect.Y, destRect.Width, destRect.Height, srcx, srcy, srcwidth, srcheight, srcUnit, imageAttributes ? imageAttributes->nativeImageAttributes : NULL, callback, callbackData)); } Status DrawImage(Image *image, const RectF& destRect, const RectF& sourceRect, Unit srcUnit, const ImageAttributes *imageAttributes = NULL) { return updateStatus(DllExports::GdipDrawImageRectRectI( nativeGraphics, image ? image->nativeImage : NULL, destRect.X, destRect.Y, destRect.Width, destRect.Height, sourceRect.X, sourceRect.Y, sourceRect.Width, sourceRect.Height, srcUnit, imageAttributes ? imageAttributes->nativeImageAttributes : NULL, NULL, NULL)); } Status DrawImage(Image *image, const PointF *destPoints, INT count, REAL srcx, REAL srcy, REAL srcwidth, REAL srcheight, Unit srcUnit, const ImageAttributes *imageAttributes = NULL, DrawImageAbort callback = NULL, VOID *callbackData = NULL) { return updateStatus(DllExports::GdipDrawImagePointsRect( nativeGraphics, image ? image->nativeImage : NULL, destPoints, count, srcx, srcy, srcwidth, srcheight, srcUnit, imageAttributes ? imageAttributes->nativeImageAttributes : NULL, callback, callbackData)); } Status DrawImage(Image *image, const Point *destPoints, INT count, INT srcx, INT srcy, INT srcwidth, INT srcheight, Unit srcUnit, const ImageAttributes *imageAttributes = NULL, DrawImageAbort callback = NULL, VOID *callbackData = NULL) { return updateStatus(DllExports::GdipDrawImagePointsRectI( nativeGraphics, image ? image->nativeImage : NULL, destPoints, count, srcx, srcy, srcwidth, srcheight, srcUnit, imageAttributes ? imageAttributes->nativeImageAttributes : NULL, callback, callbackData)); } // TODO: [GDI+ 1.1] Graphics::DrawImage(..Effect..) //Status DrawImage(Image *image, RectF *sourceRect, Matrix *matrix, // Effect *effect, ImageAttributes *imageAttributes, // Unit srcUnit) //{ // return updateStatus(DllExports::GdipDrawImageFX( // nativeGraphics, // image ? image->nativeImage : NULL, // sourceRect, // matrix ? matrix->nativeMatrix : NULL, // effect ? effect->nativeEffect : NULL, // imageAttributes ? imageAttributes->nativeImageAttributes : NULL, // srcUnit)); //} Status DrawLine(const Pen *pen, REAL x1, REAL y1, REAL x2, REAL y2) { return updateStatus(DllExports::GdipDrawLine( nativeGraphics, pen ? pen->nativePen : NULL, x1, y1, x2, y2)); } Status DrawLine(const Pen *pen, INT x1, INT y1, INT x2, INT y2) { return updateStatus(DllExports::GdipDrawLineI( nativeGraphics, pen ? pen->nativePen : NULL, x1, y1, x2, y2)); } Status DrawLine(const Pen *pen, const PointF& pt1, const PointF& pt2) { return updateStatus(DllExports::GdipDrawLine( nativeGraphics, pen ? pen->nativePen : NULL, pt1.X, pt1.Y, pt2.X, pt2.Y)); } Status DrawLine(const Pen *pen, const Point& pt1, const Point& pt2) { return updateStatus(DllExports::GdipDrawLineI( nativeGraphics, pen ? pen->nativePen : NULL, pt1.X, pt1.Y, pt2.X, pt2.Y)); } Status DrawLines(const Pen *pen, const PointF *points, INT count) { return updateStatus(DllExports::GdipDrawLines( nativeGraphics, pen ? pen->nativePen : NULL, points, count)); } Status DrawLines(const Pen *pen, const Point *points, INT count) { return updateStatus(DllExports::GdipDrawLinesI( nativeGraphics, pen ? pen->nativePen : NULL, points, count)); } Status DrawPath(const Pen *pen, const GraphicsPath *path) { return updateStatus(DllExports::GdipDrawPath( nativeGraphics, pen ? pen->nativePen : NULL, path ? path->nativePath : NULL)); } Status DrawPie(const Pen *pen, REAL x, REAL y, REAL width, REAL height, REAL startAngle, REAL sweepAngle) { return updateStatus(DllExports::GdipDrawPie( nativeGraphics, pen ? pen->nativePen : NULL, x, y, width, height, startAngle, sweepAngle)); } Status DrawPie(const Pen *pen, INT x, INT y, INT width, INT height, REAL startAngle, REAL sweepAngle) { return updateStatus(DllExports::GdipDrawPieI( nativeGraphics, pen ? pen->nativePen : NULL, x, y, width, height, startAngle, sweepAngle)); } Status DrawPie(const Pen *pen, const RectF& rect, REAL startAngle, REAL sweepAngle) { return updateStatus(DllExports::GdipDrawPie( nativeGraphics, pen ? pen->nativePen : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)); } Status DrawPie(const Pen *pen, const Rect& rect, REAL startAngle, REAL sweepAngle) { return updateStatus(DllExports::GdipDrawPieI( nativeGraphics, pen ? pen->nativePen : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)); } Status DrawPolygon(const Pen *pen, const PointF *points, INT count) { return updateStatus(DllExports::GdipDrawPolygon( nativeGraphics, pen ? pen->nativePen : NULL, points, count)); } Status DrawPolygon(const Pen *pen, const Point *points, INT count) { return updateStatus(DllExports::GdipDrawPolygonI( nativeGraphics, pen ? pen->nativePen : NULL, points, count)); } Status DrawRectangle(const Pen *pen, REAL x, REAL y, REAL width, REAL height) { return updateStatus(DllExports::GdipDrawRectangle( nativeGraphics, pen ? pen->nativePen : NULL, x, y, width, height)); } Status DrawRectangle(const Pen *pen, INT x, INT y, INT width, INT height) { return updateStatus(DllExports::GdipDrawRectangleI( nativeGraphics, pen ? pen->nativePen : NULL, x, y, width, height)); } Status DrawRectangle(const Pen *pen, const RectF& rect) { return updateStatus(DllExports::GdipDrawRectangle( nativeGraphics, pen ? pen->nativePen : NULL, rect.X, rect.Y, rect.Width, rect.Height)); } Status DrawRectangle(const Pen *pen, const Rect& rect) { return updateStatus(DllExports::GdipDrawRectangleI( nativeGraphics, pen ? pen->nativePen : NULL, rect.X, rect.Y, rect.Width, rect.Height)); } Status DrawRectangles(const Pen *pen, const RectF *rects, INT count) { return updateStatus(DllExports::GdipDrawRectangles( nativeGraphics, pen ? pen->nativePen : NULL, rects, count)); } Status DrawRectangles(const Pen *pen, const Rect *rects, INT count) { return updateStatus(DllExports::GdipDrawRectanglesI( nativeGraphics, pen ? pen->nativePen : NULL, rects, count)); } Status DrawString(const WCHAR *string, INT length, const Font *font, const PointF& origin, const Brush *brush) { RectF layoutRect(origin.X, origin.Y, 0.0f, 0.0f); return updateStatus(DllExports::GdipDrawString( nativeGraphics, string, length, font ? font->nativeFont : NULL, &layoutRect, NULL, brush ? brush->nativeBrush : NULL)); } Status DrawString(const WCHAR *string, INT length, const Font *font, const PointF& origin, const StringFormat *stringFormat, const Brush *brush) { RectF layoutRect(origin.X, origin.Y, 0.0f, 0.0f); return updateStatus(DllExports::GdipDrawString( nativeGraphics, string, length, font ? font->nativeFont : NULL, &layoutRect, stringFormat ? stringFormat->nativeStringFormat : NULL, brush ? brush->nativeBrush : NULL)); } Status DrawString(const WCHAR *string, INT length, const Font *font, const RectF& layoutRect, const StringFormat *stringFormat, const Brush *brush) { return updateStatus(DllExports::GdipDrawString( nativeGraphics, string, length, font ? font->nativeFont : NULL, &layoutRect, stringFormat ? stringFormat->nativeStringFormat : NULL, brush ? brush->nativeBrush : NULL)); } Status EndContainer(GraphicsContainer state) { return updateStatus(DllExports::GdipEndContainer( nativeGraphics, state)); } Status EnumerateMetafile(const Metafile *metafile, const PointF& destPoint, EnumerateMetafileProc callback, VOID *callbackData = NULL, ImageAttributes *imageAttributes = NULL) { return updateStatus(DllExports::GdipEnumerateMetafileDestPoint( nativeGraphics, metafile ? ((GpMetafile*) metafile->nativeImage) : NULL, destPoint, callback, callbackData, imageAttributes ? imageAttributes->nativeImageAttributes : NULL)); } Status EnumerateMetafile(const Metafile *metafile, const Point& destPoint, EnumerateMetafileProc callback, VOID *callbackData = NULL, ImageAttributes *imageAttributes = NULL) { return updateStatus(DllExports::GdipEnumerateMetafileDestPointI( nativeGraphics, metafile ? ((GpMetafile*) metafile->nativeImage) : NULL, destPoint, callback, callbackData, imageAttributes ? imageAttributes->nativeImageAttributes : NULL)); } Status EnumerateMetafile(const Metafile *metafile, const RectF& destRect, EnumerateMetafileProc callback, VOID *callbackData = NULL, ImageAttributes *imageAttributes = NULL) { return updateStatus(DllExports::GdipEnumerateMetafileDestRect( nativeGraphics, metafile ? ((GpMetafile*) metafile->nativeImage) : NULL, destRect, callback, callbackData, imageAttributes ? imageAttributes->nativeImageAttributes : NULL)); } Status EnumerateMetafile(const Metafile *metafile, const Rect& destRect, EnumerateMetafileProc callback, VOID *callbackData = NULL, ImageAttributes *imageAttributes = NULL) { return updateStatus(DllExports::GdipEnumerateMetafileDestRectI( nativeGraphics, metafile ? ((GpMetafile*) metafile->nativeImage) : NULL, destRect, callback, callbackData, imageAttributes ? imageAttributes->nativeImageAttributes : NULL)); } Status EnumerateMetafile(const Metafile *metafile, const PointF *destPoints, INT count, EnumerateMetafileProc callback, VOID *callbackData = NULL, ImageAttributes *imageAttributes = NULL) { return updateStatus(DllExports::GdipEnumerateMetafileDestPoints( nativeGraphics, metafile ? ((GpMetafile*) metafile->nativeImage) : NULL, destPoints, count, callback, callbackData, imageAttributes ? imageAttributes->nativeImageAttributes : NULL)); } Status EnumerateMetafile(const Metafile *metafile, const Point *destPoints, INT count, EnumerateMetafileProc callback, VOID *callbackData = NULL, ImageAttributes *imageAttributes = NULL) { return updateStatus(DllExports::GdipEnumerateMetafileDestPointsI( nativeGraphics, metafile ? ((GpMetafile*) metafile->nativeImage) : NULL, destPoints, count, callback, callbackData, imageAttributes ? imageAttributes->nativeImageAttributes : NULL)); } Status EnumerateMetafile(const Metafile *metafile, const PointF& destPoint, const RectF& srcRect, Unit srcUnit, EnumerateMetafileProc callback, VOID *callbackData = NULL, ImageAttributes *imageAttributes = NULL) { return updateStatus(DllExports::GdipEnumerateMetafileSrcRectDestPoint( nativeGraphics, metafile ? ((GpMetafile*) metafile->nativeImage) : NULL, destPoint, srcRect, srcUnit, callback, callbackData, imageAttributes ? imageAttributes->nativeImageAttributes : NULL)); } Status EnumerateMetafile(const Metafile *metafile, const Point& destPoint, const Rect& srcRect, Unit srcUnit, EnumerateMetafileProc callback, VOID *callbackData = NULL, ImageAttributes *imageAttributes = NULL) { return updateStatus(DllExports::GdipEnumerateMetafileSrcRectDestPointI( nativeGraphics, metafile ? ((GpMetafile*) metafile->nativeImage) : NULL, destPoint, srcRect, srcUnit, callback, callbackData, imageAttributes ? imageAttributes->nativeImageAttributes : NULL)); } Status EnumerateMetafile(const Metafile *metafile, const RectF& destRect, const RectF& srcRect, Unit srcUnit, EnumerateMetafileProc callback, VOID *callbackData = NULL, ImageAttributes *imageAttributes = NULL) { return updateStatus(DllExports::GdipEnumerateMetafileSrcRectDestRect( nativeGraphics, metafile ? ((GpMetafile*) metafile->nativeImage) : NULL, destRect, srcRect, srcUnit, callback, callbackData, imageAttributes ? imageAttributes->nativeImageAttributes : NULL)); } Status EnumerateMetafile(const Metafile *metafile, const Rect& destRect, const Rect& srcRect, Unit srcUnit, EnumerateMetafileProc callback, VOID *callbackData = NULL, ImageAttributes *imageAttributes = NULL) { return updateStatus(DllExports::GdipEnumerateMetafileSrcRectDestRectI( nativeGraphics, metafile ? ((GpMetafile*) metafile->nativeImage) : NULL, destRect, srcRect, srcUnit, callback, callbackData, imageAttributes ? imageAttributes->nativeImageAttributes : NULL)); } Status EnumerateMetafile(const Metafile *metafile, const PointF* destPoints, INT count, const RectF& srcRect, Unit srcUnit, EnumerateMetafileProc callback, VOID *callbackData = NULL, ImageAttributes *imageAttributes = NULL) { return updateStatus(DllExports::GdipEnumerateMetafileSrcRectDestPoints( nativeGraphics, metafile ? ((GpMetafile*) metafile->nativeImage) : NULL, destPoints, count, srcRect, srcUnit, callback, callbackData, imageAttributes ? imageAttributes->nativeImageAttributes : NULL)); } Status EnumerateMetafile(const Metafile *metafile, const Point* destPoints, INT count, const Rect& srcRect, Unit srcUnit, EnumerateMetafileProc callback, VOID *callbackData = NULL, ImageAttributes *imageAttributes = NULL) { return updateStatus(DllExports::GdipEnumerateMetafileSrcRectDestPointsI( nativeGraphics, metafile ? ((GpMetafile*) metafile->nativeImage) : NULL, destPoints, count, srcRect, srcUnit, callback, callbackData, imageAttributes ? imageAttributes->nativeImageAttributes : NULL)); } Status ExcludeClip(const RectF& rect) { return updateStatus(DllExports::GdipSetClipRect( nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, CombineModeExclude)); } Status ExcludeClip(const Rect& rect) { return updateStatus(DllExports::GdipSetClipRectI( nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, CombineModeExclude)); } Status ExcludeClip(const Region *region) { return updateStatus(DllExports::GdipSetClipRegion( nativeGraphics, region ? region->nativeRegion : NULL, CombineModeExclude)); } Status FillClosedCurve(const Brush *brush, const PointF *points, INT count) { return updateStatus(DllExports::GdipFillClosedCurve( nativeGraphics, brush ? brush->nativeBrush : NULL, points, count)); } Status FillClosedCurve(const Brush *brush, const Point *points, INT count) { return updateStatus(DllExports::GdipFillClosedCurveI( nativeGraphics, brush ? brush->nativeBrush : NULL, points, count)); } Status FillClosedCurve(const Brush *brush, const PointF *points, INT count, FillMode fillMode, REAL tension = 0.5f) { return updateStatus(DllExports::GdipFillClosedCurve2( nativeGraphics, brush ? brush->nativeBrush : NULL, points, count, tension, fillMode)); } Status FillClosedCurve(const Brush *brush, const Point *points, INT count, FillMode fillMode, REAL tension = 0.5f) { return updateStatus(DllExports::GdipFillClosedCurve2I( nativeGraphics, brush ? brush->nativeBrush : NULL, points, count, tension, fillMode)); } Status FillEllipse(const Brush *brush, REAL x, REAL y, REAL width, REAL height) { return updateStatus(DllExports::GdipFillEllipse( nativeGraphics, brush ? brush->nativeBrush : NULL, x, y, width, height)); } Status FillEllipse(const Brush *brush, INT x, INT y, INT width, INT height) { return updateStatus(DllExports::GdipFillEllipseI( nativeGraphics, brush ? brush->nativeBrush : NULL, x, y, width, height)); } Status FillEllipse(const Brush *brush, const RectF& rect) { return updateStatus(DllExports::GdipFillEllipse( nativeGraphics, brush ? brush->nativeBrush : NULL, rect.X, rect.Y, rect.Width, rect.Height)); } Status FillEllipse(const Brush *brush, const Rect& rect) { return updateStatus(DllExports::GdipFillEllipseI( nativeGraphics, brush ? brush->nativeBrush : NULL, rect.X, rect.Y, rect.Width, rect.Height)); } Status FillPath(const Brush *brush, const GraphicsPath *path) { return updateStatus(DllExports::GdipFillPath( nativeGraphics, brush ? brush->nativeBrush : NULL, path ? path->nativePath : NULL)); } Status FillPie(const Brush *brush, REAL x, REAL y, REAL width, REAL height, REAL startAngle, REAL sweepAngle) { return updateStatus(DllExports::GdipFillPie( nativeGraphics, brush ? brush->nativeBrush : NULL, x, y, width, height, startAngle, sweepAngle)); } Status FillPie(const Brush *brush, INT x, INT y, INT width, INT height, REAL startAngle, REAL sweepAngle) { return updateStatus(DllExports::GdipFillPieI( nativeGraphics, brush ? brush->nativeBrush : NULL, x, y, width, height, startAngle, sweepAngle)); } Status FillPie(const Brush *brush, const RectF& rect, REAL startAngle, REAL sweepAngle) { return updateStatus(DllExports::GdipFillPie( nativeGraphics, brush ? brush->nativeBrush : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)); } Status FillPie(const Brush *brush, const Rect& rect, REAL startAngle, REAL sweepAngle) { return updateStatus(DllExports::GdipFillPieI( nativeGraphics, brush ? brush->nativeBrush : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)); } Status FillPolygon(const Brush *brush, const PointF *points, INT count) { return updateStatus(DllExports::GdipFillPolygon( nativeGraphics, brush ? brush->nativeBrush : NULL, points, count, FillModeAlternate)); } Status FillPolygon(const Brush *brush, const Point *points, INT count) { return updateStatus(DllExports::GdipFillPolygonI( nativeGraphics, brush ? brush->nativeBrush : NULL, points, count, FillModeAlternate)); } Status FillPolygon(const Brush *brush, const PointF *points, INT count, FillMode fillMode) { return updateStatus(DllExports::GdipFillPolygon( nativeGraphics, brush ? brush->nativeBrush : NULL, points, count, fillMode)); } Status FillPolygon(const Brush *brush, const Point *points, INT count, FillMode fillMode) { return updateStatus(DllExports::GdipFillPolygonI( nativeGraphics, brush ? brush->nativeBrush : NULL, points, count, fillMode)); } Status FillRectangle(const Brush *brush, REAL x, REAL y, REAL width, REAL height) { return updateStatus(DllExports::GdipFillRectangle( nativeGraphics, brush ? brush->nativeBrush : NULL, x, y, width, height)); } Status FillRectangle(const Brush *brush, INT x, INT y, INT width, INT height) { return updateStatus(DllExports::GdipFillRectangleI( nativeGraphics, brush ? brush->nativeBrush : NULL, x, y, width, height)); } Status FillRectangle(const Brush *brush, const RectF& rect) { return updateStatus(DllExports::GdipFillRectangle( nativeGraphics, brush ? brush->nativeBrush : NULL, rect.X, rect.Y, rect.Width, rect.Height)); } Status FillRectangle(const Brush *brush, const Rect& rect) { return updateStatus(DllExports::GdipFillRectangleI( nativeGraphics, brush ? brush->nativeBrush : NULL, rect.X, rect.Y, rect.Width, rect.Height)); } Status FillRectangles(const Brush *brush, const RectF *rects, INT count) { return updateStatus(DllExports::GdipFillRectangles( nativeGraphics, brush ? brush->nativeBrush : NULL, rects, count)); } Status FillRectangles(const Brush *brush, const Rect *rects, INT count) { return updateStatus(DllExports::GdipFillRectanglesI( nativeGraphics, brush ? brush->nativeBrush : NULL, rects, count)); } Status FillRegion(const Brush *brush, const Region *region) { return updateStatus(DllExports::GdipFillRegion( nativeGraphics, brush ? brush->nativeBrush : NULL, region ? region->nativeRegion : NULL)); } VOID Flush(FlushIntention intention = FlushIntentionFlush) { updateStatus(DllExports::GdipFlush(nativeGraphics, intention)); } Status GetClip(Region *region) const { return updateStatus(DllExports::GdipGetClip( nativeGraphics, region ? region->nativeRegion : NULL)); } Status GetClipBounds(RectF *rect) const { return updateStatus(DllExports::GdipGetClipBounds( nativeGraphics, rect)); } Status GetClipBounds(Rect *rect) const { return updateStatus(DllExports::GdipGetClipBoundsI( nativeGraphics, rect)); } CompositingMode GetCompositingMode() const { CompositingMode result = CompositingModeSourceOver; updateStatus(DllExports::GdipGetCompositingMode( nativeGraphics, &result)); return result; } CompositingQuality GetCompositingQuality() const { CompositingQuality result = CompositingQualityDefault; updateStatus(DllExports::GdipGetCompositingQuality( nativeGraphics, &result)); return result; } REAL GetDpiX() const { REAL result = 0.0f; updateStatus(DllExports::GdipGetDpiX(nativeGraphics, &result)); return result; } REAL GetDpiY() const { REAL result = 0.0f; updateStatus(DllExports::GdipGetDpiY(nativeGraphics, &result)); return result; } HDC GetHDC() { HDC result = NULL; updateStatus(DllExports::GdipGetDC(nativeGraphics, &result)); return result; } InterpolationMode GetInterpolationMode() const { InterpolationMode result = InterpolationModeDefault; updateStatus(DllExports::GdipGetInterpolationMode( nativeGraphics, &result)); return result; } Status GetLastStatus() const { Status result = lastStatus; lastStatus = Ok; return result; } Status GetNearestColor(Color *color) const { return updateStatus(DllExports::GdipGetNearestColor( nativeGraphics, color ? &color->Value : NULL)); } REAL GetPageScale() const { REAL result = 0.0f; updateStatus(DllExports::GdipGetPageScale( nativeGraphics, &result)); return result; } Unit GetPageUnit() const { Unit result = UnitWorld; updateStatus(DllExports::GdipGetPageUnit( nativeGraphics, &result)); return result; } PixelOffsetMode GetPixelOffsetMode() const { PixelOffsetMode result = PixelOffsetModeDefault; updateStatus(DllExports::GdipGetPixelOffsetMode( nativeGraphics, &result)); return result; } Status GetRenderingOrigin(INT *x, INT *y) const { return updateStatus(DllExports::GdipGetRenderingOrigin( nativeGraphics, x, y)); } SmoothingMode GetSmoothingMode() const { SmoothingMode result = SmoothingModeDefault; updateStatus(DllExports::GdipGetSmoothingMode( nativeGraphics, &result)); return result; } UINT GetTextContrast() const { UINT result = 0; updateStatus(DllExports::GdipGetTextContrast( nativeGraphics, &result)); return result; } TextRenderingHint GetTextRenderingHint() const { TextRenderingHint result = TextRenderingHintSystemDefault; updateStatus(DllExports::GdipGetTextRenderingHint( nativeGraphics, &result)); return result; } Status GetTransform(Matrix *matrix) const { return updateStatus(DllExports::GdipGetWorldTransform( nativeGraphics, matrix ? matrix->nativeMatrix : NULL)); } Status GetVisibleClipBounds(RectF *rect) const { return updateStatus(DllExports::GdipGetVisibleClipBounds( nativeGraphics, rect)); } Status GetVisibleClipBounds(Rect *rect) const { return updateStatus(DllExports::GdipGetVisibleClipBoundsI( nativeGraphics, rect)); } Status IntersectClip(const RectF& rect) { return updateStatus(DllExports::GdipSetClipRect( nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, CombineModeIntersect)); } Status IntersectClip(const Rect& rect) { return updateStatus(DllExports::GdipSetClipRectI( nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, CombineModeIntersect)); } Status IntersectClip(const Region *region) { return updateStatus(DllExports::GdipSetClipRegion( nativeGraphics, region ? region->nativeRegion : NULL, CombineModeIntersect)); } BOOL IsClipEmpty() const { BOOL result = FALSE; updateStatus(DllExports::GdipIsClipEmpty( nativeGraphics, &result)); return result; } BOOL IsVisible(REAL x, REAL y) const { BOOL result = FALSE; updateStatus(DllExports::GdipIsVisiblePoint( nativeGraphics, x, y, &result)); return result; } BOOL IsVisible(INT x, INT y) const { BOOL result = FALSE; updateStatus(DllExports::GdipIsVisiblePointI( nativeGraphics, x, y, &result)); return result; } BOOL IsVisible(const PointF& point) const { BOOL result = FALSE; updateStatus(DllExports::GdipIsVisiblePoint( nativeGraphics, point.X, point.Y, &result)); return result; } BOOL IsVisible(const Point& point) const { BOOL result = FALSE; updateStatus(DllExports::GdipIsVisiblePointI( nativeGraphics, point.X, point.Y, &result)); return result; } BOOL IsVisible(REAL x, REAL y, REAL width, REAL height) const { BOOL result = FALSE; updateStatus(DllExports::GdipIsVisibleRect( nativeGraphics, x, y, width, height, &result)); return result; } BOOL IsVisible(INT x, INT y, INT width, INT height) const { BOOL result = FALSE; updateStatus(DllExports::GdipIsVisibleRectI( nativeGraphics, x, y, width, height, &result)); return result; } BOOL IsVisible(const RectF& rect) const { BOOL result = FALSE; updateStatus(DllExports::GdipIsVisibleRect( nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, &result)); return result; } BOOL IsVisible(const Rect& rect) const { BOOL result = FALSE; updateStatus(DllExports::GdipIsVisibleRectI( nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, &result)); return result; } BOOL IsVisibleClipEmpty() const { BOOL result = FALSE; updateStatus(DllExports::GdipIsVisibleClipEmpty( nativeGraphics, &result)); return result; } Status MeasureCharacterRanges(const WCHAR *string, INT length, const Font *font, const RectF& layoutRect, const StringFormat *stringFormat, INT regionCount, Region *regions) const { if (regionCount <= 0 || !regions) return lastStatus = InvalidParameter; GpRegion **nativeRegionArray = (GpRegion**) DllExports::GdipAlloc(regionCount * sizeof(GpRegion*)); if (!nativeRegionArray) return lastStatus = OutOfMemory; for (int i = 0; i < regionCount; ++i) { nativeRegionArray[i] = regions[i].nativeRegion; } Status status = updateStatus(DllExports::GdipMeasureCharacterRanges( nativeGraphics, string, length, font ? font->nativeFont : NULL, layoutRect, stringFormat ? stringFormat->nativeStringFormat : NULL, regionCount, nativeRegionArray)); DllExports::GdipFree(nativeRegionArray); return status; } Status MeasureDriverString(const UINT16 *text, INT length, const Font *font, const PointF *positions, INT flags, const Matrix *matrix, RectF *boundingBox) const { return updateStatus(DllExports::GdipMeasureDriverString( nativeGraphics, text, length, font ? font->nativeFont : NULL, positions, flags, matrix ? matrix->nativeMatrix : NULL, boundingBox)); } Status MeasureString(const WCHAR *string, INT length, const Font *font, const RectF& layoutRect, RectF *boundingBox) const { return updateStatus(DllExports::GdipMeasureString( nativeGraphics, string, length, font ? font->nativeFont : NULL, &layoutRect, NULL, boundingBox, NULL, NULL)); } Status MeasureString(const WCHAR *string, INT length, const Font *font, const RectF& layoutRect, const StringFormat *stringFormat, RectF *boundingBox, INT *codepointsFitted = NULL, INT *linesFitted = NULL) const { return updateStatus(DllExports::GdipMeasureString( nativeGraphics, string, length, font ? font->nativeFont : NULL, &layoutRect, stringFormat ? stringFormat->nativeStringFormat : NULL, boundingBox, codepointsFitted, linesFitted)); } Status MeasureString(const WCHAR *string, INT length, const Font *font, const SizeF& layoutRectSize, const StringFormat *stringFormat, SizeF *size, INT *codepointsFitted = NULL, INT *linesFitted = NULL) const { if (!size) return lastStatus = InvalidParameter; RectF layoutRect(PointF(0.0f, 0.0f), layoutRectSize); RectF boundingBox; Status status = updateStatus(DllExports::GdipMeasureString( nativeGraphics, string, length, font ? font->nativeFont : NULL, &layoutRect, stringFormat ? stringFormat->nativeStringFormat : NULL, &boundingBox, codepointsFitted, linesFitted)); boundingBox.GetSize(size); return status; } Status MeasureString(const WCHAR *string, INT length, const Font *font, const PointF& origin, RectF *boundingBox) const { RectF layoutRect(origin, SizeF(0.0f, 0.0f)); return updateStatus(DllExports::GdipMeasureString( nativeGraphics, string, length, font ? font->nativeFont : NULL, &layoutRect, NULL, boundingBox, NULL, NULL)); } Status MeasureString(const WCHAR *string, INT length, const Font *font, const PointF& origin, const StringFormat *stringFormat, RectF *boundingBox) const { RectF layoutRect(origin, SizeF(0.0f, 0.0f)); return updateStatus(DllExports::GdipMeasureString( nativeGraphics, string, length, font ? font->nativeFont : NULL, &layoutRect, stringFormat ? stringFormat->nativeStringFormat : NULL, boundingBox, NULL, NULL)); } Status MultiplyTransform(const Matrix *matrix, MatrixOrder order = MatrixOrderPrepend) { return updateStatus(DllExports::GdipMultiplyWorldTransform( nativeGraphics, matrix ? matrix->nativeMatrix : NULL, order)); } VOID ReleaseHDC(HDC hdc) { updateStatus(DllExports::GdipReleaseDC(nativeGraphics, hdc)); } Status ResetClip() { return updateStatus(DllExports::GdipResetClip(nativeGraphics)); } Status ResetTransform() { return updateStatus(DllExports::GdipResetWorldTransform( nativeGraphics)); } Status Restore(GraphicsState state) { return updateStatus(DllExports::GdipRestoreGraphics( nativeGraphics, state)); } Status RotateTransform(REAL angle, MatrixOrder order = MatrixOrderPrepend) { return updateStatus(DllExports::GdipRotateWorldTransform( nativeGraphics, angle, order)); } GraphicsState Save() const { GraphicsState result = 0; updateStatus(DllExports::GdipSaveGraphics( nativeGraphics, &result)); return result; } Status ScaleTransform(REAL sx, REAL sy, MatrixOrder order = MatrixOrderPrepend) { return updateStatus(DllExports::GdipScaleWorldTransform( nativeGraphics, sx, sy, order)); } VOID SetAbort() { updateStatus(NotImplemented); } Status SetClip(const Graphics *g, CombineMode combineMode = CombineModeReplace) { return updateStatus(DllExports::GdipSetClipGraphics( nativeGraphics, g ? g->nativeGraphics : NULL, combineMode)); } Status SetClip(const RectF& rect, CombineMode combineMode = CombineModeReplace) { return updateStatus(DllExports::GdipSetClipRect( nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, combineMode)); } Status SetClip(const Rect& rect, CombineMode combineMode = CombineModeReplace) { return updateStatus(DllExports::GdipSetClipRectI( nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, combineMode)); } Status SetClip(const GraphicsPath *path, CombineMode combineMode = CombineModeReplace) { return updateStatus(DllExports::GdipSetClipPath( nativeGraphics, path ? path->nativePath : NULL, combineMode)); } Status SetClip(const Region *region, CombineMode combineMode = CombineModeReplace) { return updateStatus(DllExports::GdipSetClipRegion( nativeGraphics, region ? region->nativeRegion : NULL, combineMode)); } Status SetClip(HRGN hRgn, CombineMode combineMode = CombineModeReplace) { return updateStatus(DllExports::GdipSetClipHrgn( nativeGraphics, hRgn, combineMode)); } Status SetCompositingMode(CompositingMode compositingMode) { return updateStatus(DllExports::GdipSetCompositingMode( nativeGraphics, compositingMode)); } Status SetCompositingQuality(CompositingQuality compositingQuality) { return updateStatus(DllExports::GdipSetCompositingQuality( nativeGraphics, compositingQuality)); } Status SetInterpolationMode(InterpolationMode interpolationMode) { return updateStatus(DllExports::GdipSetInterpolationMode( nativeGraphics, interpolationMode)); } Status SetPageScale(REAL scale) { return updateStatus(DllExports::GdipSetPageScale( nativeGraphics, scale)); } Status SetPageUnit(Unit unit) { return updateStatus(DllExports::GdipSetPageUnit( nativeGraphics, unit)); } Status SetPixelOffsetMode(PixelOffsetMode pixelOffsetMode) { return updateStatus(DllExports::GdipSetPixelOffsetMode( nativeGraphics, pixelOffsetMode)); } Status SetRenderingOrigin(INT x, INT y) { return updateStatus(DllExports::GdipSetRenderingOrigin( nativeGraphics, x, y)); } Status SetSmoothingMode(SmoothingMode smoothingMode) { return updateStatus(DllExports::GdipSetSmoothingMode( nativeGraphics, smoothingMode)); } Status SetTextContrast(UINT contrast) { return updateStatus(DllExports::GdipSetTextContrast( nativeGraphics, contrast)); } Status SetTextRenderingHint(TextRenderingHint textRenderingHint) { return updateStatus(DllExports::GdipSetTextRenderingHint( nativeGraphics, textRenderingHint)); } Status SetTransform(const Matrix *matrix) { return updateStatus(DllExports::GdipSetWorldTransform( nativeGraphics, matrix ? matrix->nativeMatrix : NULL)); } Status TransformPoints(CoordinateSpace destSpace, CoordinateSpace srcSpace, PointF *pts, INT count) const { return updateStatus(DllExports::GdipTransformPoints( nativeGraphics, destSpace, srcSpace, pts, count)); } Status TransformPoints(CoordinateSpace destSpace, CoordinateSpace srcSpace, Point *pts, INT count) const { return updateStatus(DllExports::GdipTransformPointsI( nativeGraphics, destSpace, srcSpace, pts, count)); } Status TranslateClip(REAL dx, REAL dy) { return updateStatus(DllExports::GdipTranslateClip( nativeGraphics, dx, dy)); } Status TranslateClip(INT dx, INT dy) { return updateStatus(DllExports::GdipTranslateClipI( nativeGraphics, dx, dy)); } Status TranslateTransform(REAL dx, REAL dy, MatrixOrder order = MatrixOrderPrepend) { return updateStatus(DllExports::GdipTranslateWorldTransform( nativeGraphics, dx, dy, order)); } private: Graphics(const Graphics&); Graphics& operator=(const Graphics&); Status updateStatus(Status newStatus) const { if (newStatus != Ok) lastStatus = newStatus; return newStatus; } GpGraphics *nativeGraphics; mutable Status lastStatus; }; #endif /* __GDIPLUS_GRAPHICS_H */