https://git.reactos.org/?p=reactos.git;a=commitdiff;h=8968b142355e3e84cb26f2...
commit 8968b142355e3e84cb26f241f550fc232dee1d1b Author: Katayama Hirofumi MZ katayama.hirofumi.mz@gmail.com AuthorDate: Tue Dec 31 20:40:16 2019 +0900 Commit: GitHub noreply@github.com CommitDate: Tue Dec 31 20:40:16 2019 +0900
[SDK][INCLUDE] Improve Gdiplus::Graphics (#2211)
CORE-16585 --- sdk/include/psdk/gdiplusbrush.h | 7 + sdk/include/psdk/gdiplusgraphics.h | 463 +++++++++++++++++++----------- sdk/include/psdk/gdiplusheaders.h | 14 + sdk/include/psdk/gdiplusimageattributes.h | 7 + sdk/include/psdk/gdiplusmatrix.h | 7 + sdk/include/psdk/gdipluspath.h | 8 + sdk/include/psdk/gdipluspen.h | 7 + 7 files changed, 339 insertions(+), 174 deletions(-)
diff --git a/sdk/include/psdk/gdiplusbrush.h b/sdk/include/psdk/gdiplusbrush.h index 3ee939bb30e..2416135294e 100644 --- a/sdk/include/psdk/gdiplusbrush.h +++ b/sdk/include/psdk/gdiplusbrush.h @@ -93,6 +93,13 @@ class Brush : public GdiplusBase Brush(const Brush &); Brush & operator=(const Brush &); + + // get native + friend inline GpBrush *& + getNat(const Brush *brush) + { + return const_cast<Brush *>(brush)->nativeBrush; + } };
class HatchBrush : public Brush diff --git a/sdk/include/psdk/gdiplusgraphics.h b/sdk/include/psdk/gdiplusgraphics.h index a573577f5d3..f34c1093cc5 100644 --- a/sdk/include/psdk/gdiplusgraphics.h +++ b/sdk/include/psdk/gdiplusgraphics.h @@ -27,6 +27,31 @@ class Font; class GraphicsPath; class Metafile;
+// get native +GpImage *& +getNat(const Image *image); + +GpPen *& +getNat(const Pen *pen); + +GpBrush *& +getNat(const Brush *brush); + +GpCachedBitmap *& +getNat(const CachedBitmap *cb); + +GpImageAttributes *& +getNat(const ImageAttributes *ia); + +GpRegion *& +getNat(const Region *region); + +GpMatrix *& +getNat(const Matrix *matrix); + +GpPath *& +getNat(const GraphicsPath *path); + class Graphics : public GdiplusBase { friend class Region; @@ -37,21 +62,45 @@ class Graphics : public GdiplusBase public: Graphics(Image *image) { + GpGraphics *graphics = NULL; + if (image) + { + lastStatus = DllExports::GdipGetImageGraphicsContext(getNat(image), &graphics); + } + SetNativeGraphics(graphics); }
Graphics(HDC hdc) { GpGraphics *graphics = NULL; - status = DllExports::GdipCreateFromHDC(hdc, &graphics); - SetGraphics(graphics); + lastStatus = DllExports::GdipCreateFromHDC(hdc, &graphics); + SetNativeGraphics(graphics); }
Graphics(HDC hdc, HANDLE hdevice) { + GpGraphics *graphics = NULL; + lastStatus = DllExports::GdipCreateFromHDC2(hdc, hdevice, &graphics); + SetNativeGraphics(graphics); + } + + Graphics(HWND hwnd, BOOL icm = FALSE) + { + GpGraphics *graphics = NULL; + if (icm) + { + lastStatus = DllExports::GdipCreateFromHWNDICM(hwnd, &graphics); + } + else + { + lastStatus = DllExports::GdipCreateFromHWND(hwnd, &graphics); + } + SetNativeGraphics(graphics); }
- Graphics(HWND hwnd, BOOL icm) + ~Graphics() { + DllExports::GdipDeleteGraphics(nativeGraphics); }
Status @@ -60,7 +109,8 @@ class Graphics : public GdiplusBase return SetStatus(DllExports::GdipComment(nativeGraphics, sizeData, data)); }
- GraphicsContainer BeginContainer(VOID) + GraphicsContainer + BeginContainer() { return GraphicsContainer(); } @@ -87,142 +137,138 @@ class Graphics : public GdiplusBase DrawArc(const Pen *pen, const Rect &rect, REAL startAngle, REAL sweepAngle) { return SetStatus(DllExports::GdipDrawArcI( - nativeGraphics, pen ? pen->nativePen : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, - sweepAngle)); + nativeGraphics, pen ? getNat(pen) : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)); }
Status DrawArc(const Pen *pen, const RectF &rect, REAL startAngle, REAL sweepAngle) { return SetStatus(DllExports::GdipDrawArcI( - nativeGraphics, pen ? pen->nativePen : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, - sweepAngle)); + nativeGraphics, pen ? getNat(pen) : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)); }
Status DrawArc(const Pen *pen, REAL x, REAL y, REAL width, REAL height, REAL startAngle, REAL sweepAngle) { return SetStatus(DllExports::GdipDrawArc( - nativeGraphics, pen ? pen->nativePen : NULL, x, y, width, height, startAngle, sweepAngle)); + nativeGraphics, pen ? getNat(pen) : 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 SetStatus(DllExports::GdipDrawArcI( - nativeGraphics, pen ? pen->nativePen : NULL, x, y, width, height, startAngle, sweepAngle)); + nativeGraphics, pen ? getNat(pen) : NULL, x, y, width, height, startAngle, sweepAngle)); }
Status DrawBezier(const Pen *pen, const Point &pt1, const Point &pt2, const Point &pt3, const Point &pt4) { return SetStatus(DllExports::GdipDrawBezierI( - nativeGraphics, pen ? pen->nativePen : NULL, pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y)); + nativeGraphics, pen ? getNat(pen) : NULL, pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y)); }
Status DrawBezier(const Pen *pen, const PointF &pt1, const PointF &pt2, const PointF &pt3, const PointF &pt4) { return SetStatus(DllExports::GdipDrawBezier( - nativeGraphics, pen ? pen->nativePen : NULL, pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y)); + nativeGraphics, pen ? getNat(pen) : NULL, pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y)); }
Status DrawBezier(const Pen *pen, REAL x1, REAL y1, REAL x2, REAL y2, REAL x3, REAL y3, REAL x4, REAL y4) { return SetStatus( - DllExports::GdipDrawBezier(nativeGraphics, pen ? pen->nativePen : NULL, x1, y1, x2, y2, x3, y3, x4, y4)); + DllExports::GdipDrawBezier(nativeGraphics, pen ? getNat(pen) : 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 SetStatus( - DllExports::GdipDrawBezierI(nativeGraphics, pen ? pen->nativePen : NULL, x1, y1, x2, y2, x3, y3, x4, y4)); + DllExports::GdipDrawBezierI(nativeGraphics, pen ? getNat(pen) : NULL, x1, y1, x2, y2, x3, y3, x4, y4)); }
Status DrawBeziers(const Pen *pen, const Point *points, INT count) { - return SetStatus(DllExports::GdipDrawBeziersI(nativeGraphics, pen ? pen->nativePen : NULL, points, count)); + return SetStatus(DllExports::GdipDrawBeziersI(nativeGraphics, pen ? getNat(pen) : NULL, points, count)); }
Status DrawBeziers(const Pen *pen, const PointF *points, INT count) { - return SetStatus(DllExports::GdipDrawBeziers(nativeGraphics, pen ? pen->nativePen : NULL, points, count)); + return SetStatus(DllExports::GdipDrawBeziers(nativeGraphics, pen ? getNat(pen) : NULL, points, count)); }
Status DrawCachedBitmap(CachedBitmap *cb, INT x, INT y) { - return NotImplemented; + return SetStatus(DllExports::GdipDrawCachedBitmap(nativeGraphics, getNat(cb), x, y)); }
Status DrawClosedCurve(const Pen *pen, const Point *points, INT count) { - return SetStatus(DllExports::GdipDrawClosedCurveI(nativeGraphics, pen ? pen->nativePen : NULL, points, count)); + return SetStatus(DllExports::GdipDrawClosedCurveI(nativeGraphics, pen ? getNat(pen) : NULL, points, count)); }
Status DrawClosedCurve(const Pen *pen, const PointF *points, INT count) { - return SetStatus(DllExports::GdipDrawClosedCurve(nativeGraphics, pen ? pen->nativePen : NULL, points, count)); + return SetStatus(DllExports::GdipDrawClosedCurve(nativeGraphics, pen ? getNat(pen) : NULL, points, count)); }
Status DrawClosedCurve(const Pen *pen, const PointF *points, INT count, REAL tension) { return SetStatus( - DllExports::GdipDrawClosedCurve2(nativeGraphics, pen ? pen->nativePen : NULL, points, count, tension)); + DllExports::GdipDrawClosedCurve2(nativeGraphics, pen ? getNat(pen) : NULL, points, count, tension)); }
Status DrawClosedCurve(const Pen *pen, const Point *points, INT count, REAL tension) { return SetStatus( - DllExports::GdipDrawClosedCurve2I(nativeGraphics, pen ? pen->nativePen : NULL, points, count, tension)); + DllExports::GdipDrawClosedCurve2I(nativeGraphics, pen ? getNat(pen) : NULL, points, count, tension)); }
Status DrawCurve(const Pen *pen, const Point *points, INT count) { - return SetStatus(DllExports::GdipDrawCurveI(nativeGraphics, pen ? pen->nativePen : NULL, points, count)); + return SetStatus(DllExports::GdipDrawCurveI(nativeGraphics, pen ? getNat(pen) : NULL, points, count)); }
Status DrawCurve(const Pen *pen, const PointF *points, INT count) { - return SetStatus(DllExports::GdipDrawCurve(nativeGraphics, pen ? pen->nativePen : NULL, points, count)); + return SetStatus(DllExports::GdipDrawCurve(nativeGraphics, pen ? getNat(pen) : NULL, points, count)); }
Status DrawCurve(const Pen *pen, const PointF *points, INT count, REAL tension) { - return SetStatus( - DllExports::GdipDrawCurve2(nativeGraphics, pen ? pen->nativePen : NULL, points, count, tension)); + return SetStatus(DllExports::GdipDrawCurve2(nativeGraphics, pen ? getNat(pen) : NULL, points, count, tension)); }
Status DrawCurve(const Pen *pen, const Point *points, INT count, INT offset, INT numberOfSegments, REAL tension) { return SetStatus(DllExports::GdipDrawCurve3I( - nativeGraphics, pen ? pen->nativePen : NULL, points, count, offset, numberOfSegments, tension)); + nativeGraphics, pen ? getNat(pen) : NULL, points, count, offset, numberOfSegments, tension)); }
Status DrawCurve(const Pen *pen, const PointF *points, INT count, INT offset, INT numberOfSegments, REAL tension) { return SetStatus(DllExports::GdipDrawCurve3( - nativeGraphics, pen ? pen->nativePen : NULL, points, count, offset, numberOfSegments, tension)); + nativeGraphics, pen ? getNat(pen) : NULL, points, count, offset, numberOfSegments, tension)); }
Status DrawCurve(const Pen *pen, const Point *points, INT count, REAL tension) { - return SetStatus( - DllExports::GdipDrawCurve2I(nativeGraphics, pen ? pen->nativePen : NULL, points, count, tension)); + return SetStatus(DllExports::GdipDrawCurve2I(nativeGraphics, pen ? getNat(pen) : NULL, points, count, tension)); }
Status @@ -242,81 +288,90 @@ class Graphics : public GdiplusBase DrawEllipse(const Pen *pen, const Rect &rect) { return SetStatus(DllExports::GdipDrawEllipseI( - nativeGraphics, pen ? pen->nativePen : NULL, rect.X, rect.Y, rect.Width, rect.Height)); + nativeGraphics, pen ? getNat(pen) : NULL, rect.X, rect.Y, rect.Width, rect.Height)); }
Status DrawEllipse(const Pen *pen, REAL x, REAL y, REAL width, REAL height) { - return SetStatus(DllExports::GdipDrawEllipse(nativeGraphics, pen ? pen->nativePen : NULL, x, y, width, height)); + return SetStatus(DllExports::GdipDrawEllipse(nativeGraphics, pen ? getNat(pen) : NULL, x, y, width, height)); }
Status DrawEllipse(const Pen *pen, const RectF &rect) { return SetStatus(DllExports::GdipDrawEllipse( - nativeGraphics, pen ? pen->nativePen : NULL, rect.X, rect.Y, rect.Width, rect.Height)); + nativeGraphics, pen ? getNat(pen) : NULL, rect.X, rect.Y, rect.Width, rect.Height)); }
Status DrawEllipse(const Pen *pen, INT x, INT y, INT width, INT height) { - return SetStatus( - DllExports::GdipDrawEllipseI(nativeGraphics, pen ? pen->nativePen : NULL, x, y, width, height)); + return SetStatus(DllExports::GdipDrawEllipseI(nativeGraphics, pen ? getNat(pen) : NULL, x, y, width, height)); }
Status DrawImage(Image *image, const Point *destPoints, INT count) { - return NotImplemented; + if (count != 3 && count != 4) + return SetStatus(InvalidParameter); + + return SetStatus( + DllExports::GdipDrawImagePointsI(nativeGraphics, image ? getNat(image) : NULL, destPoints, count)); }
Status DrawImage(Image *image, INT x, INT y) { - return NotImplemented; + return SetStatus(DllExports::GdipDrawImageI(nativeGraphics, image ? getNat(image) : NULL, x, y)); }
Status DrawImage(Image *image, const Point &point) { - return NotImplemented; + return DrawImage(image, point.X, point.Y); }
Status DrawImage(Image *image, REAL x, REAL y) { - return NotImplemented; + return SetStatus(DllExports::GdipDrawImage(nativeGraphics, image ? getNat(image) : NULL, x, y)); }
Status DrawImage(Image *image, const PointF &point) { - return NotImplemented; + return DrawImage(image, point.X, point.Y); }
Status DrawImage(Image *image, const PointF *destPoints, INT count) { - return NotImplemented; + if (count != 3 && count != 4) + return SetStatus(InvalidParameter); + + return SetStatus( + DllExports::GdipDrawImagePoints(nativeGraphics, image ? getNat(image) : NULL, destPoints, count)); }
Status DrawImage(Image *image, REAL x, REAL y, REAL srcx, REAL srcy, REAL srcwidth, REAL srcheight, Unit srcUnit) { - return NotImplemented; + return SetStatus(DllExports::GdipDrawImagePointRect( + nativeGraphics, image ? getNat(image) : NULL, x, y, srcx, srcy, srcwidth, srcheight, srcUnit)); }
Status DrawImage(Image *image, const RectF &rect) { - return NotImplemented; + return DrawImage(image, rect.X, rect.Y, rect.Width, rect.Height); }
Status DrawImage(Image *image, INT x, INT y, INT width, INT height) { - return NotImplemented; + return SetStatus( + DllExports::GdipDrawImageRectI(nativeGraphics, image ? getNat(image) : NULL, x, y, width, height)); }
Status @@ -333,7 +388,9 @@ class Graphics : public GdiplusBase DrawImageAbort callback, VOID *callbackData) { - return NotImplemented; + return SetStatus(DllExports::GdipDrawImagePointsRect( + nativeGraphics, image ? getNat(image) : NULL, destPoints, count, srcx, srcy, srcwidth, srcheight, srcUnit, + imageAttributes ? getNat(imageAttributes) : NULL, callback, callbackData)); }
Status @@ -345,11 +402,14 @@ class Graphics : public GdiplusBase INT srcwidth, INT srcheight, Unit srcUnit, - ImageAttributes *imageAttributes, - DrawImageAbort callback, - VOID *callbackData) + const ImageAttributes *imageAttributes = NULL, + DrawImageAbort callback = NULL, + VOID *callbackData = NULL) { - return NotImplemented; + return SetStatus(DllExports::GdipDrawImageRectRectI( + nativeGraphics, image ? getNat(image) : NULL, destRect.X, destRect.Y, destRect.Width, destRect.Height, srcx, + srcy, srcwidth, srcheight, srcUnit, imageAttributes ? getNat(imageAttributes) : NULL, callback, + callbackData)); }
Status @@ -362,29 +422,33 @@ class Graphics : public GdiplusBase INT srcwidth, INT srcheight, Unit srcUnit, - ImageAttributes *imageAttributes, - DrawImageAbort callback, - VOID *callbackData) + ImageAttributes *imageAttributes = NULL, + DrawImageAbort callback = NULL, + VOID *callbackData = NULL) { - return NotImplemented; + return SetStatus(DllExports::GdipDrawImagePointsRectI( + nativeGraphics, image ? getNat(image) : NULL, destPoints, count, srcx, srcy, srcwidth, srcheight, srcUnit, + imageAttributes ? getNat(imageAttributes) : NULL, callback, callbackData)); }
Status DrawImage(Image *image, REAL x, REAL y, REAL width, REAL height) { - return NotImplemented; + return SetStatus( + DllExports::GdipDrawImageRect(nativeGraphics, image ? getNat(image) : NULL, x, y, width, height)); }
Status DrawImage(Image *image, const Rect &rect) { - return NotImplemented; + return DrawImage(image, rect.X, rect.Y, rect.Width, rect.Height); }
Status DrawImage(Image *image, INT x, INT y, INT srcx, INT srcy, INT srcwidth, INT srcheight, Unit srcUnit) { - return NotImplemented; + return SetStatus(DllExports::GdipDrawImagePointRectI( + nativeGraphics, image ? getNat(image) : NULL, x, y, srcx, srcy, srcwidth, srcheight, srcUnit)); }
Status @@ -396,137 +460,137 @@ class Graphics : public GdiplusBase REAL srcwidth, REAL srcheight, Unit srcUnit, - ImageAttributes *imageAttributes, - DrawImageAbort callback, - VOID *callbackData) + ImageAttributes *imageAttributes = NULL, + DrawImageAbort callback = NULL, + VOID *callbackData = NULL) { - return NotImplemented; + return SetStatus(DllExports::GdipDrawImageRectRect( + nativeGraphics, image ? getNat(image) : NULL, destRect.X, destRect.Y, destRect.Width, destRect.Height, srcx, + srcy, srcwidth, srcheight, srcUnit, imageAttributes ? getNat(imageAttributes) : NULL, callback, + callbackData)); }
Status DrawLine(const Pen *pen, const Point &pt1, const Point &pt2) { return SetStatus( - DllExports::GdipDrawLineI(nativeGraphics, pen ? pen->nativePen : NULL, pt1.X, pt1.Y, pt2.X, pt2.Y)); + DllExports::GdipDrawLineI(nativeGraphics, pen ? getNat(pen) : NULL, pt1.X, pt1.Y, pt2.X, pt2.Y)); }
Status DrawLine(const Pen *pen, const PointF &pt1, const Point &pt2) { return SetStatus( - DllExports::GdipDrawLine(nativeGraphics, pen ? pen->nativePen : NULL, pt1.X, pt1.Y, pt2.X, pt2.Y)); + DllExports::GdipDrawLine(nativeGraphics, pen ? getNat(pen) : NULL, pt1.X, pt1.Y, pt2.X, pt2.Y)); }
Status DrawLine(const Pen *pen, REAL x1, REAL y1, REAL x2, REAL y2) { - return SetStatus(DllExports::GdipDrawLine(nativeGraphics, pen ? pen->nativePen : NULL, x1, y1, x2, y2)); + return SetStatus(DllExports::GdipDrawLine(nativeGraphics, pen ? getNat(pen) : NULL, x1, y1, x2, y2)); }
Status DrawLine(const Pen *pen, INT x1, INT y1, INT x2, INT y2) { - return SetStatus(DllExports::GdipDrawLine(nativeGraphics, pen ? pen->nativePen : NULL, x1, y1, x2, y2)); + return SetStatus(DllExports::GdipDrawLine(nativeGraphics, pen ? getNat(pen) : NULL, x1, y1, x2, y2)); }
Status DrawLines(const Pen *pen, const Point *points, INT count) { - return SetStatus(DllExports::GdipDrawLinesI(nativeGraphics, pen ? pen->nativePen : NULL, points, count)); + return SetStatus(DllExports::GdipDrawLinesI(nativeGraphics, pen ? getNat(pen) : NULL, points, count)); }
Status DrawLines(const Pen *pen, const PointF *points, INT count) { - return SetStatus(DllExports::GdipDrawLines(nativeGraphics, pen ? pen->nativePen : NULL, points, count)); + return SetStatus(DllExports::GdipDrawLines(nativeGraphics, pen ? getNat(pen) : NULL, points, count)); }
Status DrawPath(const Pen *pen, const GraphicsPath *path) { - return NotImplemented; + return SetStatus( + DllExports::GdipDrawPath(nativeGraphics, pen ? getNat(pen) : NULL, path ? getNat(path) : NULL)); }
Status DrawPie(const Pen *pen, const Rect &rect, REAL startAngle, REAL sweepAngle) { return SetStatus(DllExports::GdipDrawPieI( - nativeGraphics, pen ? pen->nativePen : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, - sweepAngle)); + nativeGraphics, pen ? getNat(pen) : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)); }
Status DrawPie(const Pen *pen, INT x, INT y, INT width, INT height, REAL startAngle, REAL sweepAngle) { return SetStatus(DllExports::GdipDrawPieI( - nativeGraphics, pen ? pen->nativePen : NULL, x, y, width, height, startAngle, sweepAngle)); + nativeGraphics, pen ? getNat(pen) : NULL, x, y, width, height, startAngle, sweepAngle)); }
Status DrawPie(const Pen *pen, REAL x, REAL y, REAL width, REAL height, REAL startAngle, REAL sweepAngle) { return SetStatus(DllExports::GdipDrawPie( - nativeGraphics, pen ? pen->nativePen : NULL, x, y, width, height, startAngle, sweepAngle)); + nativeGraphics, pen ? getNat(pen) : NULL, x, y, width, height, startAngle, sweepAngle)); }
Status DrawPie(const Pen *pen, const RectF &rect, REAL startAngle, REAL sweepAngle) { return SetStatus(DllExports::GdipDrawPie( - nativeGraphics, pen ? pen->nativePen : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, - sweepAngle)); + nativeGraphics, pen ? getNat(pen) : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)); }
Status DrawPolygon(const Pen *pen, const Point *points, INT count) { - return SetStatus(DllExports::GdipDrawPolygonI(nativeGraphics, pen ? pen->nativePen : NULL, points, count)); + return SetStatus(DllExports::GdipDrawPolygonI(nativeGraphics, pen ? getNat(pen) : NULL, points, count)); }
Status DrawPolygon(const Pen *pen, const PointF *points, INT count) { - return SetStatus(DllExports::GdipDrawPolygon(nativeGraphics, pen ? pen->nativePen : NULL, points, count)); + return SetStatus(DllExports::GdipDrawPolygon(nativeGraphics, pen ? getNat(pen) : NULL, points, count)); }
Status DrawRectangle(const Pen *pen, const Rect &rect) { return SetStatus(DllExports::GdipDrawRectangleI( - nativeGraphics, pen ? pen->nativePen : NULL, rect.X, rect.Y, rect.Width, rect.Height)); + nativeGraphics, pen ? getNat(pen) : NULL, rect.X, rect.Y, rect.Width, rect.Height)); }
Status DrawRectangle(const Pen *pen, INT x, INT y, INT width, INT height) { - return SetStatus( - DllExports::GdipDrawRectangleI(nativeGraphics, pen ? pen->nativePen : NULL, x, y, width, height)); + return SetStatus(DllExports::GdipDrawRectangleI(nativeGraphics, pen ? getNat(pen) : NULL, x, y, width, height)); }
Status DrawRectangle(const Pen *pen, REAL x, REAL y, REAL width, REAL height) { - return SetStatus( - DllExports::GdipDrawRectangle(nativeGraphics, pen ? pen->nativePen : NULL, x, y, width, height)); + return SetStatus(DllExports::GdipDrawRectangle(nativeGraphics, pen ? getNat(pen) : NULL, x, y, width, height)); }
Status DrawRectangle(const Pen *pen, const RectF &rect) { return SetStatus(DllExports::GdipDrawRectangleI( - nativeGraphics, pen ? pen->nativePen : NULL, rect.X, rect.Y, rect.Width, rect.Height)); + nativeGraphics, pen ? getNat(pen) : NULL, rect.X, rect.Y, rect.Width, rect.Height)); }
Status DrawRectangles(const Pen *pen, const Rect *rects, INT count) { - return SetStatus(DllExports::GdipDrawRectanglesI(nativeGraphics, pen ? pen->nativePen : NULL, rects, count)); + return SetStatus(DllExports::GdipDrawRectanglesI(nativeGraphics, pen ? getNat(pen) : NULL, rects, count)); }
Status DrawRectangles(const Pen *pen, const RectF *rects, INT count) { - return SetStatus(DllExports::GdipDrawRectangles(nativeGraphics, pen ? pen->nativePen : NULL, rects, count)); + return SetStatus(DllExports::GdipDrawRectangles(nativeGraphics, pen ? getNat(pen) : NULL, rects, count)); }
Status @@ -570,8 +634,8 @@ class Graphics : public GdiplusBase const Metafile *metafile, const Metafile &destPoint, EnumerateMetafileProc callback, - VOID *callbackData, - ImageAttributes *imageAttributes) + VOID *callbackData = NULL, + ImageAttributes *imageAttributes = NULL) { return NotImplemented; } @@ -716,88 +780,88 @@ class Graphics : public GdiplusBase Status ExcludeClip(const Rect &rect) { - return NotImplemented; + return SetStatus( + DllExports::GdipSetClipRectI(nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, CombineModeExclude)); }
Status ExcludeClip(const RectF &rect) { - return NotImplemented; + return SetStatus( + DllExports::GdipSetClipRect(nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, CombineModeExclude)); }
Status ExcludeClip(const Region *region) { - return NotImplemented; + return SetStatus(DllExports::GdipSetClipRegion(nativeGraphics, getNat(region), CombineModeExclude)); }
Status FillClosedCurve(const Brush *brush, const Point *points, INT count) { - return SetStatus( - DllExports::GdipFillClosedCurveI(nativeGraphics, brush ? brush->nativeBrush : NULL, points, count)); + return SetStatus(DllExports::GdipFillClosedCurveI(nativeGraphics, brush ? getNat(brush) : NULL, points, count)); }
Status FillClosedCurve(const Brush *brush, const Point *points, INT count, FillMode fillMode, REAL tension) { return SetStatus(DllExports::GdipFillClosedCurve2I( - nativeGraphics, brush ? brush->nativeBrush : NULL, points, count, tension, fillMode)); + nativeGraphics, brush ? getNat(brush) : NULL, points, count, tension, fillMode)); }
Status FillClosedCurve(const Brush *brush, const PointF *points, INT count) { - return SetStatus( - DllExports::GdipFillClosedCurve(nativeGraphics, brush ? brush->nativeBrush : NULL, points, count)); + return SetStatus(DllExports::GdipFillClosedCurve(nativeGraphics, brush ? getNat(brush) : NULL, points, count)); }
Status FillClosedCurve(const Brush *brush, const PointF *points, INT count, FillMode fillMode, REAL tension) { return SetStatus(DllExports::GdipFillClosedCurve2( - nativeGraphics, brush ? brush->nativeBrush : NULL, points, count, tension, fillMode)); + nativeGraphics, brush ? getNat(brush) : NULL, points, count, tension, fillMode)); }
Status FillEllipse(const Brush *brush, const Rect &rect) { return SetStatus(DllExports::GdipFillEllipseI( - nativeGraphics, brush ? brush->nativeBrush : NULL, rect.X, rect.Y, rect.Width, rect.Height)); + nativeGraphics, brush ? getNat(brush) : NULL, rect.X, rect.Y, rect.Width, rect.Height)); }
Status FillEllipse(const Brush *brush, REAL x, REAL y, REAL width, REAL height) { return SetStatus( - DllExports::GdipFillEllipse(nativeGraphics, brush ? brush->nativeBrush : NULL, x, y, width, height)); + DllExports::GdipFillEllipse(nativeGraphics, brush ? getNat(brush) : NULL, x, y, width, height)); }
Status FillEllipse(const Brush *brush, const RectF &rect) { return SetStatus(DllExports::GdipFillEllipse( - nativeGraphics, brush ? brush->nativeBrush : NULL, rect.X, rect.Y, rect.Width, rect.Height)); + nativeGraphics, brush ? getNat(brush) : NULL, rect.X, rect.Y, rect.Width, rect.Height)); }
Status FillEllipse(const Brush *brush, INT x, INT y, INT width, INT height) { return SetStatus( - DllExports::GdipFillEllipseI(nativeGraphics, brush ? brush->nativeBrush : NULL, x, y, width, height)); + DllExports::GdipFillEllipseI(nativeGraphics, brush ? getNat(brush) : NULL, x, y, width, height)); }
Status FillPath(const Brush *brush, const GraphicsPath *path) { - return NotImplemented; + return SetStatus(DllExports::GdipFillPath(nativeGraphics, getNat(brush), getNat(path))); }
Status FillPie(const Brush *brush, const Rect &rect, REAL startAngle, REAL sweepAngle) { return SetStatus(DllExports::GdipFillPieI( - nativeGraphics, brush ? brush->nativeBrush : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, + nativeGraphics, brush ? getNat(brush) : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)); }
@@ -805,133 +869,130 @@ class Graphics : public GdiplusBase FillPie(const Brush *brush, INT x, INT y, INT width, INT height, REAL startAngle, REAL sweepAngle) { return SetStatus(DllExports::GdipFillPieI( - nativeGraphics, brush ? brush->nativeBrush : NULL, x, y, width, height, startAngle, sweepAngle)); + nativeGraphics, brush ? getNat(brush) : NULL, x, y, width, height, startAngle, sweepAngle)); }
Status FillPie(const Brush *brush, REAL x, REAL y, REAL width, REAL height, REAL startAngle, REAL sweepAngle) { return SetStatus(DllExports::GdipFillPie( - nativeGraphics, brush ? brush->nativeBrush : NULL, x, y, width, height, startAngle, sweepAngle)); + nativeGraphics, brush ? getNat(brush) : NULL, x, y, width, height, startAngle, sweepAngle)); }
Status FillPie(const Brush *brush, RectF &rect, REAL startAngle, REAL sweepAngle) { return SetStatus(DllExports::GdipFillPie( - nativeGraphics, brush ? brush->nativeBrush : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, + nativeGraphics, brush ? getNat(brush) : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)); }
Status FillPolygon(const Brush *brush, const Point *points, INT count) { - return SetStatus( - DllExports::GdipFillPolygon2I(nativeGraphics, brush ? brush->nativeBrush : NULL, points, count)); + return SetStatus(DllExports::GdipFillPolygon2I(nativeGraphics, brush ? getNat(brush) : NULL, points, count)); }
Status FillPolygon(const Brush *brush, const PointF *points, INT count) { - return SetStatus( - DllExports::GdipFillPolygon2(nativeGraphics, brush ? brush->nativeBrush : NULL, points, count)); + return SetStatus(DllExports::GdipFillPolygon2(nativeGraphics, brush ? getNat(brush) : NULL, points, count)); }
Status FillPolygon(const Brush *brush, const Point *points, INT count, FillMode fillMode) { return SetStatus( - DllExports::GdipFillPolygonI(nativeGraphics, brush ? brush->nativeBrush : NULL, points, count, fillMode)); + DllExports::GdipFillPolygonI(nativeGraphics, brush ? getNat(brush) : NULL, points, count, fillMode)); }
Status FillPolygon(const Brush *brush, const PointF *points, INT count, FillMode fillMode) { return SetStatus( - DllExports::GdipFillPolygon(nativeGraphics, brush ? brush->nativeBrush : NULL, points, count, fillMode)); + DllExports::GdipFillPolygon(nativeGraphics, brush ? getNat(brush) : NULL, points, count, fillMode)); }
Status FillRectangle(const Brush *brush, const Rect &rect) { return SetStatus(DllExports::GdipFillRectangleI( - nativeGraphics, brush ? brush->nativeBrush : NULL, rect.X, rect.Y, rect.Width, rect.Height)); + nativeGraphics, brush ? getNat(brush) : NULL, rect.X, rect.Y, rect.Width, rect.Height)); }
Status FillRectangle(const Brush *brush, const RectF &rect) { return SetStatus(DllExports::GdipFillRectangle( - nativeGraphics, brush ? brush->nativeBrush : NULL, rect.X, rect.Y, rect.Width, rect.Height)); + nativeGraphics, brush ? getNat(brush) : NULL, rect.X, rect.Y, rect.Width, rect.Height)); }
Status FillRectangle(const Brush *brush, REAL x, REAL y, REAL width, REAL height) { return SetStatus( - DllExports::GdipFillRectangle(nativeGraphics, brush ? brush->nativeBrush : NULL, x, y, width, height)); + DllExports::GdipFillRectangle(nativeGraphics, brush ? getNat(brush) : NULL, x, y, width, height)); }
Status FillRectangle(const Brush *brush, INT x, INT y, INT width, INT height) { return SetStatus( - DllExports::GdipFillRectangleI(nativeGraphics, brush ? brush->nativeBrush : NULL, x, y, width, height)); + DllExports::GdipFillRectangleI(nativeGraphics, brush ? getNat(brush) : NULL, x, y, width, height)); }
Status FillRectangles(const Brush *brush, const Rect *rects, INT count) { - return SetStatus( - DllExports::GdipFillRectanglesI(nativeGraphics, brush ? brush->nativeBrush : NULL, rects, count)); + return SetStatus(DllExports::GdipFillRectanglesI(nativeGraphics, brush ? getNat(brush) : NULL, rects, count)); }
Status FillRectangles(const Brush *brush, const RectF *rects, INT count) { - return SetStatus( - DllExports::GdipFillRectangles(nativeGraphics, brush ? brush->nativeBrush : NULL, rects, count)); + return SetStatus(DllExports::GdipFillRectangles(nativeGraphics, brush ? getNat(brush) : NULL, rects, count)); }
Status FillRegion(const Brush *brush, const Region *region) { - return NotImplemented; + return SetStatus(DllExports::GdipFillRegion(nativeGraphics, getNat(brush), getNat(region))); }
VOID Flush(FlushIntention intention) { + DllExports::GdipFlush(nativeGraphics, intention); }
static Graphics * FromHDC(HDC hdc) { - return NULL; + return new Graphics(hdc); }
static Graphics * FromHDC(HDC hdc, HANDLE hDevice) { - return NULL; + return new Graphics(hdc, hDevice); }
static Graphics * FromHWND(HWND hWnd, BOOL icm) { - return NULL; + return new Graphics(hWnd, icm); }
static Graphics * FromImage(Image *image) { - return NULL; + return new Graphics(image); }
Status GetClip(Region *region) const { - return NotImplemented; + return SetStatus(DllExports::GdipGetClip(nativeGraphics, getNat(region))); }
Status @@ -946,77 +1007,97 @@ class Graphics : public GdiplusBase return SetStatus(DllExports::GdipGetClipBounds(nativeGraphics, rect)); }
- CompositingMode GetCompositingMode(VOID) + CompositingMode + GetCompositingMode() const { CompositingMode compositingMode; SetStatus(DllExports::GdipGetCompositingMode(nativeGraphics, &compositingMode)); return compositingMode; }
- CompositingQuality GetCompositingQuality(VOID) + CompositingQuality + GetCompositingQuality() const { CompositingQuality compositingQuality; SetStatus(DllExports::GdipGetCompositingQuality(nativeGraphics, &compositingQuality)); return compositingQuality; }
- REAL GetDpiX(VOID) + REAL + GetDpiX() const { REAL dpi; SetStatus(DllExports::GdipGetDpiX(nativeGraphics, &dpi)); return dpi; }
- REAL GetDpiY(VOID) + REAL + GetDpiY() const { REAL dpi; SetStatus(DllExports::GdipGetDpiY(nativeGraphics, &dpi)); return dpi; }
- static HPALETTE GetHalftonePalette(VOID) + static HPALETTE + GetHalftonePalette() { return NULL; }
- HDC GetHDC(VOID) + HDC + GetHDC() { - return NULL; + HDC hdc = NULL; + SetStatus(DllExports::GdipGetDC(nativeGraphics, &hdc)); + return hdc; }
- InterpolationMode GetInterpolationMode(VOID) + InterpolationMode + GetInterpolationMode() const { InterpolationMode interpolationMode; SetStatus(DllExports::GdipGetInterpolationMode(nativeGraphics, &interpolationMode)); return interpolationMode; }
- Status GetLastStatus(VOID) + Status + GetLastStatus() const { - return status; + return lastStatus; }
Status GetNearestColor(Color *color) const { - return NotImplemented; + if (color == NULL) + return SetStatus(InvalidParameter); + + ARGB argb = color->GetValue(); + SetStatus(DllExports::GdipGetNearestColor(nativeGraphics, &argb)); + + color->SetValue(argb); + return lastStatus; }
- REAL GetPageScale(VOID) + REAL + GetPageScale() const { REAL scale; SetStatus(DllExports::GdipGetPageScale(nativeGraphics, &scale)); return scale; }
- Unit GetPageUnit(VOID) + Unit + GetPageUnit() const { Unit unit; SetStatus(DllExports::GdipGetPageUnit(nativeGraphics, &unit)); return unit; }
- PixelOffsetMode GetPixelOffsetMode(VOID) + PixelOffsetMode + GetPixelOffsetMode() const { PixelOffsetMode pixelOffsetMode; SetStatus(DllExports::GdipGetPixelOffsetMode(nativeGraphics, &pixelOffsetMode)); @@ -1024,37 +1105,55 @@ class Graphics : public GdiplusBase }
Status - GetRenderingOrigin(INT *x, INT *y) + GetRenderingOrigin(INT *x, INT *y) const { - return NotImplemented; // FIXME: not available: SetStatus(DllExports::GdipGetRenderingOrigin(nativeGraphics, x, - // y)); +#if 1 + return SetStatus(NotImplemented); // FIXME +#else + return SetStatus(DllExports::GdipGetRenderingOrigin(nativeGraphics, x, y)); +#endif }
- SmoothingMode GetSmoothingMode(VOID) const + SmoothingMode + GetSmoothingMode() const { SmoothingMode smoothingMode; SetStatus(DllExports::GdipGetSmoothingMode(nativeGraphics, &smoothingMode)); return smoothingMode; }
- UINT GetTextContrast(VOID) const + UINT + GetTextContrast() const { UINT contrast; SetStatus(DllExports::GdipGetTextContrast(nativeGraphics, &contrast)); return contrast; }
- TextRenderingHint GetTextRenderingHint(VOID) const + TextRenderingHint + GetTextRenderingHint() const { TextRenderingHint mode; SetStatus(DllExports::GdipGetTextRenderingHint(nativeGraphics, &mode)); return mode; }
+ UINT + GetTextGammaValue() const + { +#if 1 + return SetStatus(NotImplemented); // FIXME +#else + UINT gammaValue; + SetStatus(DllExports::GdipGetTextGammaValue(nativeGraphics, &gammaValue)); + return gammaValue; +#endif + } + Status - GetTransform(Matrix *matrix) + GetTransform(Matrix *matrix) const { - return NotImplemented; + return SetStatus(DllExports::GdipGetWorldTransform(nativeGraphics, getNat(matrix))); }
Status @@ -1072,22 +1171,25 @@ class Graphics : public GdiplusBase Status IntersectClip(const Rect &rect) { - return NotImplemented; + return SetStatus(DllExports::GdipSetClipRectI( + nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, CombineModeIntersect)); }
Status IntersectClip(const Region *region) { - return NotImplemented; + return SetStatus(DllExports::GdipSetClipRegion(nativeGraphics, getNat(region), CombineModeIntersect)); }
Status IntersectClip(const RectF &rect) { - return NotImplemented; + return SetStatus( + DllExports::GdipSetClipRect(nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, CombineModeIntersect)); }
- BOOL IsClipEmpty(VOID) const + BOOL + IsClipEmpty() const { BOOL result; SetStatus(DllExports::GdipIsClipEmpty(nativeGraphics, &result)); @@ -1158,12 +1260,16 @@ class Graphics : public GdiplusBase return result; }
- BOOL IsVisibleClipEmpty(VOID) const + BOOL + IsVisibleClipEmpty() const { - return FALSE; /* FIXME: not available: - BOOL result; - SetStatus(DllExports::GdipIsVisibleClipEmpty(nativeGraphics, &result)); - return result;*/ +#if 1 + return FALSE; // FIXME +#else + BOOL flag = FALSE; + SetStatus(DllExports::GdipIsVisibleClipEmpty(nativeGraphics, &flag)); + return flag; +#endif }
Status @@ -1247,20 +1353,23 @@ class Graphics : public GdiplusBase Status MultiplyTransform(Matrix *matrix, MatrixOrder order) { - return NotImplemented; + return SetStatus(DllExports::GdipMultiplyWorldTransform(nativeGraphics, getNat(matrix), order)); }
VOID ReleaseHDC(HDC hdc) { + SetStatus(DllExports::GdipReleaseDC(nativeGraphics, hdc)); }
- Status ResetClip(VOID) + Status + ResetClip() { return SetStatus(DllExports::GdipResetClip(nativeGraphics)); }
- Status ResetTransform(VOID) + Status + ResetTransform() { return SetStatus(DllExports::GdipResetWorldTransform(nativeGraphics)); } @@ -1272,55 +1381,56 @@ class Graphics : public GdiplusBase }
Status - RotateTransform(REAL angle, MatrixOrder order) + RotateTransform(REAL angle, MatrixOrder order = MatrixOrderPrepend) { return SetStatus(DllExports::GdipRotateWorldTransform(nativeGraphics, angle, order)); }
- GraphicsState Save(VOID) + GraphicsState + Save() { return 0; }
Status - ScaleTransform(REAL sx, REAL sy, MatrixOrder order) + ScaleTransform(REAL sx, REAL sy, MatrixOrder order = MatrixOrderPrepend) { return SetStatus(DllExports::GdipScaleWorldTransform(nativeGraphics, sx, sy, order)); }
Status - SetClip(const Graphics *g, CombineMode combineMode) + SetClip(const Graphics *g, CombineMode combineMode = CombineModeReplace) { return SetStatus(DllExports::GdipSetClipGraphics(nativeGraphics, g ? g->nativeGraphics : NULL, combineMode)); }
Status - SetClip(const GraphicsPath *path, CombineMode combineMode) + SetClip(const GraphicsPath *path, CombineMode combineMode = CombineModeReplace) { - return NotImplemented; + return SetStatus(DllExports::GdipSetClipPath(nativeGraphics, getNat(path), combineMode)); }
Status - SetClip(const Region *region, CombineMode combineMode) + SetClip(const Region *region, CombineMode combineMode = CombineModeReplace) { - return NotImplemented; + return SetStatus(DllExports::GdipSetClipRegion(nativeGraphics, getNat(region), combineMode)); }
Status - SetClip(const Rect &rect, CombineMode combineMode) + SetClip(const Rect &rect, CombineMode combineMode = CombineModeReplace) { return SetStatus( DllExports::GdipSetClipRectI(nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, combineMode)); }
Status - SetClip(HRGN hRgn, CombineMode combineMode) + SetClip(HRGN hRgn, CombineMode combineMode = CombineModeReplace) { return SetStatus(DllExports::GdipSetClipHrgn(nativeGraphics, hRgn, combineMode)); }
Status - SetClip(const RectF &rect, CombineMode combineMode) + SetClip(const RectF &rect, CombineMode combineMode = CombineModeReplace) { return SetStatus( DllExports::GdipSetClipRect(nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, combineMode)); @@ -1389,7 +1499,7 @@ class Graphics : public GdiplusBase Status SetTransform(const Matrix *matrix) { - return NotImplemented; + return SetStatus(DllExports::GdipSetWorldTransform(nativeGraphics, getNat(matrix))); }
Status @@ -1398,6 +1508,12 @@ class Graphics : public GdiplusBase return SetStatus(DllExports::GdipTransformPointsI(nativeGraphics, destSpace, srcSpace, pts, count)); }
+ Status + TransformPoints(CoordinateSpace destSpace, CoordinateSpace srcSpace, PointF *pts, INT count) + { + return SetStatus(DllExports::GdipTransformPoints(nativeGraphics, destSpace, srcSpace, pts, count)); + } + Status TranslateClip(INT dx, INT dy) { @@ -1411,7 +1527,7 @@ class Graphics : public GdiplusBase }
Status - TranslateTransform(REAL dx, REAL dy, MatrixOrder order) + TranslateTransform(REAL dx, REAL dy, MatrixOrder order = MatrixOrderPrepend) { return SetStatus(DllExports::GdipTranslateWorldTransform(nativeGraphics, dx, dy, order)); } @@ -1420,21 +1536,20 @@ class Graphics : public GdiplusBase Status SetStatus(Status status) const { - if (status == Ok) - return status; - this->status = status; + if (status != Ok) + lastStatus = status; return status; }
VOID - SetGraphics(GpGraphics *graphics) + SetNativeGraphics(GpGraphics *graphics) { nativeGraphics = graphics; }
protected: GpGraphics *nativeGraphics; - mutable Status status; + mutable Status lastStatus;
// get native friend inline GpGraphics *& diff --git a/sdk/include/psdk/gdiplusheaders.h b/sdk/include/psdk/gdiplusheaders.h index 5c0b338eaba..d5ce75d866f 100644 --- a/sdk/include/psdk/gdiplusheaders.h +++ b/sdk/include/psdk/gdiplusheaders.h @@ -655,6 +655,13 @@ class CachedBitmap : public GdiplusBase CachedBitmap(const CachedBitmap &); CachedBitmap & operator=(const CachedBitmap &); + + // get native + friend inline GpCachedBitmap *& + getNat(const CachedBitmap *cb) + { + return const_cast<CachedBitmap *>(cb)->nativeCachedBitmap; + } };
class FontCollection : public GdiplusBase @@ -1367,6 +1374,13 @@ class Region : public GdiplusBase this->status = status; return status; } + + // get native + friend inline GpRegion *& + getNat(const Region *region) + { + return const_cast<Region *>(region)->region; + } };
class CustomLineCap : public GdiplusBase diff --git a/sdk/include/psdk/gdiplusimageattributes.h b/sdk/include/psdk/gdiplusimageattributes.h index 4cda385608b..ad14edb79d9 100644 --- a/sdk/include/psdk/gdiplusimageattributes.h +++ b/sdk/include/psdk/gdiplusimageattributes.h @@ -243,6 +243,13 @@ class ImageAttributes : public GdiplusBase ImageAttributes(const ImageAttributes &); ImageAttributes & operator=(const ImageAttributes &); + + // get native + friend inline GpImageAttributes *& + getNat(const ImageAttributes *ia) + { + return const_cast<ImageAttributes *>(ia)->nativeImageAttr; + } };
#endif /* _GDIPLUSIMAGEATTRIBUTES_H */ diff --git a/sdk/include/psdk/gdiplusmatrix.h b/sdk/include/psdk/gdiplusmatrix.h index 72981f72190..c822be2cd4d 100644 --- a/sdk/include/psdk/gdiplusmatrix.h +++ b/sdk/include/psdk/gdiplusmatrix.h @@ -204,6 +204,13 @@ class Matrix : public GdiplusBase lastStatus = status; return status; } + + // get native + friend inline GpMatrix *& + getNat(const Matrix *matrix) + { + return const_cast<Matrix *>(matrix)->nativeMatrix; + } };
#endif /* _GDIPLUSMATRIX_H */ diff --git a/sdk/include/psdk/gdipluspath.h b/sdk/include/psdk/gdipluspath.h index 73774dfa01a..a937784628c 100644 --- a/sdk/include/psdk/gdipluspath.h +++ b/sdk/include/psdk/gdipluspath.h @@ -26,6 +26,7 @@ class GraphicsPath : public GdiplusBase { friend class Region; friend class CustomLineCap; + friend class Graphics;
public: GraphicsPath(const Point *points, const BYTE *types, INT count, FillMode fillMode) : nativePath(NULL) @@ -598,6 +599,13 @@ class GraphicsPath : public GdiplusBase GraphicsPath(const GraphicsPath &); GraphicsPath & operator=(const GraphicsPath &); + + // get native + friend inline GpPath *& + getNat(const GraphicsPath *path) + { + return const_cast<GraphicsPath *>(path)->nativePath; + } };
class GraphicsPathIterator : public GdiplusBase diff --git a/sdk/include/psdk/gdipluspen.h b/sdk/include/psdk/gdipluspen.h index 477c71f9fe3..76291aea017 100644 --- a/sdk/include/psdk/gdipluspen.h +++ b/sdk/include/psdk/gdipluspen.h @@ -396,6 +396,13 @@ class Pen : public GdiplusBase Pen(const Pen &); Pen & operator=(const Pen &); + + // get native + friend inline GpPen *& + getNat(const Pen *pen) + { + return const_cast<Pen *>(pen)->nativePen; + } };
#endif /* _GDIPLUSPEN_H */