blob: 360c897e7105c3a706f9eed69f20c456ec64d0f4 [file] [log] [blame]
/*
* 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 */