|
|
/**************************************************************************\
* * Copyright (c) 1998-2001, Microsoft Corp. All Rights Reserved. * * Module Name: * * GdiplusGraphics.h * * Abstract: * * GDI+ Graphics Object * \**************************************************************************/
#ifndef _GDIPLUSGRAPHICS_H
#define _GDIPLUSGRAPHICS_H
class Graphics : public GdiplusBase { public: friend class Region; friend class GraphicsPath; friend class Image; friend class Bitmap; friend class Metafile; friend class Font; friend class FontFamily; friend class FontCollection; friend class CachedBitmap;
static Graphics* FromHDC(IN HDC hdc) { return new Graphics(hdc); }
static Graphics* FromHDC(IN HDC hdc, IN HANDLE hdevice) { return new Graphics(hdc, hdevice); }
static Graphics* FromHWND(IN HWND hwnd, IN BOOL icm = FALSE) { return new Graphics(hwnd, icm); }
static Graphics* FromImage(IN Image *image) { return new Graphics(image); }
Graphics(IN HDC hdc) { GpGraphics *graphics = NULL;
lastResult = DllExports::GdipCreateFromHDC(hdc, &graphics);
SetNativeGraphics(graphics); }
Graphics(IN HDC hdc, IN HANDLE hdevice) { GpGraphics *graphics = NULL;
lastResult = DllExports::GdipCreateFromHDC2(hdc, hdevice, &graphics);
SetNativeGraphics(graphics); }
Graphics(IN HWND hwnd, IN BOOL icm = FALSE) { GpGraphics *graphics = NULL;
if (icm) { lastResult = DllExports::GdipCreateFromHWNDICM(hwnd, &graphics); } else { lastResult = DllExports::GdipCreateFromHWND(hwnd, &graphics); }
SetNativeGraphics(graphics); }
Graphics(IN Image* image) { GpGraphics *graphics = NULL;
if (image != NULL) { lastResult = DllExports::GdipGetImageGraphicsContext( image->nativeImage, &graphics); } SetNativeGraphics(graphics); }
~Graphics() { DllExports::GdipDeleteGraphics(nativeGraphics); }
VOID Flush(IN FlushIntention intention = FlushIntentionFlush) { DllExports::GdipFlush(nativeGraphics, intention); }
//------------------------------------------------------------------------
// GDI Interop methods
//------------------------------------------------------------------------
// Locks the graphics until ReleaseDC is called
HDC GetHDC() { HDC hdc = NULL;
SetStatus(DllExports::GdipGetDC(nativeGraphics, &hdc));
return hdc; }
VOID ReleaseHDC(IN HDC hdc) { SetStatus(DllExports::GdipReleaseDC(nativeGraphics, hdc)); }
//------------------------------------------------------------------------
// Rendering modes
//------------------------------------------------------------------------
Status SetRenderingOrigin(IN INT x, IN INT y) { return SetStatus( DllExports::GdipSetRenderingOrigin( nativeGraphics, x, y ) ); }
Status GetRenderingOrigin(OUT INT *x, OUT INT *y) const { return SetStatus( DllExports::GdipGetRenderingOrigin( nativeGraphics, x, y ) ); }
Status SetCompositingMode(IN CompositingMode compositingMode) { return SetStatus(DllExports::GdipSetCompositingMode(nativeGraphics, compositingMode)); }
CompositingMode GetCompositingMode() const { CompositingMode mode;
SetStatus(DllExports::GdipGetCompositingMode(nativeGraphics, &mode));
return mode; }
Status SetCompositingQuality(IN CompositingQuality compositingQuality) { return SetStatus(DllExports::GdipSetCompositingQuality( nativeGraphics, compositingQuality)); }
CompositingQuality GetCompositingQuality() const { CompositingQuality quality;
SetStatus(DllExports::GdipGetCompositingQuality( nativeGraphics, &quality));
return quality; }
Status SetTextRenderingHint(IN TextRenderingHint newMode) { return SetStatus(DllExports::GdipSetTextRenderingHint(nativeGraphics, newMode)); }
TextRenderingHint GetTextRenderingHint() const { TextRenderingHint hint;
SetStatus(DllExports::GdipGetTextRenderingHint(nativeGraphics, &hint));
return hint; }
Status SetTextContrast(IN UINT contrast) { return SetStatus(DllExports::GdipSetTextContrast(nativeGraphics, contrast)); }
UINT GetTextContrast() const { UINT contrast;
SetStatus(DllExports::GdipGetTextContrast(nativeGraphics, &contrast));
return contrast; }
InterpolationMode GetInterpolationMode() const { InterpolationMode mode = InterpolationModeInvalid;
SetStatus(DllExports::GdipGetInterpolationMode(nativeGraphics, &mode));
return mode; }
Status SetInterpolationMode(IN InterpolationMode interpolationMode) { return SetStatus(DllExports::GdipSetInterpolationMode(nativeGraphics, interpolationMode)); }
SmoothingMode GetSmoothingMode() const { SmoothingMode smoothingMode = SmoothingModeInvalid;
SetStatus(DllExports::GdipGetSmoothingMode(nativeGraphics, &smoothingMode));
return smoothingMode; }
Status SetSmoothingMode(IN SmoothingMode smoothingMode) { return SetStatus(DllExports::GdipSetSmoothingMode(nativeGraphics, smoothingMode)); }
PixelOffsetMode GetPixelOffsetMode() const { PixelOffsetMode pixelOffsetMode = PixelOffsetModeInvalid;
SetStatus(DllExports::GdipGetPixelOffsetMode(nativeGraphics, &pixelOffsetMode));
return pixelOffsetMode; }
Status SetPixelOffsetMode(IN PixelOffsetMode pixelOffsetMode) { return SetStatus(DllExports::GdipSetPixelOffsetMode(nativeGraphics, pixelOffsetMode)); }
//------------------------------------------------------------------------
// Manipulate current world transform
//------------------------------------------------------------------------
Status SetTransform(IN const Matrix* matrix) { return SetStatus(DllExports::GdipSetWorldTransform(nativeGraphics, matrix->nativeMatrix)); } Status ResetTransform() { return SetStatus(DllExports::GdipResetWorldTransform(nativeGraphics)); }
Status MultiplyTransform(IN const Matrix* matrix, IN MatrixOrder order = MatrixOrderPrepend) { return SetStatus(DllExports::GdipMultiplyWorldTransform(nativeGraphics, matrix->nativeMatrix, order)); }
Status TranslateTransform(IN REAL dx, IN REAL dy, IN MatrixOrder order = MatrixOrderPrepend) { return SetStatus(DllExports::GdipTranslateWorldTransform(nativeGraphics, dx, dy, order)); }
Status ScaleTransform(IN REAL sx, IN REAL sy, IN MatrixOrder order = MatrixOrderPrepend) { return SetStatus(DllExports::GdipScaleWorldTransform(nativeGraphics, sx, sy, order)); }
Status RotateTransform(IN REAL angle, IN MatrixOrder order = MatrixOrderPrepend) { return SetStatus(DllExports::GdipRotateWorldTransform(nativeGraphics, angle, order)); }
Status GetTransform(OUT Matrix* matrix) const { return SetStatus(DllExports::GdipGetWorldTransform(nativeGraphics, matrix->nativeMatrix)); }
Status SetPageUnit(IN Unit unit) { return SetStatus(DllExports::GdipSetPageUnit(nativeGraphics, unit)); }
Status SetPageScale(IN REAL scale) { return SetStatus(DllExports::GdipSetPageScale(nativeGraphics, scale)); }
Unit GetPageUnit() const { Unit unit;
SetStatus(DllExports::GdipGetPageUnit(nativeGraphics, &unit));
return unit; }
REAL GetPageScale() const { REAL scale;
SetStatus(DllExports::GdipGetPageScale(nativeGraphics, &scale));
return scale; }
REAL GetDpiX() const { REAL dpi;
SetStatus(DllExports::GdipGetDpiX(nativeGraphics, &dpi));
return dpi; }
REAL GetDpiY() const { REAL dpi;
SetStatus(DllExports::GdipGetDpiY(nativeGraphics, &dpi));
return dpi; }
Status TransformPoints(IN CoordinateSpace destSpace, IN CoordinateSpace srcSpace, IN OUT PointF* pts, IN INT count) const { return SetStatus(DllExports::GdipTransformPoints(nativeGraphics, destSpace, srcSpace, pts, count)); }
Status TransformPoints(IN CoordinateSpace destSpace, IN CoordinateSpace srcSpace, IN OUT Point* pts, IN INT count) const {
return SetStatus(DllExports::GdipTransformPointsI(nativeGraphics, destSpace, srcSpace, pts, count)); }
//------------------------------------------------------------------------
// GetNearestColor (for <= 8bpp surfaces). Note: Alpha is ignored.
//------------------------------------------------------------------------
Status GetNearestColor(IN OUT Color* color) const { if (color == NULL) { return SetStatus(InvalidParameter); }
ARGB argb = color->GetValue();
Status status = SetStatus(DllExports::GdipGetNearestColor(nativeGraphics, &argb));
color->SetValue(argb);
return status; }
Status DrawLine(IN const Pen* pen, IN REAL x1, IN REAL y1, IN REAL x2, IN REAL y2) { return SetStatus(DllExports::GdipDrawLine(nativeGraphics, pen->nativePen, x1, y1, x2, y2)); }
Status DrawLine(IN const Pen* pen, IN const PointF& pt1, IN const PointF& pt2) { return DrawLine(pen, pt1.X, pt1.Y, pt2.X, pt2.Y); }
Status DrawLines(IN const Pen* pen, IN const PointF* points, IN INT count) { return SetStatus(DllExports::GdipDrawLines(nativeGraphics, pen->nativePen, points, count)); }
Status DrawLine(IN const Pen* pen, IN INT x1, IN INT y1, IN INT x2, IN INT y2) { return SetStatus(DllExports::GdipDrawLineI(nativeGraphics, pen->nativePen, x1, y1, x2, y2)); }
Status DrawLine(IN const Pen* pen, IN const Point& pt1, IN const Point& pt2) { return DrawLine(pen, pt1.X, pt1.Y, pt2.X, pt2.Y); }
Status DrawLines(IN const Pen* pen, IN const Point* points, IN INT count) { return SetStatus(DllExports::GdipDrawLinesI(nativeGraphics, pen->nativePen, points, count)); }
Status DrawArc(IN const Pen* pen, IN REAL x, IN REAL y, IN REAL width, IN REAL height, IN REAL startAngle, IN REAL sweepAngle) { return SetStatus(DllExports::GdipDrawArc(nativeGraphics, pen->nativePen, x, y, width, height, startAngle, sweepAngle)); }
Status DrawArc(IN const Pen* pen, IN const RectF& rect, IN REAL startAngle, IN REAL sweepAngle) { return DrawArc(pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle); }
Status DrawArc(IN const Pen* pen, IN INT x, IN INT y, IN INT width, IN INT height, IN REAL startAngle, IN REAL sweepAngle) { return SetStatus(DllExports::GdipDrawArcI(nativeGraphics, pen->nativePen, x, y, width, height, startAngle, sweepAngle)); }
Status DrawArc(IN const Pen* pen, IN const Rect& rect, IN REAL startAngle, IN REAL sweepAngle) { return DrawArc(pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle); }
Status DrawBezier(IN const Pen* pen, IN REAL x1, IN REAL y1, IN REAL x2, IN REAL y2, IN REAL x3, IN REAL y3, IN REAL x4, IN REAL y4) { return SetStatus(DllExports::GdipDrawBezier(nativeGraphics, pen->nativePen, x1, y1, x2, y2, x3, y3, x4, y4)); }
Status DrawBezier(IN const Pen* pen, IN const PointF& pt1, IN const PointF& pt2, IN const PointF& pt3, IN const PointF& pt4) { return DrawBezier(pen, pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y); }
Status DrawBeziers(IN const Pen* pen, IN const PointF* points, IN INT count) { return SetStatus(DllExports::GdipDrawBeziers(nativeGraphics, pen->nativePen, points, count)); }
Status DrawBezier(IN const Pen* pen, IN INT x1, IN INT y1, IN INT x2, IN INT y2, IN INT x3, IN INT y3, IN INT x4, IN INT y4) { return SetStatus(DllExports::GdipDrawBezierI(nativeGraphics, pen->nativePen, x1, y1, x2, y2, x3, y3, x4, y4)); }
Status DrawBezier(IN const Pen* pen, IN const Point& pt1, IN const Point& pt2, IN const Point& pt3, IN const Point& pt4) { return DrawBezier(pen, pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y); }
Status DrawBeziers(IN const Pen* pen, IN const Point* points, IN INT count) { return SetStatus(DllExports::GdipDrawBeziersI(nativeGraphics, pen->nativePen, points, count)); }
Status DrawRectangle(IN const Pen* pen, IN const RectF& rect) { return DrawRectangle(pen, rect.X, rect.Y, rect.Width, rect.Height); }
Status DrawRectangle(IN const Pen* pen, IN REAL x, IN REAL y, IN REAL width, IN REAL height) { return SetStatus(DllExports::GdipDrawRectangle(nativeGraphics, pen->nativePen, x, y, width, height)); }
Status DrawRectangles(IN const Pen* pen, IN const RectF* rects, IN INT count) { return SetStatus(DllExports::GdipDrawRectangles(nativeGraphics, pen->nativePen, rects, count)); }
Status DrawRectangle(IN const Pen* pen, IN const Rect& rect) { return DrawRectangle(pen, rect.X, rect.Y, rect.Width, rect.Height); }
Status DrawRectangle(IN const Pen* pen, IN INT x, IN INT y, IN INT width, IN INT height) { return SetStatus(DllExports::GdipDrawRectangleI(nativeGraphics, pen->nativePen, x, y, width, height)); }
Status DrawRectangles(IN const Pen* pen, IN const Rect* rects, IN INT count) { return SetStatus(DllExports::GdipDrawRectanglesI(nativeGraphics, pen->nativePen, rects, count)); }
Status DrawEllipse(IN const Pen* pen, IN const RectF& rect) { return DrawEllipse(pen, rect.X, rect.Y, rect.Width, rect.Height); }
Status DrawEllipse(IN const Pen* pen, IN REAL x, IN REAL y, IN REAL width, IN REAL height) { return SetStatus(DllExports::GdipDrawEllipse(nativeGraphics, pen->nativePen, x, y, width, height)); }
Status DrawEllipse(IN const Pen* pen, IN const Rect& rect) { return DrawEllipse(pen, rect.X, rect.Y, rect.Width, rect.Height); }
Status DrawEllipse(IN const Pen* pen, IN INT x, IN INT y, IN INT width, IN INT height) { return SetStatus(DllExports::GdipDrawEllipseI(nativeGraphics, pen->nativePen, x, y, width, height)); }
Status DrawPie(IN const Pen* pen, IN const RectF& rect, IN REAL startAngle, IN REAL sweepAngle) { return DrawPie(pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle); }
Status DrawPie(IN const Pen* pen, IN REAL x, IN REAL y, IN REAL width, IN REAL height, IN REAL startAngle, IN REAL sweepAngle) { return SetStatus(DllExports::GdipDrawPie(nativeGraphics, pen->nativePen, x, y, width, height, startAngle, sweepAngle)); }
Status DrawPie(IN const Pen* pen, IN const Rect& rect, IN REAL startAngle, IN REAL sweepAngle) { return DrawPie(pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle); }
Status DrawPie(IN const Pen* pen, IN INT x, IN INT y, IN INT width, IN INT height, IN REAL startAngle, IN REAL sweepAngle) { return SetStatus(DllExports::GdipDrawPieI(nativeGraphics, pen->nativePen, x, y, width, height, startAngle, sweepAngle)); }
Status DrawPolygon(IN const Pen* pen, IN const PointF* points, IN INT count) { return SetStatus(DllExports::GdipDrawPolygon(nativeGraphics, pen->nativePen, points, count)); }
Status DrawPolygon(IN const Pen* pen, IN const Point* points, IN INT count) { return SetStatus(DllExports::GdipDrawPolygonI(nativeGraphics, pen->nativePen, points, count)); }
Status DrawPath(IN const Pen* pen, IN const GraphicsPath* path) { return SetStatus(DllExports::GdipDrawPath(nativeGraphics, pen ? pen->nativePen : NULL, path ? path->nativePath : NULL)); }
Status DrawCurve(IN const Pen* pen, IN const PointF* points, IN INT count) { return SetStatus(DllExports::GdipDrawCurve(nativeGraphics, pen->nativePen, points, count)); }
Status DrawCurve(IN const Pen* pen, IN const PointF* points, IN INT count, IN REAL tension) { return SetStatus(DllExports::GdipDrawCurve2(nativeGraphics, pen->nativePen, points, count, tension)); }
Status DrawCurve(IN const Pen* pen, IN const PointF* points, IN INT count, IN INT offset, IN INT numberOfSegments, IN REAL tension = 0.5f) { return SetStatus(DllExports::GdipDrawCurve3(nativeGraphics, pen->nativePen, points, count, offset, numberOfSegments, tension)); }
Status DrawCurve(IN const Pen* pen, IN const Point* points, IN INT count) { return SetStatus(DllExports::GdipDrawCurveI(nativeGraphics, pen->nativePen, points, count)); }
Status DrawCurve(IN const Pen* pen, IN const Point* points, IN INT count, IN REAL tension) { return SetStatus(DllExports::GdipDrawCurve2I(nativeGraphics, pen->nativePen, points, count, tension)); }
Status DrawCurve(IN const Pen* pen, IN const Point* points, IN INT count, IN INT offset, IN INT numberOfSegments, IN REAL tension = 0.5f) { return SetStatus(DllExports::GdipDrawCurve3I(nativeGraphics, pen->nativePen, points, count, offset, numberOfSegments, tension)); }
Status DrawClosedCurve(IN const Pen* pen, IN const PointF* points, IN INT count) { return SetStatus(DllExports::GdipDrawClosedCurve(nativeGraphics, pen->nativePen, points, count)); }
Status DrawClosedCurve(IN const Pen *pen, IN const PointF* points, IN INT count, IN REAL tension) { return SetStatus(DllExports::GdipDrawClosedCurve2(nativeGraphics, pen->nativePen, points, count, tension)); }
Status DrawClosedCurve(IN const Pen* pen, IN const Point* points, IN INT count) { return SetStatus(DllExports::GdipDrawClosedCurveI(nativeGraphics, pen->nativePen, points, count)); }
Status DrawClosedCurve(IN const Pen *pen, IN const Point* points, IN INT count, IN REAL tension) { return SetStatus(DllExports::GdipDrawClosedCurve2I(nativeGraphics, pen->nativePen, points, count, tension)); }
Status Clear(IN const Color &color) { return SetStatus(DllExports::GdipGraphicsClear( nativeGraphics, color.GetValue())); }
Status FillRectangle(IN const Brush* brush, IN const RectF& rect) { return FillRectangle(brush, rect.X, rect.Y, rect.Width, rect.Height); }
Status FillRectangle(IN const Brush* brush, IN REAL x, IN REAL y, IN REAL width, IN REAL height) { return SetStatus(DllExports::GdipFillRectangle(nativeGraphics, brush->nativeBrush, x, y, width, height)); }
Status FillRectangles(IN const Brush* brush, IN const RectF* rects, IN INT count) { return SetStatus(DllExports::GdipFillRectangles(nativeGraphics, brush->nativeBrush, rects, count)); }
Status FillRectangle(IN const Brush* brush, IN const Rect& rect) { return FillRectangle(brush, rect.X, rect.Y, rect.Width, rect.Height); }
Status FillRectangle(IN const Brush* brush, IN INT x, IN INT y, IN INT width, IN INT height) { return SetStatus(DllExports::GdipFillRectangleI(nativeGraphics, brush->nativeBrush, x, y, width, height)); }
Status FillRectangles(IN const Brush* brush, IN const Rect* rects, IN INT count) { return SetStatus(DllExports::GdipFillRectanglesI(nativeGraphics, brush->nativeBrush, rects, count)); }
Status FillPolygon(IN const Brush* brush, IN const PointF* points, IN INT count) { return FillPolygon(brush, points, count, FillModeAlternate); }
Status FillPolygon(IN const Brush* brush, IN const PointF* points, IN INT count, IN FillMode fillMode) { return SetStatus(DllExports::GdipFillPolygon(nativeGraphics, brush->nativeBrush, points, count, fillMode)); }
Status FillPolygon(IN const Brush* brush, IN const Point* points, IN INT count) { return FillPolygon(brush, points, count, FillModeAlternate); }
Status FillPolygon(IN const Brush* brush, IN const Point* points, IN INT count, IN FillMode fillMode) { return SetStatus(DllExports::GdipFillPolygonI(nativeGraphics, brush->nativeBrush, points, count, fillMode)); }
Status FillEllipse(IN const Brush* brush, IN const RectF& rect) { return FillEllipse(brush, rect.X, rect.Y, rect.Width, rect.Height); }
Status FillEllipse(IN const Brush* brush, IN REAL x, IN REAL y, IN REAL width, IN REAL height) { return SetStatus(DllExports::GdipFillEllipse(nativeGraphics, brush->nativeBrush, x, y, width, height)); }
Status FillEllipse(IN const Brush* brush, IN const Rect& rect) { return FillEllipse(brush, rect.X, rect.Y, rect.Width, rect.Height); }
Status FillEllipse(IN const Brush* brush, IN INT x, IN INT y, IN INT width, IN INT height) { return SetStatus(DllExports::GdipFillEllipseI(nativeGraphics, brush->nativeBrush, x, y, width, height)); }
Status FillPie(IN const Brush* brush, IN const RectF& rect, IN REAL startAngle, IN REAL sweepAngle) { return FillPie(brush, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle); }
Status FillPie(IN const Brush* brush, IN REAL x, IN REAL y, IN REAL width, IN REAL height, IN REAL startAngle, IN REAL sweepAngle) { return SetStatus(DllExports::GdipFillPie(nativeGraphics, brush->nativeBrush, x, y, width, height, startAngle, sweepAngle)); }
Status FillPie(IN const Brush* brush, IN const Rect& rect, IN REAL startAngle, IN REAL sweepAngle) { return FillPie(brush, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle); }
Status FillPie(IN const Brush* brush, IN INT x, IN INT y, IN INT width, IN INT height, IN REAL startAngle, IN REAL sweepAngle) { return SetStatus(DllExports::GdipFillPieI(nativeGraphics, brush->nativeBrush, x, y, width, height, startAngle, sweepAngle)); }
Status FillPath(IN const Brush* brush, IN const GraphicsPath* path) { return SetStatus(DllExports::GdipFillPath(nativeGraphics, brush->nativeBrush, path->nativePath)); }
Status FillClosedCurve(IN const Brush* brush, IN const PointF* points, IN INT count) { return SetStatus(DllExports::GdipFillClosedCurve(nativeGraphics, brush->nativeBrush, points, count));
}
Status FillClosedCurve(IN const Brush* brush, IN const PointF* points, IN INT count, IN FillMode fillMode, IN REAL tension = 0.5f) { return SetStatus(DllExports::GdipFillClosedCurve2(nativeGraphics, brush->nativeBrush, points, count, tension, fillMode)); }
Status FillClosedCurve(IN const Brush* brush, IN const Point* points, IN INT count) { return SetStatus(DllExports::GdipFillClosedCurveI(nativeGraphics, brush->nativeBrush, points, count)); }
Status FillClosedCurve(IN const Brush* brush, IN const Point* points, IN INT count, IN FillMode fillMode, IN REAL tension = 0.5f) { return SetStatus(DllExports::GdipFillClosedCurve2I(nativeGraphics, brush->nativeBrush, points, count, tension, fillMode)); }
Status FillRegion(IN const Brush* brush, IN const Region* region) { return SetStatus(DllExports::GdipFillRegion(nativeGraphics, brush->nativeBrush, region->nativeRegion)); }
Status DrawString( IN const WCHAR *string, IN INT length, IN const Font *font, IN const RectF &layoutRect, IN const StringFormat *stringFormat, IN const Brush *brush ) { return SetStatus(DllExports::GdipDrawString( nativeGraphics, string, length, font ? font->nativeFont : NULL, &layoutRect, stringFormat ? stringFormat->nativeFormat : NULL, brush ? brush->nativeBrush : NULL )); }
Status DrawString( const WCHAR *string, INT length, const Font *font, const PointF &origin, const Brush *brush ) { RectF rect(origin.X, origin.Y, 0.0f, 0.0f);
return SetStatus(DllExports::GdipDrawString( nativeGraphics, string, length, font ? font->nativeFont : NULL, &rect, 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 rect(origin.X, origin.Y, 0.0f, 0.0f);
return SetStatus(DllExports::GdipDrawString( nativeGraphics, string, length, font ? font->nativeFont : NULL, &rect, stringFormat ? stringFormat->nativeFormat : NULL, brush ? brush->nativeBrush : NULL )); }
Status MeasureString( IN const WCHAR *string, IN INT length, IN const Font *font, IN const RectF &layoutRect, IN const StringFormat *stringFormat, OUT RectF *boundingBox, OUT INT *codepointsFitted = 0, OUT INT *linesFilled = 0 ) const { return SetStatus(DllExports::GdipMeasureString( nativeGraphics, string, length, font ? font->nativeFont : NULL, &layoutRect, stringFormat ? stringFormat->nativeFormat : NULL, boundingBox, codepointsFitted, linesFilled )); }
Status MeasureString( IN const WCHAR *string, IN INT length, IN const Font *font, IN const SizeF &layoutRectSize, IN const StringFormat *stringFormat, OUT SizeF *size, OUT INT *codepointsFitted = 0, OUT INT *linesFilled = 0 ) const { RectF layoutRect(0, 0, layoutRectSize.Width, layoutRectSize.Height); RectF boundingBox; Status status;
if (size == NULL) { return SetStatus(InvalidParameter); }
status = SetStatus(DllExports::GdipMeasureString( nativeGraphics, string, length, font ? font->nativeFont : NULL, &layoutRect, stringFormat ? stringFormat->nativeFormat : NULL, size ? &boundingBox : NULL, codepointsFitted, linesFilled ));
if (size && status == Ok) { size->Width = boundingBox.Width; size->Height = boundingBox.Height; }
return status; }
Status MeasureString( IN const WCHAR *string, IN INT length, IN const Font *font, IN const PointF &origin, IN const StringFormat *stringFormat, OUT RectF *boundingBox ) const { RectF rect(origin.X, origin.Y, 0.0f, 0.0f);
return SetStatus(DllExports::GdipMeasureString( nativeGraphics, string, length, font ? font->nativeFont : NULL, &rect, stringFormat ? stringFormat->nativeFormat : NULL, boundingBox, NULL, NULL )); }
Status MeasureString( IN const WCHAR *string, IN INT length, IN const Font *font, IN const RectF &layoutRect, OUT RectF *boundingBox ) const { return SetStatus(DllExports::GdipMeasureString( nativeGraphics, string, length, font ? font->nativeFont : NULL, &layoutRect, NULL, boundingBox, NULL, NULL )); }
Status MeasureString( IN const WCHAR *string, IN INT length, IN const Font *font, IN const PointF &origin, OUT RectF *boundingBox ) const { RectF rect(origin.X, origin.Y, 0.0f, 0.0f);
return SetStatus(DllExports::GdipMeasureString( nativeGraphics, string, length, font ? font->nativeFont : NULL, &rect, NULL, boundingBox, NULL, NULL )); }
Status MeasureCharacterRanges( IN const WCHAR *string, IN INT length, IN const Font *font, IN const RectF &layoutRect, IN const StringFormat *stringFormat, IN INT regionCount, OUT Region *regions ) const { if (!regions || regionCount <= 0) { return InvalidParameter; }
GpRegion **nativeRegions = new GpRegion* [regionCount];
if (!nativeRegions) { return OutOfMemory; }
for (INT i = 0; i < regionCount; i++) { nativeRegions[i] = regions[i].nativeRegion; }
Status status = SetStatus(DllExports::GdipMeasureCharacterRanges( nativeGraphics, string, length, font ? font->nativeFont : NULL, layoutRect, stringFormat ? stringFormat->nativeFormat : NULL, regionCount, nativeRegions ));
delete [] nativeRegions;
return status; }
Status DrawDriverString( IN const UINT16 *text, IN INT length, IN const Font *font, IN const Brush *brush, IN const PointF *positions, IN INT flags, IN const Matrix *matrix ) { return SetStatus(DllExports::GdipDrawDriverString( nativeGraphics, text, length, font ? font->nativeFont : NULL, brush ? brush->nativeBrush : NULL, positions, flags, matrix ? matrix->nativeMatrix : NULL )); }
Status MeasureDriverString( IN const UINT16 *text, IN INT length, IN const Font *font, IN const PointF *positions, IN INT flags, IN const Matrix *matrix, OUT RectF *boundingBox ) const { return SetStatus(DllExports::GdipMeasureDriverString( nativeGraphics, text, length, font ? font->nativeFont : NULL, positions, flags, matrix ? matrix->nativeMatrix : NULL, boundingBox )); }
// Draw a cached bitmap on this graphics destination offset by
// x, y. Note this will fail with WrongState if the CachedBitmap
// native format differs from this Graphics.
Status DrawCachedBitmap(IN CachedBitmap *cb, IN INT x, IN INT y) { return SetStatus(DllExports::GdipDrawCachedBitmap( nativeGraphics, cb->nativeCachedBitmap, x, y )); }
Status DrawImage(IN Image* image, IN const PointF& point) { return DrawImage(image, point.X, point.Y); }
Status DrawImage(IN Image* image, IN REAL x, IN REAL y) { return SetStatus(DllExports::GdipDrawImage(nativeGraphics, image ? image->nativeImage : NULL, x, y)); }
Status DrawImage(IN Image* image, IN const RectF& rect) { return DrawImage(image, rect.X, rect.Y, rect.Width, rect.Height); }
Status DrawImage(IN Image* image, IN REAL x, IN REAL y, IN REAL width, IN REAL height) { return SetStatus(DllExports::GdipDrawImageRect(nativeGraphics, image ? image->nativeImage : NULL, x, y, width, height)); }
Status DrawImage(IN Image* image, IN const Point& point) { return DrawImage(image, point.X, point.Y); }
Status DrawImage(IN Image* image, IN INT x, IN INT y) { return SetStatus(DllExports::GdipDrawImageI(nativeGraphics, image ? image->nativeImage : NULL, x, y)); }
Status DrawImage(IN Image* image, IN const Rect& rect) { return DrawImage(image, rect.X, rect.Y, rect.Width, rect.Height); }
Status DrawImage(IN Image* image, IN INT x, IN INT y, IN INT width, IN INT height) { return SetStatus(DllExports::GdipDrawImageRectI(nativeGraphics, image ? image->nativeImage : NULL, x, y, width, height)); }
// Affine Draw Image
// destPoints.length = 3: rect => parallelogram
// destPoints[0] <=> top-left corner of the source rectangle
// destPoints[1] <=> top-right corner
// destPoints[2] <=> bottom-left corner
// destPoints.length = 4: rect => quad
// destPoints[3] <=> bottom-right corner
Status DrawImage(IN Image* image, IN const PointF* destPoints, IN INT count) { if (count != 3 && count != 4) return SetStatus(InvalidParameter);
return SetStatus(DllExports::GdipDrawImagePoints(nativeGraphics, image ? image->nativeImage : NULL, destPoints, count)); }
Status DrawImage(IN Image* image, IN const Point* destPoints, IN INT count) { if (count != 3 && count != 4) return SetStatus(InvalidParameter);
return SetStatus(DllExports::GdipDrawImagePointsI(nativeGraphics, image ? image->nativeImage : NULL, destPoints, count)); }
Status DrawImage(IN Image* image, IN REAL x, IN REAL y, IN REAL srcx, IN REAL srcy, IN REAL srcwidth, IN REAL srcheight, IN Unit srcUnit) { return SetStatus(DllExports::GdipDrawImagePointRect(nativeGraphics, image ? image->nativeImage : NULL, x, y, srcx, srcy, srcwidth, srcheight, srcUnit)); }
Status DrawImage(IN Image* image, IN const RectF& destRect, IN REAL srcx, IN REAL srcy, IN REAL srcwidth, IN REAL srcheight, IN Unit srcUnit, IN const ImageAttributes* imageAttributes = NULL, IN DrawImageAbort callback = NULL, IN VOID* callbackData = NULL) { return SetStatus(DllExports::GdipDrawImageRectRect(nativeGraphics, image ? image->nativeImage : NULL, destRect.X, destRect.Y, destRect.Width, destRect.Height, srcx, srcy, srcwidth, srcheight, srcUnit, imageAttributes ? imageAttributes->nativeImageAttr : NULL, callback, callbackData)); }
Status DrawImage(IN Image* image, IN const PointF* destPoints, IN INT count, IN REAL srcx, IN REAL srcy, IN REAL srcwidth, IN REAL srcheight, IN Unit srcUnit, IN const ImageAttributes* imageAttributes = NULL, IN DrawImageAbort callback = NULL, IN VOID* callbackData = NULL) { return SetStatus(DllExports::GdipDrawImagePointsRect(nativeGraphics, image ? image->nativeImage : NULL, destPoints, count, srcx, srcy, srcwidth, srcheight, srcUnit, imageAttributes ? imageAttributes->nativeImageAttr : NULL, callback, callbackData)); }
Status DrawImage(IN Image* image, IN INT x, IN INT y, IN INT srcx, IN INT srcy, IN INT srcwidth, IN INT srcheight, IN Unit srcUnit) { return SetStatus(DllExports::GdipDrawImagePointRectI(nativeGraphics, image ? image->nativeImage : NULL, x, y, srcx, srcy, srcwidth, srcheight, srcUnit)); }
Status DrawImage(IN Image* image, IN const Rect& destRect, IN INT srcx, IN INT srcy, IN INT srcwidth, IN INT srcheight, IN Unit srcUnit, IN const ImageAttributes* imageAttributes = NULL, IN DrawImageAbort callback = NULL, IN VOID* callbackData = NULL) { return SetStatus(DllExports::GdipDrawImageRectRectI(nativeGraphics, image ? image->nativeImage : NULL, destRect.X, destRect.Y, destRect.Width, destRect.Height, srcx, srcy, srcwidth, srcheight, srcUnit, imageAttributes ? imageAttributes->nativeImageAttr : NULL, callback, callbackData)); }
Status DrawImage(IN Image* image, IN const Point* destPoints, IN INT count, IN INT srcx, IN INT srcy, IN INT srcwidth, IN INT srcheight, IN Unit srcUnit, IN const ImageAttributes* imageAttributes = NULL, IN DrawImageAbort callback = NULL, IN VOID* callbackData = NULL) { return SetStatus(DllExports::GdipDrawImagePointsRectI(nativeGraphics, image ? image->nativeImage : NULL, destPoints, count, srcx, srcy, srcwidth, srcheight, srcUnit, imageAttributes ? imageAttributes->nativeImageAttr : NULL, callback, callbackData)); }
// The following methods are for playing an EMF+ to a graphics
// via the enumeration interface. Each record of the EMF+ is
// sent to the callback (along with the callbackData). Then
// the callback can invoke the Metafile::PlayRecord method
// to play the particular record.
Status EnumerateMetafile( IN const Metafile * metafile, IN const PointF & destPoint, IN EnumerateMetafileProc callback, IN VOID * callbackData = NULL, IN const ImageAttributes * imageAttributes = NULL ) { return SetStatus(DllExports::GdipEnumerateMetafileDestPoint( nativeGraphics, (const GpMetafile *)(metafile ? metafile->nativeImage:NULL), destPoint, callback, callbackData, imageAttributes ? imageAttributes->nativeImageAttr : NULL)); }
Status EnumerateMetafile( IN const Metafile * metafile, IN const Point & destPoint, IN EnumerateMetafileProc callback, IN VOID * callbackData = NULL, IN const ImageAttributes * imageAttributes = NULL ) { return SetStatus(DllExports::GdipEnumerateMetafileDestPointI( nativeGraphics, (const GpMetafile *)(metafile ? metafile->nativeImage:NULL), destPoint, callback, callbackData, imageAttributes ? imageAttributes->nativeImageAttr : NULL)); }
Status EnumerateMetafile( IN const Metafile * metafile, IN const RectF & destRect, IN EnumerateMetafileProc callback, IN VOID * callbackData = NULL, IN const ImageAttributes * imageAttributes = NULL ) { return SetStatus(DllExports::GdipEnumerateMetafileDestRect( nativeGraphics, (const GpMetafile *)(metafile ? metafile->nativeImage:NULL), destRect, callback, callbackData, imageAttributes ? imageAttributes->nativeImageAttr : NULL)); }
Status EnumerateMetafile( IN const Metafile * metafile, IN const Rect & destRect, IN EnumerateMetafileProc callback, IN VOID * callbackData = NULL, IN const ImageAttributes * imageAttributes = NULL ) { return SetStatus(DllExports::GdipEnumerateMetafileDestRectI( nativeGraphics, (const GpMetafile *)(metafile ? metafile->nativeImage:NULL), destRect, callback, callbackData, imageAttributes ? imageAttributes->nativeImageAttr : NULL)); }
Status EnumerateMetafile( IN const Metafile * metafile, IN const PointF * destPoints, IN INT count, IN EnumerateMetafileProc callback, IN VOID * callbackData = NULL, IN const ImageAttributes * imageAttributes = NULL ) { return SetStatus(DllExports::GdipEnumerateMetafileDestPoints( nativeGraphics, (const GpMetafile *)(metafile ? metafile->nativeImage:NULL), destPoints, count, callback, callbackData, imageAttributes ? imageAttributes->nativeImageAttr : NULL)); }
Status EnumerateMetafile( IN const Metafile * metafile, IN const Point * destPoints, IN INT count, IN EnumerateMetafileProc callback, IN VOID * callbackData = NULL, IN const ImageAttributes * imageAttributes = NULL ) { return SetStatus(DllExports::GdipEnumerateMetafileDestPointsI( nativeGraphics, (const GpMetafile *)(metafile ? metafile->nativeImage:NULL), destPoints, count, callback, callbackData, imageAttributes ? imageAttributes->nativeImageAttr : NULL)); }
Status EnumerateMetafile( IN const Metafile * metafile, IN const PointF & destPoint, IN const RectF & srcRect, IN Unit srcUnit, IN EnumerateMetafileProc callback, IN VOID * callbackData = NULL, IN const ImageAttributes * imageAttributes = NULL ) { return SetStatus(DllExports::GdipEnumerateMetafileSrcRectDestPoint( nativeGraphics, (const GpMetafile *)(metafile ? metafile->nativeImage:NULL), destPoint, srcRect, srcUnit, callback, callbackData, imageAttributes ? imageAttributes->nativeImageAttr : NULL)); }
Status EnumerateMetafile( IN const Metafile * metafile, IN const Point & destPoint, IN const Rect & srcRect, IN Unit srcUnit, IN EnumerateMetafileProc callback, IN VOID * callbackData = NULL, IN const ImageAttributes * imageAttributes = NULL ) { return SetStatus(DllExports::GdipEnumerateMetafileSrcRectDestPointI( nativeGraphics, (const GpMetafile *)(metafile ? metafile->nativeImage:NULL), destPoint, srcRect, srcUnit, callback, callbackData, imageAttributes ? imageAttributes->nativeImageAttr : NULL)); }
Status EnumerateMetafile( IN const Metafile * metafile, IN const RectF & destRect, IN const RectF & srcRect, IN Unit srcUnit, IN EnumerateMetafileProc callback, IN VOID * callbackData = NULL, IN const ImageAttributes * imageAttributes = NULL ) { return SetStatus(DllExports::GdipEnumerateMetafileSrcRectDestRect( nativeGraphics, (const GpMetafile *)(metafile ? metafile->nativeImage:NULL), destRect, srcRect, srcUnit, callback, callbackData, imageAttributes ? imageAttributes->nativeImageAttr : NULL)); }
Status EnumerateMetafile( IN const Metafile * metafile, IN const Rect & destRect, IN const Rect & srcRect, IN Unit srcUnit, IN EnumerateMetafileProc callback, IN VOID * callbackData = NULL, IN const ImageAttributes * imageAttributes = NULL ) { return SetStatus(DllExports::GdipEnumerateMetafileSrcRectDestRectI( nativeGraphics, (const GpMetafile *)(metafile ? metafile->nativeImage:NULL), destRect, srcRect, srcUnit, callback, callbackData, imageAttributes ? imageAttributes->nativeImageAttr : NULL)); }
Status EnumerateMetafile( IN const Metafile * metafile, IN const PointF * destPoints, IN INT count, IN const RectF & srcRect, IN Unit srcUnit, IN EnumerateMetafileProc callback, IN VOID * callbackData = NULL, IN const ImageAttributes * imageAttributes = NULL ) { return SetStatus(DllExports::GdipEnumerateMetafileSrcRectDestPoints( nativeGraphics, (const GpMetafile *)(metafile ? metafile->nativeImage:NULL), destPoints, count, srcRect, srcUnit, callback, callbackData, imageAttributes ? imageAttributes->nativeImageAttr : NULL)); }
Status EnumerateMetafile( IN const Metafile * metafile, IN const Point * destPoints, IN INT count, IN const Rect & srcRect, IN Unit srcUnit, IN EnumerateMetafileProc callback, IN VOID * callbackData = NULL, IN const ImageAttributes * imageAttributes = NULL ) { return SetStatus(DllExports::GdipEnumerateMetafileSrcRectDestPointsI( nativeGraphics, (const GpMetafile *)(metafile ? metafile->nativeImage:NULL), destPoints, count, srcRect, srcUnit, callback, callbackData, imageAttributes ? imageAttributes->nativeImageAttr : NULL)); } Status SetClip(IN const Graphics* g, IN CombineMode combineMode = CombineModeReplace) { return SetStatus(DllExports::GdipSetClipGraphics(nativeGraphics, g->nativeGraphics, combineMode)); }
Status SetClip(IN const RectF& rect, IN CombineMode combineMode = CombineModeReplace) { return SetStatus(DllExports::GdipSetClipRect(nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, combineMode)); }
Status SetClip(IN const Rect& rect, IN CombineMode combineMode = CombineModeReplace) { return SetStatus(DllExports::GdipSetClipRectI(nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, combineMode)); }
Status SetClip(IN const GraphicsPath* path, IN CombineMode combineMode = CombineModeReplace) { return SetStatus(DllExports::GdipSetClipPath(nativeGraphics, path->nativePath, combineMode)); }
Status SetClip(IN const Region* region, IN CombineMode combineMode = CombineModeReplace) { return SetStatus(DllExports::GdipSetClipRegion(nativeGraphics, region->nativeRegion, combineMode)); }
// This is different than the other SetClip methods because it assumes
// that the HRGN is already in device units, so it doesn't transform
// the coordinates in the HRGN.
Status SetClip(IN HRGN hRgn, IN CombineMode combineMode = CombineModeReplace) { return SetStatus(DllExports::GdipSetClipHrgn(nativeGraphics, hRgn, combineMode)); }
Status IntersectClip(IN const RectF& rect) { return SetStatus(DllExports::GdipSetClipRect(nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, CombineModeIntersect)); }
Status IntersectClip(IN const Rect& rect) { return SetStatus(DllExports::GdipSetClipRectI(nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, CombineModeIntersect)); }
Status IntersectClip(IN const Region* region) { return SetStatus(DllExports::GdipSetClipRegion(nativeGraphics, region->nativeRegion, CombineModeIntersect)); }
Status ExcludeClip(IN const RectF& rect) { return SetStatus(DllExports::GdipSetClipRect(nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, CombineModeExclude)); }
Status ExcludeClip(IN const Rect& rect) { return SetStatus(DllExports::GdipSetClipRectI(nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, CombineModeExclude)); }
Status ExcludeClip(IN const Region* region) { return SetStatus(DllExports::GdipSetClipRegion(nativeGraphics, region->nativeRegion, CombineModeExclude)); }
Status ResetClip() { return SetStatus(DllExports::GdipResetClip(nativeGraphics)); }
Status TranslateClip(IN REAL dx, IN REAL dy) { return SetStatus(DllExports::GdipTranslateClip(nativeGraphics, dx, dy)); }
Status TranslateClip(IN INT dx, IN INT dy) { return SetStatus(DllExports::GdipTranslateClipI(nativeGraphics, dx, dy)); }
Status GetClip(OUT Region* region) const { return SetStatus(DllExports::GdipGetClip(nativeGraphics, region->nativeRegion)); }
Status GetClipBounds(OUT RectF* rect) const { return SetStatus(DllExports::GdipGetClipBounds(nativeGraphics, rect)); }
Status GetClipBounds(OUT Rect* rect) const { return SetStatus(DllExports::GdipGetClipBoundsI(nativeGraphics, rect)); }
BOOL IsClipEmpty() const { BOOL booln = FALSE;
SetStatus(DllExports::GdipIsClipEmpty(nativeGraphics, &booln));
return booln; }
Status GetVisibleClipBounds(OUT RectF *rect) const {
return SetStatus(DllExports::GdipGetVisibleClipBounds(nativeGraphics, rect)); }
Status GetVisibleClipBounds(OUT Rect *rect) const { return SetStatus(DllExports::GdipGetVisibleClipBoundsI(nativeGraphics, rect)); }
BOOL IsVisibleClipEmpty() const { BOOL booln = FALSE;
SetStatus(DllExports::GdipIsVisibleClipEmpty(nativeGraphics, &booln));
return booln; }
BOOL IsVisible(IN INT x, IN INT y) const { return IsVisible(Point(x,y)); }
BOOL IsVisible(IN const Point& point) const { BOOL booln = FALSE;
SetStatus(DllExports::GdipIsVisiblePointI(nativeGraphics, point.X, point.Y, &booln));
return booln; }
BOOL IsVisible(IN INT x, IN INT y, IN INT width, IN INT height) const { return IsVisible(Rect(x, y, width, height)); }
BOOL IsVisible(IN const Rect& rect) const {
BOOL booln = TRUE;
SetStatus(DllExports::GdipIsVisibleRectI(nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, &booln)); return booln; }
BOOL IsVisible(IN REAL x, IN REAL y) const { return IsVisible(PointF(x, y)); }
BOOL IsVisible(IN const PointF& point) const { BOOL booln = FALSE;
SetStatus(DllExports::GdipIsVisiblePoint(nativeGraphics, point.X, point.Y, &booln));
return booln; }
BOOL IsVisible(IN REAL x, IN REAL y, IN REAL width, IN REAL height) const { return IsVisible(RectF(x, y, width, height)); }
BOOL IsVisible(IN const RectF& rect) const { BOOL booln = TRUE;
SetStatus(DllExports::GdipIsVisibleRect(nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, &booln)); return booln; }
GraphicsState Save() const { GraphicsState gstate;
SetStatus(DllExports::GdipSaveGraphics(nativeGraphics, &gstate));
return gstate; }
Status Restore(IN GraphicsState gstate) { return SetStatus(DllExports::GdipRestoreGraphics(nativeGraphics, gstate)); }
GraphicsContainer BeginContainer(IN const RectF &dstrect, IN const RectF &srcrect, IN Unit unit) { GraphicsContainer state;
SetStatus(DllExports::GdipBeginContainer(nativeGraphics, &dstrect, &srcrect, unit, &state));
return state; }
GraphicsContainer BeginContainer(IN const Rect &dstrect, IN const Rect &srcrect, IN Unit unit) { GraphicsContainer state;
SetStatus(DllExports::GdipBeginContainerI(nativeGraphics, &dstrect, &srcrect, unit, &state));
return state; }
GraphicsContainer BeginContainer() { GraphicsContainer state;
SetStatus(DllExports::GdipBeginContainer2(nativeGraphics, &state));
return state; }
Status EndContainer(IN GraphicsContainer state) { return SetStatus(DllExports::GdipEndContainer(nativeGraphics, state)); }
// Only valid when recording metafiles.
Status AddMetafileComment(IN const BYTE * data, IN UINT sizeData) { return SetStatus(DllExports::GdipComment(nativeGraphics, sizeData, data)); }
static HPALETTE GetHalftonePalette() { return DllExports::GdipCreateHalftonePalette(); }
Status GetLastStatus() const { Status lastStatus = lastResult; lastResult = Ok;
return lastStatus; }
private: Graphics(const Graphics &); Graphics& operator=(const Graphics &);
protected: Graphics(GpGraphics* graphics) { lastResult = Ok; SetNativeGraphics(graphics); }
VOID SetNativeGraphics(GpGraphics *graphics) { this->nativeGraphics = graphics; }
Status SetStatus(Status status) const { if (status != Ok) return (lastResult = status); else return status; }
GpGraphics* GetNativeGraphics() const { return this->nativeGraphics; }
GpPen* GetNativePen(const Pen* pen) { return pen->nativePen; }
protected: GpGraphics* nativeGraphics; mutable Status lastResult;
};
//----------------------------------------------------------------------------
// Implementation of GraphicsPath methods that use Graphics
//----------------------------------------------------------------------------
// The GetBounds rectangle may not be the tightest bounds.
inline Status GraphicsPath::GetBounds( OUT RectF* bounds, IN const Matrix* matrix, IN const Pen* pen) const { GpMatrix* nativeMatrix = NULL; GpPen* nativePen = NULL;
if (matrix) nativeMatrix = matrix->nativeMatrix;
if (pen) nativePen = pen->nativePen;
return SetStatus(DllExports::GdipGetPathWorldBounds(nativePath, bounds, nativeMatrix, nativePen)); }
inline Status GraphicsPath::GetBounds( OUT Rect* bounds, IN const Matrix* matrix, IN const Pen* pen ) const { GpMatrix* nativeMatrix = NULL; GpPen* nativePen = NULL;
if (matrix) nativeMatrix = matrix->nativeMatrix;
if (pen) nativePen = pen->nativePen;
return SetStatus(DllExports::GdipGetPathWorldBoundsI(nativePath, bounds, nativeMatrix, nativePen)); }
inline BOOL GraphicsPath::IsVisible( IN REAL x, IN REAL y, IN const Graphics* g) const { BOOL booln = FALSE;
GpGraphics* nativeGraphics = NULL;
if (g) nativeGraphics = g->nativeGraphics;
SetStatus(DllExports::GdipIsVisiblePathPoint(nativePath, x, y, nativeGraphics, &booln)); return booln; }
inline BOOL GraphicsPath::IsVisible( IN INT x, IN INT y, IN const Graphics* g) const { BOOL booln = FALSE;
GpGraphics* nativeGraphics = NULL;
if (g) nativeGraphics = g->nativeGraphics;
SetStatus(DllExports::GdipIsVisiblePathPointI(nativePath, x, y, nativeGraphics, &booln)); return booln; }
inline BOOL GraphicsPath::IsOutlineVisible( IN REAL x, IN REAL y, IN const Pen* pen, IN const Graphics* g) const { BOOL booln = FALSE;
GpGraphics* nativeGraphics = NULL; GpPen* nativePen = NULL;
if(g) nativeGraphics = g->nativeGraphics; if(pen) nativePen = pen->nativePen;
SetStatus(DllExports::GdipIsOutlineVisiblePathPoint(nativePath, x, y, nativePen, nativeGraphics, &booln)); return booln; }
inline BOOL GraphicsPath::IsOutlineVisible( IN INT x, IN INT y, IN const Pen* pen, IN const Graphics* g) const { BOOL booln = FALSE;
GpGraphics* nativeGraphics = NULL; GpPen* nativePen = NULL;
if(g) nativeGraphics = g->nativeGraphics; if(pen) nativePen = pen->nativePen;
SetStatus(DllExports::GdipIsOutlineVisiblePathPointI(nativePath, x, y, nativePen, nativeGraphics, &booln)); return booln; }
#endif
|