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