diff options
Diffstat (limited to 'core/src/fxge/Microsoft SDK/include/GdiPlusGraphics.h')
-rw-r--r-- | core/src/fxge/Microsoft SDK/include/GdiPlusGraphics.h | 5452 |
1 files changed, 2726 insertions, 2726 deletions
diff --git a/core/src/fxge/Microsoft SDK/include/GdiPlusGraphics.h b/core/src/fxge/Microsoft SDK/include/GdiPlusGraphics.h index 7b39a6ea71..4e4e3dae12 100644 --- a/core/src/fxge/Microsoft SDK/include/GdiPlusGraphics.h +++ b/core/src/fxge/Microsoft SDK/include/GdiPlusGraphics.h @@ -1,2726 +1,2726 @@ -/**************************************************************************\
-*
-* Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved.
-*
-* Module Name:
-*
-* GdiplusGraphics.h
-*
-* Abstract:
-*
-* Declarations for Graphics class
-*
-\**************************************************************************/
-
-#ifndef _GDIPLUSGRAPHICS_H
-#define _GDIPLUSGRAPHICS_H
-
-/**
- * Represent a graphics context
- */
-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;
-
- // Get a graphics context from an existing Win32 HDC or HWND
- 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);
- }
-
- //------------------------------------------------------------------------
- // 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)
- {
-#ifndef DCR_USE_NEW_186764
- /* temporarly set the high bit to warn that we are using the new definition for the flag */
- newMode = (TextRenderingHint) (newMode | 0x0f000);
-#endif // DCR_USE_NEW_186764
- return SetStatus(DllExports::GdipSetTextRenderingHint(nativeGraphics,
- newMode));
- }
-
- TextRenderingHint GetTextRenderingHint() const
- {
- TextRenderingHint hint;
-
- SetStatus(DllExports::GdipGetTextRenderingHint(nativeGraphics,
- &hint));
-
- return hint;
- }
-
-#ifdef DCR_USE_NEW_188922
- Status SetTextContrast(IN UINT contrast)
- {
- return SetStatus(DllExports::GdipSetTextContrast(nativeGraphics,
- contrast));
- }
-
- UINT GetTextContrast() const
- {
- UINT contrast;
-
- SetStatus(DllExports::GdipGetTextContrast(nativeGraphics,
- &contrast));
-
- return contrast;
- }
-#else
- Status SetTextGammaValue(IN UINT gammaValue)
- {
- return SetStatus(DllExports::GdipSetTextGammaValue(nativeGraphics,
- gammaValue));
- }
-
- UINT GetTextGammaValue() const
- {
- UINT gammaValue;
-
- SetStatus(DllExports::GdipGetTextGammaValue(nativeGraphics,
- &gammaValue));
-
- return gammaValue;
- }
-
-#endif // DCR_USE_NEW_188922
-
-
- 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 the 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));
- }
-
- /**
- * Return the current world transform
- */
-
- Status GetTransform(OUT Matrix* matrix) const
- {
- return SetStatus(DllExports::GdipGetWorldTransform(nativeGraphics,
- matrix->nativeMatrix));
- }
-
- /**
- * Manipulate the current page transform
- */
-
- Status SetPageUnit(IN Unit unit)
- {
- return SetStatus(DllExports::GdipSetPageUnit(nativeGraphics,
- unit));
- }
-
- Status SetPageScale(IN REAL scale)
- {
- return SetStatus(DllExports::GdipSetPageScale(nativeGraphics,
- scale));
- }
-
- /**
- * Retrieve the current page transform information
- * notes @ these are atomic
- */
- 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;
- }
-
- /**
- * Transform points in the current graphics context
- */
- // float version
- 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));
- }
-
- // integer version
- 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;
- }
-
- /**
- * Vector drawing methods
- *
- * @notes Do we need a set of methods that take
- * integer coordinate parameters?
- */
-
- // float version
- 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));
- }
-
- // int version
- 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));
- }
-
- // float version
- 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);
- }
-
- // int version
- 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);
- }
-
- // float version
- 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));
- }
-
- // int version
- 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));
- }
-
- // float version
- 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));
- }
-
- // integer version
- 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));
- }
-
- // float version
- 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));
- }
-
- // integer version
- 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));
- }
-
- // floating point version
- 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));
- }
-
- // integer point version
- 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));
- }
-
- // float version
- Status DrawPolygon(IN const Pen* pen,
- IN const PointF* points,
- IN INT count)
- {
- return SetStatus(DllExports::GdipDrawPolygon(nativeGraphics,
- pen->nativePen,
- points,
- count));
- }
-
- // integer version
- Status DrawPolygon(IN const Pen* pen,
- IN const Point* points,
- IN INT count)
- {
- return SetStatus(DllExports::GdipDrawPolygonI(nativeGraphics,
- pen->nativePen,
- points,
- count));
- }
-
- // float version
- Status DrawPath(IN const Pen* pen,
- IN const GraphicsPath* path)
- {
- return SetStatus(DllExports::GdipDrawPath(nativeGraphics,
- pen ? pen->nativePen : NULL,
- path ? path->nativePath : NULL));
- }
-
- // float version
- 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));
- }
-
- // integer version
- 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));
- }
-
- // float version
- 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));
- }
-
- // integer version
- 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()));
- }
-
- // float version
- 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));
- }
-
- // integer version
- 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));
- }
-
- // float version
- 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));
- }
-
- // integer version
- 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));
- }
-
- // float version
- 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));
- }
-
- // integer version
- 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));
- }
-
- // float version
- 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));
- }
-
- // integer version
- 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));
- }
-
- // float version
- 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));
- }
-
- // integer version
- 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));
- }
-
- // float version
- Status FillRegion(IN const Brush* brush,
- IN const Region* region)
- {
- return SetStatus(DllExports::GdipFillRegion(nativeGraphics,
- brush->nativeBrush,
- region->nativeRegion));
- }
-
- // DrawString and MeasureString
- 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
- ));
- }
-
-
-#ifdef DCR_USE_NEW_174340
- 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;
- }
-#endif
-
-
-#ifndef DCR_USE_NEW_174340
- Status
- MeasureStringRegion(
- IN const WCHAR *string,
- IN INT length,
- IN const Font *font,
- IN const RectF &layoutRect,
- IN const StringFormat *stringFormat,
- IN INT firstCharacterIndex,
- IN INT characterCount,
- OUT Region *region
- ) const
- {
- if (region == NULL)
- {
- return SetStatus(InvalidParameter);
- }
-
- return (SetStatus(DllExports::GdipMeasureStringRegion(
- nativeGraphics,
- string,
- length,
- font ? font->nativeFont : NULL,
- layoutRect,
- stringFormat ? stringFormat->nativeFormat : NULL,
- firstCharacterIndex,
- characterCount,
- region->nativeRegion)));
- }
-#endif
-
- 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
- ));
- }
-
-#ifndef DCR_USE_NEW_168772
- Status DriverStringPointToCodepoint(
- IN const UINT16 *text,
- IN INT length,
- IN const Font *font,
- IN const PointF *positions,
- IN INT flags,
- IN const Matrix *matrix,
- IN const PointF &hit,
- OUT INT *index,
- OUT BOOL *rightEdge,
- OUT REAL *distance
- )
- {
- return SetStatus(DllExports::GdipDriverStringPointToCodepoint(
- nativeGraphics,
- text,
- length,
- font ? font->nativeFont : NULL,
- positions,
- flags,
- matrix ? matrix->nativeMatrix : NULL,
- &hit,
- index,
- rightEdge,
- distance
- ));
- }
-#endif
-
- // 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
- ));
- }
-
- /**
- * Draw images (both bitmap and vector)
- */
- // float version
- 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));
- }
-
- // integer version
- 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 or perspective blt
- * 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
- *
- * @notes Perspective blt only works for bitmap images.
- */
- 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));
- }
-
- /**
- * We need another set of methods similar to the ones above
- * that take an additional Rect parameter to specify the
- * portion of the source image to be drawn.
- */
- // float version
- 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));
- }
-
- // integer version
- 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));
- }
-
- /**
- * Clipping region operations
- *
- * @notes Simply incredible redundancy here.
- */
- 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));
- }
-
- /**
- * GetClip region from graphics context
- */
- Status GetClip(OUT Region* region) const
- {
- return SetStatus(DllExports::GdipGetClip(nativeGraphics,
- region->nativeRegion));
- }
-
- /**
- * Hit testing operations
- */
- 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;
- }
-
- /**
- * Save/restore graphics state
- */
- GraphicsState Save() const
- {
- GraphicsState gstate;
-
- SetStatus(DllExports::GdipSaveGraphics(nativeGraphics, &gstate));
-
- return gstate;
- }
-
- Status Restore(IN GraphicsState gstate)
- {
- return SetStatus(DllExports::GdipRestoreGraphics(nativeGraphics,
- gstate));
- }
-
- /**
- * Begin and end container drawing
- */
- 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;
- }
-
- /**
- * Begin and end container drawing
- */
- 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));
- }
-
- /**
- * Get/SetLayout
- * Support for Middle East localization (right-to-left mirroring)
- */
- GraphicsLayout GetLayout() const
- {
- GraphicsLayout layout;
-
- SetStatus(DllExports::GdipGetGraphicsLayout(nativeGraphics, &layout));
-
- return layout;
- }
-
- Status SetLayout(IN const GraphicsLayout layout)
- {
- return SetStatus(
- DllExports::GdipSetGraphicsLayout(nativeGraphics, layout)
- );
- }
-
- static HPALETTE GetHalftonePalette()
- {
- return DllExports::GdipCreateHalftonePalette();
- }
-
- Status GetLastStatus() const
- {
- Status lastStatus = lastResult;
- lastResult = Ok;
-
- return lastStatus;
- }
-
-protected:
-
-#ifdef DCR_USE_NEW_250932
-
-private:
- Graphics(const Graphics &);
- Graphics& operator=(const Graphics &);
-protected:
-
-#else
-
- Graphics(const Graphics& graphics)
- {
- graphics;
- SetStatus(NotImplemented);
- }
-
- Graphics& operator=(const Graphics& graphics)
- {
- graphics;
- SetStatus(NotImplemented);
- return *this;
- }
-
-#endif
-
- 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;
- }
-
- // Methods necessary to subclass Graphics for extension test.
-
- GpGraphics* GetNativeGraphics() const
- {
- return this->nativeGraphics;
- }
-
- GpPen* GetNativePen(const Pen* pen)
- {
- return pen->nativePen;
- }
-
-protected:
- GpGraphics* nativeGraphics;
- mutable Status lastResult;
-
-};
-
-//----------------------------------------------------------------------------
-// Extra implementation of GraphicsPath methods that use Graphics
-//----------------------------------------------------------------------------
-
-/**
- * Get the bounds of the path object with the given transform.
- * This is not always 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));
-}
-
-// integer version
-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));
-}
-
-//----------------------------------------------------------------------------
-// Hit testing operations
-//----------------------------------------------------------------------------
-
-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
+/**************************************************************************\ +* +* Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. +* +* Module Name: +* +* GdiplusGraphics.h +* +* Abstract: +* +* Declarations for Graphics class +* +\**************************************************************************/ + +#ifndef _GDIPLUSGRAPHICS_H +#define _GDIPLUSGRAPHICS_H + +/** + * Represent a graphics context + */ +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; + + // Get a graphics context from an existing Win32 HDC or HWND + 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); + } + + //------------------------------------------------------------------------ + // 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) + { +#ifndef DCR_USE_NEW_186764 + /* temporarly set the high bit to warn that we are using the new definition for the flag */ + newMode = (TextRenderingHint) (newMode | 0x0f000); +#endif // DCR_USE_NEW_186764 + return SetStatus(DllExports::GdipSetTextRenderingHint(nativeGraphics, + newMode)); + } + + TextRenderingHint GetTextRenderingHint() const + { + TextRenderingHint hint; + + SetStatus(DllExports::GdipGetTextRenderingHint(nativeGraphics, + &hint)); + + return hint; + } + +#ifdef DCR_USE_NEW_188922 + Status SetTextContrast(IN UINT contrast) + { + return SetStatus(DllExports::GdipSetTextContrast(nativeGraphics, + contrast)); + } + + UINT GetTextContrast() const + { + UINT contrast; + + SetStatus(DllExports::GdipGetTextContrast(nativeGraphics, + &contrast)); + + return contrast; + } +#else + Status SetTextGammaValue(IN UINT gammaValue) + { + return SetStatus(DllExports::GdipSetTextGammaValue(nativeGraphics, + gammaValue)); + } + + UINT GetTextGammaValue() const + { + UINT gammaValue; + + SetStatus(DllExports::GdipGetTextGammaValue(nativeGraphics, + &gammaValue)); + + return gammaValue; + } + +#endif // DCR_USE_NEW_188922 + + + 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 the 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)); + } + + /** + * Return the current world transform + */ + + Status GetTransform(OUT Matrix* matrix) const + { + return SetStatus(DllExports::GdipGetWorldTransform(nativeGraphics, + matrix->nativeMatrix)); + } + + /** + * Manipulate the current page transform + */ + + Status SetPageUnit(IN Unit unit) + { + return SetStatus(DllExports::GdipSetPageUnit(nativeGraphics, + unit)); + } + + Status SetPageScale(IN REAL scale) + { + return SetStatus(DllExports::GdipSetPageScale(nativeGraphics, + scale)); + } + + /** + * Retrieve the current page transform information + * notes @ these are atomic + */ + 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; + } + + /** + * Transform points in the current graphics context + */ + // float version + 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)); + } + + // integer version + 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; + } + + /** + * Vector drawing methods + * + * @notes Do we need a set of methods that take + * integer coordinate parameters? + */ + + // float version + 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)); + } + + // int version + 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)); + } + + // float version + 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); + } + + // int version + 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); + } + + // float version + 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)); + } + + // int version + 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)); + } + + // float version + 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)); + } + + // integer version + 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)); + } + + // float version + 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)); + } + + // integer version + 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)); + } + + // floating point version + 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)); + } + + // integer point version + 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)); + } + + // float version + Status DrawPolygon(IN const Pen* pen, + IN const PointF* points, + IN INT count) + { + return SetStatus(DllExports::GdipDrawPolygon(nativeGraphics, + pen->nativePen, + points, + count)); + } + + // integer version + Status DrawPolygon(IN const Pen* pen, + IN const Point* points, + IN INT count) + { + return SetStatus(DllExports::GdipDrawPolygonI(nativeGraphics, + pen->nativePen, + points, + count)); + } + + // float version + Status DrawPath(IN const Pen* pen, + IN const GraphicsPath* path) + { + return SetStatus(DllExports::GdipDrawPath(nativeGraphics, + pen ? pen->nativePen : NULL, + path ? path->nativePath : NULL)); + } + + // float version + 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)); + } + + // integer version + 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)); + } + + // float version + 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)); + } + + // integer version + 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())); + } + + // float version + 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)); + } + + // integer version + 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)); + } + + // float version + 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)); + } + + // integer version + 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)); + } + + // float version + 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)); + } + + // integer version + 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)); + } + + // float version + 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)); + } + + // integer version + 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)); + } + + // float version + 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)); + } + + // integer version + 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)); + } + + // float version + Status FillRegion(IN const Brush* brush, + IN const Region* region) + { + return SetStatus(DllExports::GdipFillRegion(nativeGraphics, + brush->nativeBrush, + region->nativeRegion)); + } + + // DrawString and MeasureString + 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 + )); + } + + +#ifdef DCR_USE_NEW_174340 + 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; + } +#endif + + +#ifndef DCR_USE_NEW_174340 + Status + MeasureStringRegion( + IN const WCHAR *string, + IN INT length, + IN const Font *font, + IN const RectF &layoutRect, + IN const StringFormat *stringFormat, + IN INT firstCharacterIndex, + IN INT characterCount, + OUT Region *region + ) const + { + if (region == NULL) + { + return SetStatus(InvalidParameter); + } + + return (SetStatus(DllExports::GdipMeasureStringRegion( + nativeGraphics, + string, + length, + font ? font->nativeFont : NULL, + layoutRect, + stringFormat ? stringFormat->nativeFormat : NULL, + firstCharacterIndex, + characterCount, + region->nativeRegion))); + } +#endif + + 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 + )); + } + +#ifndef DCR_USE_NEW_168772 + Status DriverStringPointToCodepoint( + IN const UINT16 *text, + IN INT length, + IN const Font *font, + IN const PointF *positions, + IN INT flags, + IN const Matrix *matrix, + IN const PointF &hit, + OUT INT *index, + OUT BOOL *rightEdge, + OUT REAL *distance + ) + { + return SetStatus(DllExports::GdipDriverStringPointToCodepoint( + nativeGraphics, + text, + length, + font ? font->nativeFont : NULL, + positions, + flags, + matrix ? matrix->nativeMatrix : NULL, + &hit, + index, + rightEdge, + distance + )); + } +#endif + + // 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 + )); + } + + /** + * Draw images (both bitmap and vector) + */ + // float version + 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)); + } + + // integer version + 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 or perspective blt + * 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 + * + * @notes Perspective blt only works for bitmap images. + */ + 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)); + } + + /** + * We need another set of methods similar to the ones above + * that take an additional Rect parameter to specify the + * portion of the source image to be drawn. + */ + // float version + 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)); + } + + // integer version + 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)); + } + + /** + * Clipping region operations + * + * @notes Simply incredible redundancy here. + */ + 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)); + } + + /** + * GetClip region from graphics context + */ + Status GetClip(OUT Region* region) const + { + return SetStatus(DllExports::GdipGetClip(nativeGraphics, + region->nativeRegion)); + } + + /** + * Hit testing operations + */ + 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; + } + + /** + * Save/restore graphics state + */ + GraphicsState Save() const + { + GraphicsState gstate; + + SetStatus(DllExports::GdipSaveGraphics(nativeGraphics, &gstate)); + + return gstate; + } + + Status Restore(IN GraphicsState gstate) + { + return SetStatus(DllExports::GdipRestoreGraphics(nativeGraphics, + gstate)); + } + + /** + * Begin and end container drawing + */ + 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; + } + + /** + * Begin and end container drawing + */ + 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)); + } + + /** + * Get/SetLayout + * Support for Middle East localization (right-to-left mirroring) + */ + GraphicsLayout GetLayout() const + { + GraphicsLayout layout; + + SetStatus(DllExports::GdipGetGraphicsLayout(nativeGraphics, &layout)); + + return layout; + } + + Status SetLayout(IN const GraphicsLayout layout) + { + return SetStatus( + DllExports::GdipSetGraphicsLayout(nativeGraphics, layout) + ); + } + + static HPALETTE GetHalftonePalette() + { + return DllExports::GdipCreateHalftonePalette(); + } + + Status GetLastStatus() const + { + Status lastStatus = lastResult; + lastResult = Ok; + + return lastStatus; + } + +protected: + +#ifdef DCR_USE_NEW_250932 + +private: + Graphics(const Graphics &); + Graphics& operator=(const Graphics &); +protected: + +#else + + Graphics(const Graphics& graphics) + { + graphics; + SetStatus(NotImplemented); + } + + Graphics& operator=(const Graphics& graphics) + { + graphics; + SetStatus(NotImplemented); + return *this; + } + +#endif + + 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; + } + + // Methods necessary to subclass Graphics for extension test. + + GpGraphics* GetNativeGraphics() const + { + return this->nativeGraphics; + } + + GpPen* GetNativePen(const Pen* pen) + { + return pen->nativePen; + } + +protected: + GpGraphics* nativeGraphics; + mutable Status lastResult; + +}; + +//---------------------------------------------------------------------------- +// Extra implementation of GraphicsPath methods that use Graphics +//---------------------------------------------------------------------------- + +/** + * Get the bounds of the path object with the given transform. + * This is not always 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)); +} + +// integer version +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)); +} + +//---------------------------------------------------------------------------- +// Hit testing operations +//---------------------------------------------------------------------------- + +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 |