1 /* 2 * GdiPlusGraphics.h 3 * 4 * Windows GDI+ 5 * 6 * This file is part of the w32api package. 7 * 8 * THIS SOFTWARE IS NOT COPYRIGHTED 9 * 10 * This source code is offered for use in the public domain. You may 11 * use, modify or distribute it freely. 12 * 13 * This code is distributed in the hope that it will be useful but 14 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 15 * DISCLAIMED. This includes but is not limited to warranties of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 */ 18 19 #ifndef _GDIPLUSGRAPHICS_H 20 #define _GDIPLUSGRAPHICS_H 21 22 class Graphics : public GdiplusBase 23 { 24 friend class Region; 25 friend class Font; 26 friend class Bitmap; 27 friend class CachedBitmap; 28 friend class ImageAttributes; 29 30 public: Graphics(Image * image)31 Graphics(Image *image) 32 { 33 GpGraphics *graphics = NULL; 34 if (image) 35 { 36 lastStatus = DllExports::GdipGetImageGraphicsContext(getNat(image), &graphics); 37 } 38 SetNativeGraphics(graphics); 39 } 40 Graphics(HDC hdc)41 Graphics(HDC hdc) 42 { 43 GpGraphics *graphics = NULL; 44 lastStatus = DllExports::GdipCreateFromHDC(hdc, &graphics); 45 SetNativeGraphics(graphics); 46 } 47 Graphics(HDC hdc,HANDLE hdevice)48 Graphics(HDC hdc, HANDLE hdevice) 49 { 50 GpGraphics *graphics = NULL; 51 lastStatus = DllExports::GdipCreateFromHDC2(hdc, hdevice, &graphics); 52 SetNativeGraphics(graphics); 53 } 54 55 Graphics(HWND hwnd, BOOL icm = FALSE) 56 { 57 GpGraphics *graphics = NULL; 58 if (icm) 59 { 60 lastStatus = DllExports::GdipCreateFromHWNDICM(hwnd, &graphics); 61 } 62 else 63 { 64 lastStatus = DllExports::GdipCreateFromHWND(hwnd, &graphics); 65 } 66 SetNativeGraphics(graphics); 67 } 68 ~Graphics()69 ~Graphics() 70 { 71 DllExports::GdipDeleteGraphics(nativeGraphics); 72 } 73 74 Status AddMetafileComment(const BYTE * data,UINT sizeData)75 AddMetafileComment(const BYTE *data, UINT sizeData) 76 { 77 return SetStatus(DllExports::GdipComment(nativeGraphics, sizeData, data)); 78 } 79 80 GraphicsContainer BeginContainer()81 BeginContainer() 82 { 83 return GraphicsContainer(); 84 } 85 86 GraphicsContainer BeginContainer(const RectF & dstrect,const RectF & srcrect,Unit unit)87 BeginContainer(const RectF &dstrect, const RectF &srcrect, Unit unit) 88 { 89 return GraphicsContainer(); 90 } 91 92 GraphicsContainer BeginContainer(const Rect & dstrect,const Rect & srcrect,Unit unit)93 BeginContainer(const Rect &dstrect, const Rect &srcrect, Unit unit) 94 { 95 return GraphicsContainer(); 96 } 97 98 Status Clear(const Color & color)99 Clear(const Color &color) 100 { 101 return SetStatus(DllExports::GdipGraphicsClear(nativeGraphics, color.GetValue())); 102 } 103 104 Status DrawArc(const Pen * pen,const Rect & rect,REAL startAngle,REAL sweepAngle)105 DrawArc(const Pen *pen, const Rect &rect, REAL startAngle, REAL sweepAngle) 106 { 107 return SetStatus(DllExports::GdipDrawArcI( 108 nativeGraphics, pen ? getNat(pen) : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)); 109 } 110 111 Status DrawArc(const Pen * pen,const RectF & rect,REAL startAngle,REAL sweepAngle)112 DrawArc(const Pen *pen, const RectF &rect, REAL startAngle, REAL sweepAngle) 113 { 114 return SetStatus(DllExports::GdipDrawArcI( 115 nativeGraphics, pen ? getNat(pen) : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)); 116 } 117 118 Status DrawArc(const Pen * pen,REAL x,REAL y,REAL width,REAL height,REAL startAngle,REAL sweepAngle)119 DrawArc(const Pen *pen, REAL x, REAL y, REAL width, REAL height, REAL startAngle, REAL sweepAngle) 120 { 121 return SetStatus(DllExports::GdipDrawArc( 122 nativeGraphics, pen ? getNat(pen) : NULL, x, y, width, height, startAngle, sweepAngle)); 123 } 124 125 Status DrawArc(const Pen * pen,INT x,INT y,INT width,INT height,REAL startAngle,REAL sweepAngle)126 DrawArc(const Pen *pen, INT x, INT y, INT width, INT height, REAL startAngle, REAL sweepAngle) 127 { 128 return SetStatus(DllExports::GdipDrawArcI( 129 nativeGraphics, pen ? getNat(pen) : NULL, x, y, width, height, startAngle, sweepAngle)); 130 } 131 132 Status DrawBezier(const Pen * pen,const Point & pt1,const Point & pt2,const Point & pt3,const Point & pt4)133 DrawBezier(const Pen *pen, const Point &pt1, const Point &pt2, const Point &pt3, const Point &pt4) 134 { 135 return SetStatus(DllExports::GdipDrawBezierI( 136 nativeGraphics, pen ? getNat(pen) : NULL, pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y)); 137 } 138 139 Status DrawBezier(const Pen * pen,const PointF & pt1,const PointF & pt2,const PointF & pt3,const PointF & pt4)140 DrawBezier(const Pen *pen, const PointF &pt1, const PointF &pt2, const PointF &pt3, const PointF &pt4) 141 { 142 return SetStatus(DllExports::GdipDrawBezier( 143 nativeGraphics, pen ? getNat(pen) : NULL, pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y)); 144 } 145 146 Status DrawBezier(const Pen * pen,REAL x1,REAL y1,REAL x2,REAL y2,REAL x3,REAL y3,REAL x4,REAL y4)147 DrawBezier(const Pen *pen, REAL x1, REAL y1, REAL x2, REAL y2, REAL x3, REAL y3, REAL x4, REAL y4) 148 { 149 return SetStatus( 150 DllExports::GdipDrawBezier(nativeGraphics, pen ? getNat(pen) : NULL, x1, y1, x2, y2, x3, y3, x4, y4)); 151 } 152 153 Status DrawBezier(const Pen * pen,INT x1,INT y1,INT x2,INT y2,INT x3,INT y3,INT x4,INT y4)154 DrawBezier(const Pen *pen, INT x1, INT y1, INT x2, INT y2, INT x3, INT y3, INT x4, INT y4) 155 { 156 return SetStatus( 157 DllExports::GdipDrawBezierI(nativeGraphics, pen ? getNat(pen) : NULL, x1, y1, x2, y2, x3, y3, x4, y4)); 158 } 159 160 Status DrawBeziers(const Pen * pen,const Point * points,INT count)161 DrawBeziers(const Pen *pen, const Point *points, INT count) 162 { 163 return SetStatus(DllExports::GdipDrawBeziersI(nativeGraphics, pen ? getNat(pen) : NULL, points, count)); 164 } 165 166 Status DrawBeziers(const Pen * pen,const PointF * points,INT count)167 DrawBeziers(const Pen *pen, const PointF *points, INT count) 168 { 169 return SetStatus(DllExports::GdipDrawBeziers(nativeGraphics, pen ? getNat(pen) : NULL, points, count)); 170 } 171 172 Status DrawCachedBitmap(CachedBitmap * cb,INT x,INT y)173 DrawCachedBitmap(CachedBitmap *cb, INT x, INT y) 174 { 175 return SetStatus(DllExports::GdipDrawCachedBitmap(nativeGraphics, getNat(cb), x, y)); 176 } 177 178 Status DrawClosedCurve(const Pen * pen,const Point * points,INT count)179 DrawClosedCurve(const Pen *pen, const Point *points, INT count) 180 { 181 return SetStatus(DllExports::GdipDrawClosedCurveI(nativeGraphics, pen ? getNat(pen) : NULL, points, count)); 182 } 183 184 Status DrawClosedCurve(const Pen * pen,const PointF * points,INT count)185 DrawClosedCurve(const Pen *pen, const PointF *points, INT count) 186 { 187 return SetStatus(DllExports::GdipDrawClosedCurve(nativeGraphics, pen ? getNat(pen) : NULL, points, count)); 188 } 189 190 Status DrawClosedCurve(const Pen * pen,const PointF * points,INT count,REAL tension)191 DrawClosedCurve(const Pen *pen, const PointF *points, INT count, REAL tension) 192 { 193 return SetStatus( 194 DllExports::GdipDrawClosedCurve2(nativeGraphics, pen ? getNat(pen) : NULL, points, count, tension)); 195 } 196 197 Status DrawClosedCurve(const Pen * pen,const Point * points,INT count,REAL tension)198 DrawClosedCurve(const Pen *pen, const Point *points, INT count, REAL tension) 199 { 200 return SetStatus( 201 DllExports::GdipDrawClosedCurve2I(nativeGraphics, pen ? getNat(pen) : NULL, points, count, tension)); 202 } 203 204 Status DrawCurve(const Pen * pen,const Point * points,INT count)205 DrawCurve(const Pen *pen, const Point *points, INT count) 206 { 207 return SetStatus(DllExports::GdipDrawCurveI(nativeGraphics, pen ? getNat(pen) : NULL, points, count)); 208 } 209 210 Status DrawCurve(const Pen * pen,const PointF * points,INT count)211 DrawCurve(const Pen *pen, const PointF *points, INT count) 212 { 213 return SetStatus(DllExports::GdipDrawCurve(nativeGraphics, pen ? getNat(pen) : NULL, points, count)); 214 } 215 216 Status DrawCurve(const Pen * pen,const PointF * points,INT count,REAL tension)217 DrawCurve(const Pen *pen, const PointF *points, INT count, REAL tension) 218 { 219 return SetStatus(DllExports::GdipDrawCurve2(nativeGraphics, pen ? getNat(pen) : NULL, points, count, tension)); 220 } 221 222 Status DrawCurve(const Pen * pen,const Point * points,INT count,INT offset,INT numberOfSegments,REAL tension)223 DrawCurve(const Pen *pen, const Point *points, INT count, INT offset, INT numberOfSegments, REAL tension) 224 { 225 return SetStatus(DllExports::GdipDrawCurve3I( 226 nativeGraphics, pen ? getNat(pen) : NULL, points, count, offset, numberOfSegments, tension)); 227 } 228 229 Status DrawCurve(const Pen * pen,const PointF * points,INT count,INT offset,INT numberOfSegments,REAL tension)230 DrawCurve(const Pen *pen, const PointF *points, INT count, INT offset, INT numberOfSegments, REAL tension) 231 { 232 return SetStatus(DllExports::GdipDrawCurve3( 233 nativeGraphics, pen ? getNat(pen) : NULL, points, count, offset, numberOfSegments, tension)); 234 } 235 236 Status DrawCurve(const Pen * pen,const Point * points,INT count,REAL tension)237 DrawCurve(const Pen *pen, const Point *points, INT count, REAL tension) 238 { 239 return SetStatus(DllExports::GdipDrawCurve2I(nativeGraphics, pen ? getNat(pen) : NULL, points, count, tension)); 240 } 241 242 Status DrawDriverString(const UINT16 * text,INT length,const Font * font,const Brush * brush,const PointF * positions,INT flags,const Matrix * matrix)243 DrawDriverString( 244 const UINT16 *text, 245 INT length, 246 const Font *font, 247 const Brush *brush, 248 const PointF *positions, 249 INT flags, 250 const Matrix *matrix) 251 { 252 return SetStatus(DllExports::GdipDrawDriverString( 253 nativeGraphics, text, length, font ? getNat(font) : NULL, brush ? getNat(brush) : NULL, positions, flags, 254 matrix ? getNat(matrix) : NULL)); 255 } 256 257 Status DrawEllipse(const Pen * pen,const Rect & rect)258 DrawEllipse(const Pen *pen, const Rect &rect) 259 { 260 return SetStatus(DllExports::GdipDrawEllipseI( 261 nativeGraphics, pen ? getNat(pen) : NULL, rect.X, rect.Y, rect.Width, rect.Height)); 262 } 263 264 Status DrawEllipse(const Pen * pen,REAL x,REAL y,REAL width,REAL height)265 DrawEllipse(const Pen *pen, REAL x, REAL y, REAL width, REAL height) 266 { 267 return SetStatus(DllExports::GdipDrawEllipse(nativeGraphics, pen ? getNat(pen) : NULL, x, y, width, height)); 268 } 269 270 Status DrawEllipse(const Pen * pen,const RectF & rect)271 DrawEllipse(const Pen *pen, const RectF &rect) 272 { 273 return SetStatus(DllExports::GdipDrawEllipse( 274 nativeGraphics, pen ? getNat(pen) : NULL, rect.X, rect.Y, rect.Width, rect.Height)); 275 } 276 277 Status DrawEllipse(const Pen * pen,INT x,INT y,INT width,INT height)278 DrawEllipse(const Pen *pen, INT x, INT y, INT width, INT height) 279 { 280 return SetStatus(DllExports::GdipDrawEllipseI(nativeGraphics, pen ? getNat(pen) : NULL, x, y, width, height)); 281 } 282 283 Status DrawImage(Image * image,const Point * destPoints,INT count)284 DrawImage(Image *image, const Point *destPoints, INT count) 285 { 286 if (count != 3 && count != 4) 287 return SetStatus(InvalidParameter); 288 289 return SetStatus( 290 DllExports::GdipDrawImagePointsI(nativeGraphics, image ? getNat(image) : NULL, destPoints, count)); 291 } 292 293 Status DrawImage(Image * image,INT x,INT y)294 DrawImage(Image *image, INT x, INT y) 295 { 296 return SetStatus(DllExports::GdipDrawImageI(nativeGraphics, image ? getNat(image) : NULL, x, y)); 297 } 298 299 Status DrawImage(Image * image,const Point & point)300 DrawImage(Image *image, const Point &point) 301 { 302 return DrawImage(image, point.X, point.Y); 303 } 304 305 Status DrawImage(Image * image,REAL x,REAL y)306 DrawImage(Image *image, REAL x, REAL y) 307 { 308 return SetStatus(DllExports::GdipDrawImage(nativeGraphics, image ? getNat(image) : NULL, x, y)); 309 } 310 311 Status DrawImage(Image * image,const PointF & point)312 DrawImage(Image *image, const PointF &point) 313 { 314 return DrawImage(image, point.X, point.Y); 315 } 316 317 Status DrawImage(Image * image,const PointF * destPoints,INT count)318 DrawImage(Image *image, const PointF *destPoints, INT count) 319 { 320 if (count != 3 && count != 4) 321 return SetStatus(InvalidParameter); 322 323 return SetStatus( 324 DllExports::GdipDrawImagePoints(nativeGraphics, image ? getNat(image) : NULL, destPoints, count)); 325 } 326 327 Status DrawImage(Image * image,REAL x,REAL y,REAL srcx,REAL srcy,REAL srcwidth,REAL srcheight,Unit srcUnit)328 DrawImage(Image *image, REAL x, REAL y, REAL srcx, REAL srcy, REAL srcwidth, REAL srcheight, Unit srcUnit) 329 { 330 return SetStatus(DllExports::GdipDrawImagePointRect( 331 nativeGraphics, image ? getNat(image) : NULL, x, y, srcx, srcy, srcwidth, srcheight, srcUnit)); 332 } 333 334 Status DrawImage(Image * image,const RectF & rect)335 DrawImage(Image *image, const RectF &rect) 336 { 337 return DrawImage(image, rect.X, rect.Y, rect.Width, rect.Height); 338 } 339 340 Status DrawImage(Image * image,INT x,INT y,INT width,INT height)341 DrawImage(Image *image, INT x, INT y, INT width, INT height) 342 { 343 return SetStatus( 344 DllExports::GdipDrawImageRectI(nativeGraphics, image ? getNat(image) : NULL, x, y, width, height)); 345 } 346 347 Status DrawImage(Image * image,const PointF * destPoints,INT count,REAL srcx,REAL srcy,REAL srcwidth,REAL srcheight,Unit srcUnit,ImageAttributes * imageAttributes,DrawImageAbort callback,VOID * callbackData)348 DrawImage( 349 Image *image, 350 const PointF *destPoints, 351 INT count, 352 REAL srcx, 353 REAL srcy, 354 REAL srcwidth, 355 REAL srcheight, 356 Unit srcUnit, 357 ImageAttributes *imageAttributes, 358 DrawImageAbort callback, 359 VOID *callbackData) 360 { 361 return SetStatus(DllExports::GdipDrawImagePointsRect( 362 nativeGraphics, image ? getNat(image) : NULL, destPoints, count, srcx, srcy, srcwidth, srcheight, srcUnit, 363 imageAttributes ? getNat(imageAttributes) : NULL, callback, callbackData)); 364 } 365 366 Status 367 DrawImage( 368 Image *image, 369 const Rect &destRect, 370 INT srcx, 371 INT srcy, 372 INT srcwidth, 373 INT srcheight, 374 Unit srcUnit, 375 const ImageAttributes *imageAttributes = NULL, 376 DrawImageAbort callback = NULL, 377 VOID *callbackData = NULL) 378 { 379 return SetStatus(DllExports::GdipDrawImageRectRectI( 380 nativeGraphics, image ? getNat(image) : NULL, destRect.X, destRect.Y, destRect.Width, destRect.Height, srcx, 381 srcy, srcwidth, srcheight, srcUnit, imageAttributes ? getNat(imageAttributes) : NULL, callback, 382 callbackData)); 383 } 384 385 Status 386 DrawImage( 387 Image *image, 388 const Point *destPoints, 389 INT count, 390 INT srcx, 391 INT srcy, 392 INT srcwidth, 393 INT srcheight, 394 Unit srcUnit, 395 ImageAttributes *imageAttributes = NULL, 396 DrawImageAbort callback = NULL, 397 VOID *callbackData = NULL) 398 { 399 return SetStatus(DllExports::GdipDrawImagePointsRectI( 400 nativeGraphics, image ? getNat(image) : NULL, destPoints, count, srcx, srcy, srcwidth, srcheight, srcUnit, 401 imageAttributes ? getNat(imageAttributes) : NULL, callback, callbackData)); 402 } 403 404 Status DrawImage(Image * image,REAL x,REAL y,REAL width,REAL height)405 DrawImage(Image *image, REAL x, REAL y, REAL width, REAL height) 406 { 407 return SetStatus( 408 DllExports::GdipDrawImageRect(nativeGraphics, image ? getNat(image) : NULL, x, y, width, height)); 409 } 410 411 Status DrawImage(Image * image,const Rect & rect)412 DrawImage(Image *image, const Rect &rect) 413 { 414 return DrawImage(image, rect.X, rect.Y, rect.Width, rect.Height); 415 } 416 417 Status DrawImage(Image * image,INT x,INT y,INT srcx,INT srcy,INT srcwidth,INT srcheight,Unit srcUnit)418 DrawImage(Image *image, INT x, INT y, INT srcx, INT srcy, INT srcwidth, INT srcheight, Unit srcUnit) 419 { 420 return SetStatus(DllExports::GdipDrawImagePointRectI( 421 nativeGraphics, image ? getNat(image) : NULL, x, y, srcx, srcy, srcwidth, srcheight, srcUnit)); 422 } 423 424 Status 425 DrawImage( 426 Image *image, 427 const RectF &destRect, 428 REAL srcx, 429 REAL srcy, 430 REAL srcwidth, 431 REAL srcheight, 432 Unit srcUnit, 433 ImageAttributes *imageAttributes = NULL, 434 DrawImageAbort callback = NULL, 435 VOID *callbackData = NULL) 436 { 437 return SetStatus(DllExports::GdipDrawImageRectRect( 438 nativeGraphics, image ? getNat(image) : NULL, destRect.X, destRect.Y, destRect.Width, destRect.Height, srcx, 439 srcy, srcwidth, srcheight, srcUnit, imageAttributes ? getNat(imageAttributes) : NULL, callback, 440 callbackData)); 441 } 442 443 Status DrawLine(const Pen * pen,const Point & pt1,const Point & pt2)444 DrawLine(const Pen *pen, const Point &pt1, const Point &pt2) 445 { 446 return SetStatus( 447 DllExports::GdipDrawLineI(nativeGraphics, pen ? getNat(pen) : NULL, pt1.X, pt1.Y, pt2.X, pt2.Y)); 448 } 449 450 Status DrawLine(const Pen * pen,const PointF & pt1,const Point & pt2)451 DrawLine(const Pen *pen, const PointF &pt1, const Point &pt2) 452 { 453 return SetStatus( 454 DllExports::GdipDrawLine(nativeGraphics, pen ? getNat(pen) : NULL, pt1.X, pt1.Y, pt2.X, pt2.Y)); 455 } 456 457 Status DrawLine(const Pen * pen,REAL x1,REAL y1,REAL x2,REAL y2)458 DrawLine(const Pen *pen, REAL x1, REAL y1, REAL x2, REAL y2) 459 { 460 return SetStatus(DllExports::GdipDrawLine(nativeGraphics, pen ? getNat(pen) : NULL, x1, y1, x2, y2)); 461 } 462 463 Status DrawLine(const Pen * pen,INT x1,INT y1,INT x2,INT y2)464 DrawLine(const Pen *pen, INT x1, INT y1, INT x2, INT y2) 465 { 466 return SetStatus(DllExports::GdipDrawLine(nativeGraphics, pen ? getNat(pen) : NULL, x1, y1, x2, y2)); 467 } 468 469 Status DrawLines(const Pen * pen,const Point * points,INT count)470 DrawLines(const Pen *pen, const Point *points, INT count) 471 { 472 return SetStatus(DllExports::GdipDrawLinesI(nativeGraphics, pen ? getNat(pen) : NULL, points, count)); 473 } 474 475 Status DrawLines(const Pen * pen,const PointF * points,INT count)476 DrawLines(const Pen *pen, const PointF *points, INT count) 477 { 478 return SetStatus(DllExports::GdipDrawLines(nativeGraphics, pen ? getNat(pen) : NULL, points, count)); 479 } 480 481 Status DrawPath(const Pen * pen,const GraphicsPath * path)482 DrawPath(const Pen *pen, const GraphicsPath *path) 483 { 484 return SetStatus( 485 DllExports::GdipDrawPath(nativeGraphics, pen ? getNat(pen) : NULL, path ? getNat(path) : NULL)); 486 } 487 488 Status DrawPie(const Pen * pen,const Rect & rect,REAL startAngle,REAL sweepAngle)489 DrawPie(const Pen *pen, const Rect &rect, REAL startAngle, REAL sweepAngle) 490 { 491 return SetStatus(DllExports::GdipDrawPieI( 492 nativeGraphics, pen ? getNat(pen) : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)); 493 } 494 495 Status DrawPie(const Pen * pen,INT x,INT y,INT width,INT height,REAL startAngle,REAL sweepAngle)496 DrawPie(const Pen *pen, INT x, INT y, INT width, INT height, REAL startAngle, REAL sweepAngle) 497 { 498 return SetStatus(DllExports::GdipDrawPieI( 499 nativeGraphics, pen ? getNat(pen) : NULL, x, y, width, height, startAngle, sweepAngle)); 500 } 501 502 Status DrawPie(const Pen * pen,REAL x,REAL y,REAL width,REAL height,REAL startAngle,REAL sweepAngle)503 DrawPie(const Pen *pen, REAL x, REAL y, REAL width, REAL height, REAL startAngle, REAL sweepAngle) 504 { 505 return SetStatus(DllExports::GdipDrawPie( 506 nativeGraphics, pen ? getNat(pen) : NULL, x, y, width, height, startAngle, sweepAngle)); 507 } 508 509 Status DrawPie(const Pen * pen,const RectF & rect,REAL startAngle,REAL sweepAngle)510 DrawPie(const Pen *pen, const RectF &rect, REAL startAngle, REAL sweepAngle) 511 { 512 return SetStatus(DllExports::GdipDrawPie( 513 nativeGraphics, pen ? getNat(pen) : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)); 514 } 515 516 Status DrawPolygon(const Pen * pen,const Point * points,INT count)517 DrawPolygon(const Pen *pen, const Point *points, INT count) 518 { 519 return SetStatus(DllExports::GdipDrawPolygonI(nativeGraphics, pen ? getNat(pen) : NULL, points, count)); 520 } 521 522 Status DrawPolygon(const Pen * pen,const PointF * points,INT count)523 DrawPolygon(const Pen *pen, const PointF *points, INT count) 524 { 525 return SetStatus(DllExports::GdipDrawPolygon(nativeGraphics, pen ? getNat(pen) : NULL, points, count)); 526 } 527 528 Status DrawRectangle(const Pen * pen,const Rect & rect)529 DrawRectangle(const Pen *pen, const Rect &rect) 530 { 531 return SetStatus(DllExports::GdipDrawRectangleI( 532 nativeGraphics, pen ? getNat(pen) : NULL, rect.X, rect.Y, rect.Width, rect.Height)); 533 } 534 535 Status DrawRectangle(const Pen * pen,INT x,INT y,INT width,INT height)536 DrawRectangle(const Pen *pen, INT x, INT y, INT width, INT height) 537 { 538 return SetStatus(DllExports::GdipDrawRectangleI(nativeGraphics, pen ? getNat(pen) : NULL, x, y, width, height)); 539 } 540 541 Status DrawRectangle(const Pen * pen,REAL x,REAL y,REAL width,REAL height)542 DrawRectangle(const Pen *pen, REAL x, REAL y, REAL width, REAL height) 543 { 544 return SetStatus(DllExports::GdipDrawRectangle(nativeGraphics, pen ? getNat(pen) : NULL, x, y, width, height)); 545 } 546 547 Status DrawRectangle(const Pen * pen,const RectF & rect)548 DrawRectangle(const Pen *pen, const RectF &rect) 549 { 550 return SetStatus(DllExports::GdipDrawRectangleI( 551 nativeGraphics, pen ? getNat(pen) : NULL, rect.X, rect.Y, rect.Width, rect.Height)); 552 } 553 554 Status DrawRectangles(const Pen * pen,const Rect * rects,INT count)555 DrawRectangles(const Pen *pen, const Rect *rects, INT count) 556 { 557 return SetStatus(DllExports::GdipDrawRectanglesI(nativeGraphics, pen ? getNat(pen) : NULL, rects, count)); 558 } 559 560 Status DrawRectangles(const Pen * pen,const RectF * rects,INT count)561 DrawRectangles(const Pen *pen, const RectF *rects, INT count) 562 { 563 return SetStatus(DllExports::GdipDrawRectangles(nativeGraphics, pen ? getNat(pen) : NULL, rects, count)); 564 } 565 566 Status DrawString(const WCHAR * string,INT length,const Font * font,const RectF & layoutRect,const StringFormat * stringFormat,const Brush * brush)567 DrawString( 568 const WCHAR *string, 569 INT length, 570 const Font *font, 571 const RectF &layoutRect, 572 const StringFormat *stringFormat, 573 const Brush *brush) 574 { 575 return SetStatus(DllExports::GdipDrawString( 576 nativeGraphics, string, length, font ? getNat(font) : NULL, &layoutRect, 577 stringFormat ? getNat(stringFormat) : NULL, brush ? brush->nativeBrush : NULL)); 578 } 579 580 Status DrawString(const WCHAR * string,INT length,const Font * font,const PointF & origin,const Brush * brush)581 DrawString(const WCHAR *string, INT length, const Font *font, const PointF &origin, const Brush *brush) 582 { 583 RectF rect(origin.X, origin.Y, 0.0f, 0.0f); 584 return SetStatus(DllExports::GdipDrawString( 585 nativeGraphics, string, length, font ? getNat(font) : NULL, &rect, NULL, brush ? getNat(brush) : NULL)); 586 } 587 588 Status DrawString(const WCHAR * string,INT length,const Font * font,const PointF & origin,const StringFormat * stringFormat,const Brush * brush)589 DrawString( 590 const WCHAR *string, 591 INT length, 592 const Font *font, 593 const PointF &origin, 594 const StringFormat *stringFormat, 595 const Brush *brush) 596 { 597 RectF rect(origin.X, origin.Y, 0.0f, 0.0f); 598 return SetStatus(DllExports::GdipDrawString( 599 nativeGraphics, string, length, font ? getNat(font) : NULL, &rect, 600 stringFormat ? getNat(stringFormat) : NULL, brush ? getNat(brush) : NULL)); 601 } 602 603 Status EndContainer(GraphicsContainer state)604 EndContainer(GraphicsContainer state) 605 { 606 return SetStatus(DllExports::GdipEndContainer(nativeGraphics, state)); 607 } 608 609 Status 610 EnumerateMetafile( 611 const Metafile *metafile, 612 const PointF &destPoint, 613 EnumerateMetafileProc callback, 614 VOID *callbackData = NULL, 615 const ImageAttributes *imageAttributes = NULL) 616 { 617 return SetStatus(NotImplemented); 618 } 619 620 Status 621 EnumerateMetafile( 622 const Metafile *metafile, 623 const Point *destPoints, 624 INT count, 625 EnumerateMetafileProc callback, 626 VOID *callbackData = NULL, 627 const ImageAttributes *imageAttributes = NULL) 628 { 629 return SetStatus(NotImplemented); 630 } 631 632 Status 633 EnumerateMetafile( 634 const Metafile *metafile, 635 const Point &destPoint, 636 const Rect &srcRect, 637 Unit srcUnit, 638 EnumerateMetafileProc callback, 639 VOID *callbackData = NULL, 640 const ImageAttributes *imageAttributes = NULL) 641 { 642 return SetStatus(NotImplemented); 643 } 644 645 Status 646 EnumerateMetafile( 647 const Metafile *metafile, 648 const PointF *destPoints, 649 INT count, 650 EnumerateMetafileProc callback, 651 VOID *callbackData = NULL, 652 const ImageAttributes *imageAttributes = NULL) 653 { 654 return SetStatus(NotImplemented); 655 } 656 657 Status 658 EnumerateMetafile( 659 const Metafile *metafile, 660 const Rect &destRect, 661 EnumerateMetafileProc callback, 662 VOID *callbackData = NULL, 663 const ImageAttributes *imageAttributes = NULL) 664 { 665 return SetStatus(NotImplemented); 666 } 667 668 Status 669 EnumerateMetafile( 670 const Metafile *metafile, 671 const RectF &destRect, 672 const RectF &srcRect, 673 Unit srcUnit, 674 EnumerateMetafileProc callback, 675 VOID *callbackData = NULL, 676 const ImageAttributes *imageAttributes = NULL) 677 { 678 return SetStatus(NotImplemented); 679 } 680 681 Status 682 EnumerateMetafile( 683 const Metafile *metafile, 684 const RectF &destRect, 685 EnumerateMetafileProc callback, 686 VOID *callbackData = NULL, 687 const ImageAttributes *imageAttributes = NULL) 688 { 689 return SetStatus(NotImplemented); 690 } 691 692 Status 693 EnumerateMetafile( 694 const Metafile *metafile, 695 const PointF &destPoint, 696 const RectF &srcRect, 697 Unit srcUnit, 698 EnumerateMetafileProc callback, 699 VOID *callbackData = NULL, 700 const ImageAttributes *imageAttributes = NULL) 701 { 702 return SetStatus(NotImplemented); 703 } 704 705 Status 706 EnumerateMetafile( 707 const Metafile *metafile, 708 const Point *destPoints, 709 INT count, 710 const Rect &srcRect, 711 Unit srcUnit, 712 EnumerateMetafileProc callback, 713 VOID *callbackData = NULL, 714 const ImageAttributes *imageAttributes = NULL) 715 { 716 return SetStatus(NotImplemented); 717 } 718 719 Status 720 EnumerateMetafile( 721 const Metafile *metafile, 722 const Rect &destRect, 723 const Rect &srcRect, 724 Unit srcUnit, 725 EnumerateMetafileProc callback, 726 VOID *callbackData = NULL, 727 const ImageAttributes *imageAttributes = NULL) 728 { 729 return SetStatus(NotImplemented); 730 } 731 732 Status 733 EnumerateMetafile( 734 const Metafile *metafile, 735 const PointF *destPoints, 736 INT count, 737 const RectF &srcRect, 738 Unit srcUnit, 739 EnumerateMetafileProc callback, 740 VOID *callbackData = NULL, 741 const ImageAttributes *imageAttributes = NULL) 742 { 743 return SetStatus(NotImplemented); 744 } 745 746 Status 747 EnumerateMetafile( 748 const Metafile *metafile, 749 const Point &destPoint, 750 EnumerateMetafileProc callback, 751 VOID *callbackData = NULL, 752 const ImageAttributes *imageAttributes = NULL) 753 { 754 return SetStatus(NotImplemented); 755 } 756 757 Status ExcludeClip(const Rect & rect)758 ExcludeClip(const Rect &rect) 759 { 760 return SetStatus( 761 DllExports::GdipSetClipRectI(nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, CombineModeExclude)); 762 } 763 764 Status ExcludeClip(const RectF & rect)765 ExcludeClip(const RectF &rect) 766 { 767 return SetStatus( 768 DllExports::GdipSetClipRect(nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, CombineModeExclude)); 769 } 770 771 Status ExcludeClip(const Region * region)772 ExcludeClip(const Region *region) 773 { 774 return SetStatus(DllExports::GdipSetClipRegion(nativeGraphics, getNat(region), CombineModeExclude)); 775 } 776 777 Status FillClosedCurve(const Brush * brush,const Point * points,INT count)778 FillClosedCurve(const Brush *brush, const Point *points, INT count) 779 { 780 return SetStatus(DllExports::GdipFillClosedCurveI(nativeGraphics, brush ? getNat(brush) : NULL, points, count)); 781 } 782 783 Status FillClosedCurve(const Brush * brush,const Point * points,INT count,FillMode fillMode,REAL tension)784 FillClosedCurve(const Brush *brush, const Point *points, INT count, FillMode fillMode, REAL tension) 785 { 786 return SetStatus(DllExports::GdipFillClosedCurve2I( 787 nativeGraphics, brush ? getNat(brush) : NULL, points, count, tension, fillMode)); 788 } 789 790 Status FillClosedCurve(const Brush * brush,const PointF * points,INT count)791 FillClosedCurve(const Brush *brush, const PointF *points, INT count) 792 { 793 return SetStatus(DllExports::GdipFillClosedCurve(nativeGraphics, brush ? getNat(brush) : NULL, points, count)); 794 } 795 796 Status FillClosedCurve(const Brush * brush,const PointF * points,INT count,FillMode fillMode,REAL tension)797 FillClosedCurve(const Brush *brush, const PointF *points, INT count, FillMode fillMode, REAL tension) 798 { 799 return SetStatus(DllExports::GdipFillClosedCurve2( 800 nativeGraphics, brush ? getNat(brush) : NULL, points, count, tension, fillMode)); 801 } 802 803 Status FillEllipse(const Brush * brush,const Rect & rect)804 FillEllipse(const Brush *brush, const Rect &rect) 805 { 806 return SetStatus(DllExports::GdipFillEllipseI( 807 nativeGraphics, brush ? getNat(brush) : NULL, rect.X, rect.Y, rect.Width, rect.Height)); 808 } 809 810 Status FillEllipse(const Brush * brush,REAL x,REAL y,REAL width,REAL height)811 FillEllipse(const Brush *brush, REAL x, REAL y, REAL width, REAL height) 812 { 813 return SetStatus( 814 DllExports::GdipFillEllipse(nativeGraphics, brush ? getNat(brush) : NULL, x, y, width, height)); 815 } 816 817 Status FillEllipse(const Brush * brush,const RectF & rect)818 FillEllipse(const Brush *brush, const RectF &rect) 819 { 820 return SetStatus(DllExports::GdipFillEllipse( 821 nativeGraphics, brush ? getNat(brush) : NULL, rect.X, rect.Y, rect.Width, rect.Height)); 822 } 823 824 Status FillEllipse(const Brush * brush,INT x,INT y,INT width,INT height)825 FillEllipse(const Brush *brush, INT x, INT y, INT width, INT height) 826 { 827 return SetStatus( 828 DllExports::GdipFillEllipseI(nativeGraphics, brush ? getNat(brush) : NULL, x, y, width, height)); 829 } 830 831 Status FillPath(const Brush * brush,const GraphicsPath * path)832 FillPath(const Brush *brush, const GraphicsPath *path) 833 { 834 return SetStatus(DllExports::GdipFillPath(nativeGraphics, getNat(brush), getNat(path))); 835 } 836 837 Status FillPie(const Brush * brush,const Rect & rect,REAL startAngle,REAL sweepAngle)838 FillPie(const Brush *brush, const Rect &rect, REAL startAngle, REAL sweepAngle) 839 { 840 return SetStatus(DllExports::GdipFillPieI( 841 nativeGraphics, brush ? getNat(brush) : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, 842 sweepAngle)); 843 } 844 845 Status FillPie(const Brush * brush,INT x,INT y,INT width,INT height,REAL startAngle,REAL sweepAngle)846 FillPie(const Brush *brush, INT x, INT y, INT width, INT height, REAL startAngle, REAL sweepAngle) 847 { 848 return SetStatus(DllExports::GdipFillPieI( 849 nativeGraphics, brush ? getNat(brush) : NULL, x, y, width, height, startAngle, sweepAngle)); 850 } 851 852 Status FillPie(const Brush * brush,REAL x,REAL y,REAL width,REAL height,REAL startAngle,REAL sweepAngle)853 FillPie(const Brush *brush, REAL x, REAL y, REAL width, REAL height, REAL startAngle, REAL sweepAngle) 854 { 855 return SetStatus(DllExports::GdipFillPie( 856 nativeGraphics, brush ? getNat(brush) : NULL, x, y, width, height, startAngle, sweepAngle)); 857 } 858 859 Status FillPie(const Brush * brush,RectF & rect,REAL startAngle,REAL sweepAngle)860 FillPie(const Brush *brush, RectF &rect, REAL startAngle, REAL sweepAngle) 861 { 862 return SetStatus(DllExports::GdipFillPie( 863 nativeGraphics, brush ? getNat(brush) : NULL, rect.X, rect.Y, rect.Width, rect.Height, startAngle, 864 sweepAngle)); 865 } 866 867 Status FillPolygon(const Brush * brush,const Point * points,INT count)868 FillPolygon(const Brush *brush, const Point *points, INT count) 869 { 870 return SetStatus(DllExports::GdipFillPolygon2I(nativeGraphics, brush ? getNat(brush) : NULL, points, count)); 871 } 872 873 Status FillPolygon(const Brush * brush,const PointF * points,INT count)874 FillPolygon(const Brush *brush, const PointF *points, INT count) 875 { 876 return SetStatus(DllExports::GdipFillPolygon2(nativeGraphics, brush ? getNat(brush) : NULL, points, count)); 877 } 878 879 Status FillPolygon(const Brush * brush,const Point * points,INT count,FillMode fillMode)880 FillPolygon(const Brush *brush, const Point *points, INT count, FillMode fillMode) 881 { 882 return SetStatus( 883 DllExports::GdipFillPolygonI(nativeGraphics, brush ? getNat(brush) : NULL, points, count, fillMode)); 884 } 885 886 Status FillPolygon(const Brush * brush,const PointF * points,INT count,FillMode fillMode)887 FillPolygon(const Brush *brush, const PointF *points, INT count, FillMode fillMode) 888 { 889 return SetStatus( 890 DllExports::GdipFillPolygon(nativeGraphics, brush ? getNat(brush) : NULL, points, count, fillMode)); 891 } 892 893 Status FillRectangle(const Brush * brush,const Rect & rect)894 FillRectangle(const Brush *brush, const Rect &rect) 895 { 896 return SetStatus(DllExports::GdipFillRectangleI( 897 nativeGraphics, brush ? getNat(brush) : NULL, rect.X, rect.Y, rect.Width, rect.Height)); 898 } 899 900 Status FillRectangle(const Brush * brush,const RectF & rect)901 FillRectangle(const Brush *brush, const RectF &rect) 902 { 903 return SetStatus(DllExports::GdipFillRectangle( 904 nativeGraphics, brush ? getNat(brush) : NULL, rect.X, rect.Y, rect.Width, rect.Height)); 905 } 906 907 Status FillRectangle(const Brush * brush,REAL x,REAL y,REAL width,REAL height)908 FillRectangle(const Brush *brush, REAL x, REAL y, REAL width, REAL height) 909 { 910 return SetStatus( 911 DllExports::GdipFillRectangle(nativeGraphics, brush ? getNat(brush) : NULL, x, y, width, height)); 912 } 913 914 Status FillRectangle(const Brush * brush,INT x,INT y,INT width,INT height)915 FillRectangle(const Brush *brush, INT x, INT y, INT width, INT height) 916 { 917 return SetStatus( 918 DllExports::GdipFillRectangleI(nativeGraphics, brush ? getNat(brush) : NULL, x, y, width, height)); 919 } 920 921 Status FillRectangles(const Brush * brush,const Rect * rects,INT count)922 FillRectangles(const Brush *brush, const Rect *rects, INT count) 923 { 924 return SetStatus(DllExports::GdipFillRectanglesI(nativeGraphics, brush ? getNat(brush) : NULL, rects, count)); 925 } 926 927 Status FillRectangles(const Brush * brush,const RectF * rects,INT count)928 FillRectangles(const Brush *brush, const RectF *rects, INT count) 929 { 930 return SetStatus(DllExports::GdipFillRectangles(nativeGraphics, brush ? getNat(brush) : NULL, rects, count)); 931 } 932 933 Status FillRegion(const Brush * brush,const Region * region)934 FillRegion(const Brush *brush, const Region *region) 935 { 936 return SetStatus(DllExports::GdipFillRegion(nativeGraphics, getNat(brush), getNat(region))); 937 } 938 939 VOID Flush(FlushIntention intention)940 Flush(FlushIntention intention) 941 { 942 DllExports::GdipFlush(nativeGraphics, intention); 943 } 944 945 static Graphics * FromHDC(HDC hdc)946 FromHDC(HDC hdc) 947 { 948 return new Graphics(hdc); 949 } 950 951 static Graphics * FromHDC(HDC hdc,HANDLE hDevice)952 FromHDC(HDC hdc, HANDLE hDevice) 953 { 954 return new Graphics(hdc, hDevice); 955 } 956 957 static Graphics * FromHWND(HWND hWnd,BOOL icm)958 FromHWND(HWND hWnd, BOOL icm) 959 { 960 return new Graphics(hWnd, icm); 961 } 962 963 static Graphics * FromImage(Image * image)964 FromImage(Image *image) 965 { 966 return new Graphics(image); 967 } 968 969 Status GetClip(Region * region)970 GetClip(Region *region) const 971 { 972 return SetStatus(DllExports::GdipGetClip(nativeGraphics, getNat(region))); 973 } 974 975 Status GetClipBounds(Rect * rect)976 GetClipBounds(Rect *rect) const 977 { 978 return SetStatus(DllExports::GdipGetClipBoundsI(nativeGraphics, rect)); 979 } 980 981 Status GetClipBounds(RectF * rect)982 GetClipBounds(RectF *rect) const 983 { 984 return SetStatus(DllExports::GdipGetClipBounds(nativeGraphics, rect)); 985 } 986 987 CompositingMode GetCompositingMode()988 GetCompositingMode() const 989 { 990 CompositingMode compositingMode; 991 SetStatus(DllExports::GdipGetCompositingMode(nativeGraphics, &compositingMode)); 992 return compositingMode; 993 } 994 995 CompositingQuality GetCompositingQuality()996 GetCompositingQuality() const 997 { 998 CompositingQuality compositingQuality; 999 SetStatus(DllExports::GdipGetCompositingQuality(nativeGraphics, &compositingQuality)); 1000 return compositingQuality; 1001 } 1002 1003 REAL GetDpiX()1004 GetDpiX() const 1005 { 1006 REAL dpi; 1007 SetStatus(DllExports::GdipGetDpiX(nativeGraphics, &dpi)); 1008 return dpi; 1009 } 1010 1011 REAL GetDpiY()1012 GetDpiY() const 1013 { 1014 REAL dpi; 1015 SetStatus(DllExports::GdipGetDpiY(nativeGraphics, &dpi)); 1016 return dpi; 1017 } 1018 1019 static HPALETTE GetHalftonePalette()1020 GetHalftonePalette() 1021 { 1022 return NULL; 1023 } 1024 1025 HDC GetHDC()1026 GetHDC() 1027 { 1028 HDC hdc = NULL; 1029 SetStatus(DllExports::GdipGetDC(nativeGraphics, &hdc)); 1030 return hdc; 1031 } 1032 1033 InterpolationMode GetInterpolationMode()1034 GetInterpolationMode() const 1035 { 1036 InterpolationMode interpolationMode; 1037 SetStatus(DllExports::GdipGetInterpolationMode(nativeGraphics, &interpolationMode)); 1038 return interpolationMode; 1039 } 1040 1041 Status GetLastStatus()1042 GetLastStatus() const 1043 { 1044 return lastStatus; 1045 } 1046 1047 Status GetNearestColor(Color * color)1048 GetNearestColor(Color *color) const 1049 { 1050 if (color == NULL) 1051 return SetStatus(InvalidParameter); 1052 1053 ARGB argb = color->GetValue(); 1054 SetStatus(DllExports::GdipGetNearestColor(nativeGraphics, &argb)); 1055 1056 color->SetValue(argb); 1057 return lastStatus; 1058 } 1059 1060 REAL GetPageScale()1061 GetPageScale() const 1062 { 1063 REAL scale; 1064 SetStatus(DllExports::GdipGetPageScale(nativeGraphics, &scale)); 1065 return scale; 1066 } 1067 1068 Unit GetPageUnit()1069 GetPageUnit() const 1070 { 1071 Unit unit; 1072 SetStatus(DllExports::GdipGetPageUnit(nativeGraphics, &unit)); 1073 return unit; 1074 } 1075 1076 PixelOffsetMode GetPixelOffsetMode()1077 GetPixelOffsetMode() const 1078 { 1079 PixelOffsetMode pixelOffsetMode; 1080 SetStatus(DllExports::GdipGetPixelOffsetMode(nativeGraphics, &pixelOffsetMode)); 1081 return pixelOffsetMode; 1082 } 1083 1084 Status GetRenderingOrigin(INT * x,INT * y)1085 GetRenderingOrigin(INT *x, INT *y) const 1086 { 1087 return SetStatus(DllExports::GdipGetRenderingOrigin(nativeGraphics, x, y)); 1088 } 1089 1090 SmoothingMode GetSmoothingMode()1091 GetSmoothingMode() const 1092 { 1093 SmoothingMode smoothingMode; 1094 SetStatus(DllExports::GdipGetSmoothingMode(nativeGraphics, &smoothingMode)); 1095 return smoothingMode; 1096 } 1097 1098 UINT GetTextContrast()1099 GetTextContrast() const 1100 { 1101 UINT contrast; 1102 SetStatus(DllExports::GdipGetTextContrast(nativeGraphics, &contrast)); 1103 return contrast; 1104 } 1105 1106 TextRenderingHint GetTextRenderingHint()1107 GetTextRenderingHint() const 1108 { 1109 TextRenderingHint mode; 1110 SetStatus(DllExports::GdipGetTextRenderingHint(nativeGraphics, &mode)); 1111 return mode; 1112 } 1113 1114 UINT GetTextGammaValue()1115 GetTextGammaValue() const 1116 { 1117 #if 1 1118 return SetStatus(NotImplemented); // FIXME 1119 #else 1120 UINT gammaValue; 1121 SetStatus(DllExports::GdipGetTextGammaValue(nativeGraphics, &gammaValue)); 1122 return gammaValue; 1123 #endif 1124 } 1125 1126 Status GetTransform(Matrix * matrix)1127 GetTransform(Matrix *matrix) const 1128 { 1129 return SetStatus(DllExports::GdipGetWorldTransform(nativeGraphics, getNat(matrix))); 1130 } 1131 1132 Status GetVisibleClipBounds(Rect * rect)1133 GetVisibleClipBounds(Rect *rect) const 1134 { 1135 return SetStatus(DllExports::GdipGetVisibleClipBoundsI(nativeGraphics, rect)); 1136 } 1137 1138 Status GetVisibleClipBounds(RectF * rect)1139 GetVisibleClipBounds(RectF *rect) const 1140 { 1141 return SetStatus(DllExports::GdipGetVisibleClipBounds(nativeGraphics, rect)); 1142 } 1143 1144 Status IntersectClip(const Rect & rect)1145 IntersectClip(const Rect &rect) 1146 { 1147 return SetStatus(DllExports::GdipSetClipRectI( 1148 nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, CombineModeIntersect)); 1149 } 1150 1151 Status IntersectClip(const Region * region)1152 IntersectClip(const Region *region) 1153 { 1154 return SetStatus(DllExports::GdipSetClipRegion(nativeGraphics, getNat(region), CombineModeIntersect)); 1155 } 1156 1157 Status IntersectClip(const RectF & rect)1158 IntersectClip(const RectF &rect) 1159 { 1160 return SetStatus( 1161 DllExports::GdipSetClipRect(nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, CombineModeIntersect)); 1162 } 1163 1164 BOOL IsClipEmpty()1165 IsClipEmpty() const 1166 { 1167 BOOL result; 1168 SetStatus(DllExports::GdipIsClipEmpty(nativeGraphics, &result)); 1169 return result; 1170 } 1171 1172 BOOL IsVisible(const Point & point)1173 IsVisible(const Point &point) const 1174 { 1175 BOOL result; 1176 SetStatus(DllExports::GdipIsVisiblePointI(nativeGraphics, point.X, point.Y, &result)); 1177 return result; 1178 } 1179 1180 BOOL IsVisible(const Rect & rect)1181 IsVisible(const Rect &rect) const 1182 { 1183 BOOL result; 1184 SetStatus(DllExports::GdipIsVisibleRectI(nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, &result)); 1185 return result; 1186 } 1187 1188 BOOL IsVisible(REAL x,REAL y)1189 IsVisible(REAL x, REAL y) const 1190 { 1191 BOOL result; 1192 SetStatus(DllExports::GdipIsVisiblePoint(nativeGraphics, x, y, &result)); 1193 return result; 1194 } 1195 1196 BOOL IsVisible(const RectF & rect)1197 IsVisible(const RectF &rect) const 1198 { 1199 BOOL result; 1200 SetStatus(DllExports::GdipIsVisibleRect(nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, &result)); 1201 return result; 1202 } 1203 1204 BOOL IsVisible(INT x,INT y,INT width,INT height)1205 IsVisible(INT x, INT y, INT width, INT height) const 1206 { 1207 BOOL result; 1208 SetStatus(DllExports::GdipIsVisibleRectI(nativeGraphics, x, y, width, height, &result)); 1209 return result; 1210 } 1211 1212 BOOL IsVisible(INT x,INT y)1213 IsVisible(INT x, INT y) const 1214 { 1215 BOOL result; 1216 SetStatus(DllExports::GdipIsVisiblePointI(nativeGraphics, x, y, &result)); 1217 return result; 1218 } 1219 1220 BOOL IsVisible(const PointF & point)1221 IsVisible(const PointF &point) const 1222 { 1223 BOOL result; 1224 SetStatus(DllExports::GdipIsVisiblePoint(nativeGraphics, point.X, point.Y, &result)); 1225 return result; 1226 } 1227 1228 BOOL IsVisible(REAL x,REAL y,REAL width,REAL height)1229 IsVisible(REAL x, REAL y, REAL width, REAL height) const 1230 { 1231 BOOL result; 1232 SetStatus(DllExports::GdipIsVisibleRect(nativeGraphics, x, y, width, height, &result)); 1233 return result; 1234 } 1235 1236 BOOL IsVisibleClipEmpty()1237 IsVisibleClipEmpty() const 1238 { 1239 BOOL flag = FALSE; 1240 SetStatus(DllExports::GdipIsVisibleClipEmpty(nativeGraphics, &flag)); 1241 return flag; 1242 } 1243 1244 Status MeasureCharacterRanges(const WCHAR * string,INT length,const Font * font,const RectF & layoutRect,const StringFormat * stringFormat,INT regionCount,Region * regions)1245 MeasureCharacterRanges( 1246 const WCHAR *string, 1247 INT length, 1248 const Font *font, 1249 const RectF &layoutRect, 1250 const StringFormat *stringFormat, 1251 INT regionCount, 1252 Region *regions) const 1253 { 1254 return NotImplemented; 1255 } 1256 1257 Status MeasureDriverString(const UINT16 * text,INT length,const Font * font,const PointF * positions,INT flags,const Matrix * matrix,RectF * boundingBox)1258 MeasureDriverString( 1259 const UINT16 *text, 1260 INT length, 1261 const Font *font, 1262 const PointF *positions, 1263 INT flags, 1264 const Matrix *matrix, 1265 RectF *boundingBox) const 1266 { 1267 return NotImplemented; 1268 } 1269 1270 Status MeasureString(const WCHAR * string,INT length,const Font * font,const RectF & layoutRect,RectF * boundingBox)1271 MeasureString(const WCHAR *string, INT length, const Font *font, const RectF &layoutRect, RectF *boundingBox) const 1272 { 1273 return NotImplemented; 1274 } 1275 1276 Status MeasureString(const WCHAR * string,INT length,const Font * font,const PointF & origin,const StringFormat * stringFormat,RectF * boundingBox)1277 MeasureString( 1278 const WCHAR *string, 1279 INT length, 1280 const Font *font, 1281 const PointF &origin, 1282 const StringFormat *stringFormat, 1283 RectF *boundingBox) const 1284 { 1285 return NotImplemented; 1286 } 1287 1288 Status MeasureString(const WCHAR * string,INT length,const Font * font,const RectF & layoutRect,const StringFormat * stringFormat,RectF * boundingBox,INT * codepointsFitted,INT * linesFilled)1289 MeasureString( 1290 const WCHAR *string, 1291 INT length, 1292 const Font *font, 1293 const RectF &layoutRect, 1294 const StringFormat *stringFormat, 1295 RectF *boundingBox, 1296 INT *codepointsFitted, 1297 INT *linesFilled) const 1298 { 1299 return NotImplemented; 1300 } 1301 1302 Status MeasureString(const WCHAR * string,INT length,const Font * font,const SizeF & layoutRectSize,const StringFormat * stringFormat,SizeF * size,INT * codepointsFitted,INT * linesFilled)1303 MeasureString( 1304 const WCHAR *string, 1305 INT length, 1306 const Font *font, 1307 const SizeF &layoutRectSize, 1308 const StringFormat *stringFormat, 1309 SizeF *size, 1310 INT *codepointsFitted, 1311 INT *linesFilled) const 1312 { 1313 return NotImplemented; 1314 } 1315 1316 Status MeasureString(const WCHAR * string,INT length,const Font * font,const PointF & origin,RectF * boundingBox)1317 MeasureString(const WCHAR *string, INT length, const Font *font, const PointF &origin, RectF *boundingBox) const 1318 { 1319 return NotImplemented; 1320 } 1321 1322 Status MultiplyTransform(Matrix * matrix,MatrixOrder order)1323 MultiplyTransform(Matrix *matrix, MatrixOrder order) 1324 { 1325 return SetStatus(DllExports::GdipMultiplyWorldTransform(nativeGraphics, getNat(matrix), order)); 1326 } 1327 1328 VOID ReleaseHDC(HDC hdc)1329 ReleaseHDC(HDC hdc) 1330 { 1331 SetStatus(DllExports::GdipReleaseDC(nativeGraphics, hdc)); 1332 } 1333 1334 Status ResetClip()1335 ResetClip() 1336 { 1337 return SetStatus(DllExports::GdipResetClip(nativeGraphics)); 1338 } 1339 1340 Status ResetTransform()1341 ResetTransform() 1342 { 1343 return SetStatus(DllExports::GdipResetWorldTransform(nativeGraphics)); 1344 } 1345 1346 Status Restore(GraphicsState gstate)1347 Restore(GraphicsState gstate) 1348 { 1349 return SetStatus(DllExports::GdipRestoreGraphics(nativeGraphics, gstate)); 1350 } 1351 1352 Status 1353 RotateTransform(REAL angle, MatrixOrder order = MatrixOrderPrepend) 1354 { 1355 return SetStatus(DllExports::GdipRotateWorldTransform(nativeGraphics, angle, order)); 1356 } 1357 1358 GraphicsState Save()1359 Save() 1360 { 1361 GraphicsState gstate; 1362 SetStatus(DllExports::GdipSaveGraphics(nativeGraphics, &gstate)); 1363 return gstate; 1364 } 1365 1366 Status 1367 ScaleTransform(REAL sx, REAL sy, MatrixOrder order = MatrixOrderPrepend) 1368 { 1369 return SetStatus(DllExports::GdipScaleWorldTransform(nativeGraphics, sx, sy, order)); 1370 } 1371 1372 Status 1373 SetClip(const Graphics *g, CombineMode combineMode = CombineModeReplace) 1374 { 1375 return SetStatus(DllExports::GdipSetClipGraphics(nativeGraphics, g ? getNat(g) : NULL, combineMode)); 1376 } 1377 1378 Status 1379 SetClip(const GraphicsPath *path, CombineMode combineMode = CombineModeReplace) 1380 { 1381 return SetStatus(DllExports::GdipSetClipPath(nativeGraphics, getNat(path), combineMode)); 1382 } 1383 1384 Status 1385 SetClip(const Region *region, CombineMode combineMode = CombineModeReplace) 1386 { 1387 return SetStatus(DllExports::GdipSetClipRegion(nativeGraphics, getNat(region), combineMode)); 1388 } 1389 1390 Status 1391 SetClip(const Rect &rect, CombineMode combineMode = CombineModeReplace) 1392 { 1393 return SetStatus( 1394 DllExports::GdipSetClipRectI(nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, combineMode)); 1395 } 1396 1397 Status 1398 SetClip(HRGN hRgn, CombineMode combineMode = CombineModeReplace) 1399 { 1400 return SetStatus(DllExports::GdipSetClipHrgn(nativeGraphics, hRgn, combineMode)); 1401 } 1402 1403 Status 1404 SetClip(const RectF &rect, CombineMode combineMode = CombineModeReplace) 1405 { 1406 return SetStatus( 1407 DllExports::GdipSetClipRect(nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, combineMode)); 1408 } 1409 1410 Status SetCompositingMode(CompositingMode compositingMode)1411 SetCompositingMode(CompositingMode compositingMode) 1412 { 1413 return SetStatus(DllExports::GdipSetCompositingMode(nativeGraphics, compositingMode)); 1414 } 1415 1416 Status SetCompositingQuality(CompositingQuality compositingQuality)1417 SetCompositingQuality(CompositingQuality compositingQuality) 1418 { 1419 return SetStatus(DllExports::GdipSetCompositingQuality(nativeGraphics, compositingQuality)); 1420 } 1421 1422 Status SetInterpolationMode(InterpolationMode interpolationMode)1423 SetInterpolationMode(InterpolationMode interpolationMode) 1424 { 1425 return SetStatus(DllExports::GdipSetInterpolationMode(nativeGraphics, interpolationMode)); 1426 } 1427 1428 Status SetPageScale(REAL scale)1429 SetPageScale(REAL scale) 1430 { 1431 return SetStatus(DllExports::GdipSetPageScale(nativeGraphics, scale)); 1432 } 1433 1434 Status SetPageUnit(Unit unit)1435 SetPageUnit(Unit unit) 1436 { 1437 return SetStatus(DllExports::GdipSetPageUnit(nativeGraphics, unit)); 1438 } 1439 1440 Status SetPixelOffsetMode(PixelOffsetMode pixelOffsetMode)1441 SetPixelOffsetMode(PixelOffsetMode pixelOffsetMode) 1442 { 1443 return SetStatus(DllExports::GdipSetPixelOffsetMode(nativeGraphics, pixelOffsetMode)); 1444 } 1445 1446 Status SetRenderingOrigin(INT x,INT y)1447 SetRenderingOrigin(INT x, INT y) 1448 { 1449 return SetStatus(DllExports::GdipSetRenderingOrigin(nativeGraphics, x, y)); 1450 } 1451 1452 Status SetSmoothingMode(SmoothingMode smoothingMode)1453 SetSmoothingMode(SmoothingMode smoothingMode) 1454 { 1455 return SetStatus(DllExports::GdipSetSmoothingMode(nativeGraphics, smoothingMode)); 1456 } 1457 1458 Status SetTextContrast(UINT contrast)1459 SetTextContrast(UINT contrast) 1460 { 1461 return SetStatus(DllExports::GdipSetTextContrast(nativeGraphics, contrast)); 1462 } 1463 1464 Status SetTextRenderingHint(TextRenderingHint newMode)1465 SetTextRenderingHint(TextRenderingHint newMode) 1466 { 1467 return SetStatus(DllExports::GdipSetTextRenderingHint(nativeGraphics, newMode)); 1468 } 1469 1470 Status SetTransform(const Matrix * matrix)1471 SetTransform(const Matrix *matrix) 1472 { 1473 return SetStatus(DllExports::GdipSetWorldTransform(nativeGraphics, getNat(matrix))); 1474 } 1475 1476 Status TransformPoints(CoordinateSpace destSpace,CoordinateSpace srcSpace,Point * pts,INT count)1477 TransformPoints(CoordinateSpace destSpace, CoordinateSpace srcSpace, Point *pts, INT count) 1478 { 1479 return SetStatus(DllExports::GdipTransformPointsI(nativeGraphics, destSpace, srcSpace, pts, count)); 1480 } 1481 1482 Status TransformPoints(CoordinateSpace destSpace,CoordinateSpace srcSpace,PointF * pts,INT count)1483 TransformPoints(CoordinateSpace destSpace, CoordinateSpace srcSpace, PointF *pts, INT count) 1484 { 1485 return SetStatus(DllExports::GdipTransformPoints(nativeGraphics, destSpace, srcSpace, pts, count)); 1486 } 1487 1488 Status TranslateClip(INT dx,INT dy)1489 TranslateClip(INT dx, INT dy) 1490 { 1491 return SetStatus(DllExports::GdipTranslateClipI(nativeGraphics, dx, dy)); 1492 } 1493 1494 Status TranslateClip(REAL dx,REAL dy)1495 TranslateClip(REAL dx, REAL dy) 1496 { 1497 return SetStatus(DllExports::GdipTranslateClip(nativeGraphics, dx, dy)); 1498 } 1499 1500 Status 1501 TranslateTransform(REAL dx, REAL dy, MatrixOrder order = MatrixOrderPrepend) 1502 { 1503 return SetStatus(DllExports::GdipTranslateWorldTransform(nativeGraphics, dx, dy, order)); 1504 } 1505 1506 private: 1507 Status SetStatus(Status status)1508 SetStatus(Status status) const 1509 { 1510 if (status != Ok) 1511 lastStatus = status; 1512 return status; 1513 } 1514 1515 VOID SetNativeGraphics(GpGraphics * graphics)1516 SetNativeGraphics(GpGraphics *graphics) 1517 { 1518 nativeGraphics = graphics; 1519 } 1520 1521 protected: 1522 GpGraphics *nativeGraphics; 1523 mutable Status lastStatus; 1524 1525 // get native 1526 friend inline GpGraphics *& getNat(const Graphics * graphics)1527 getNat(const Graphics *graphics) 1528 { 1529 return const_cast<Graphics *>(graphics)->nativeGraphics; 1530 } 1531 }; 1532 1533 #endif /* _GDIPLUSGRAPHICS_H */ 1534