2 // System.Drawing.Graphics.cs
5 // Gonzalo Paniagua Javier (gonzalo@ximian.com) (stubbed out)
6 // Alexandre Pigolkine(pigolkine@gmx.de)
7 // Jordi Mas i Hernandez (jordi@ximian.com)
9 // Copyright (C) 2003 Ximian, Inc. (http://www.ximian.com)
11 // Copyright (C) 2004-2005 Novell, Inc. (http://www.novell.com)
13 // Permission is hereby granted, free of charge, to any person obtaining
14 // a copy of this software and associated documentation files (the
15 // "Software"), to deal in the Software without restriction, including
16 // without limitation the rights to use, copy, modify, merge, publish,
17 // distribute, sublicense, and/or sell copies of the Software, and to
18 // permit persons to whom the Software is furnished to do so, subject to
19 // the following conditions:
21 // The above copyright notice and this permission notice shall be
22 // included in all copies or substantial portions of the Software.
24 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33 using System.Drawing.Drawing2D;
34 using System.Drawing.Imaging;
35 using System.Drawing.Text;
36 using System.ComponentModel;
37 using System.Runtime.InteropServices;
38 using System.Security.Permissions;
41 namespace System.Drawing
44 public sealed class Graphics : MarshalByRefObject, IDisposable
46 internal IntPtr nativeObject = IntPtr.Zero;
47 private bool disposed = false;
48 private static float defDpiX = 0;
49 private static float defDpiY = 0;
52 public delegate bool EnumerateMetafileProc (EmfPlusRecordType recordType,
56 PlayRecordCallback callbackData);
59 public delegate bool DrawImageAbort (IntPtr callbackData);
61 private Graphics (IntPtr nativeGraphics)
63 nativeObject = nativeGraphics;
71 static internal float systemDpiX {
74 Bitmap bmp = new Bitmap (1, 1);
75 Graphics g = Graphics.FromImage (bmp);
82 static internal float systemDpiY {
85 Bitmap bmp = new Bitmap (1, 1);
86 Graphics g = Graphics.FromImage (bmp);
93 internal IntPtr NativeObject {
104 public void AddMetafileComment (byte [] data)
106 throw new NotImplementedException ();
110 public GraphicsContainer BeginContainer ()
114 status = GDIPlus.GdipBeginContainer2 (nativeObject, out state);
115 GDIPlus.CheckStatus (status);
117 return new GraphicsContainer(state);
120 public GraphicsContainer BeginContainer (Rectangle dstrect, Rectangle srcrect, GraphicsUnit unit)
124 status = GDIPlus.GdipBeginContainerI (nativeObject, dstrect, srcrect, unit, out state);
125 GDIPlus.CheckStatus (status);
127 return new GraphicsContainer (state);
131 public GraphicsContainer BeginContainer (RectangleF dstrect, RectangleF srcrect, GraphicsUnit unit)
135 status = GDIPlus.GdipBeginContainer (nativeObject, dstrect, srcrect, unit, out state);
136 GDIPlus.CheckStatus (status);
138 return new GraphicsContainer (state);
142 public void Clear (Color color)
145 status = GDIPlus.GdipGraphicsClear (nativeObject, color.ToArgb ());
146 GDIPlus.CheckStatus (status);
149 public void Dispose ()
153 status = GDIPlus.GdipDeleteGraphics (nativeObject);
154 nativeObject = IntPtr.Zero;
155 GDIPlus.CheckStatus (status);
161 public void DrawArc (Pen pen, Rectangle rect, float startAngle, float sweepAngle)
163 DrawArc (pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
167 public void DrawArc (Pen pen, RectangleF rect, float startAngle, float sweepAngle)
169 DrawArc (pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
173 public void DrawArc (Pen pen, float x, float y, float width, float height, float startAngle, float sweepAngle)
176 status = GDIPlus.GdipDrawArc (nativeObject, pen.nativeObject,
177 x, y, width, height, startAngle, sweepAngle);
178 GDIPlus.CheckStatus (status);
181 // Microsoft documentation states that the signature for this member should be
182 // public void DrawArc( Pen pen, int x, int y, int width, int height, int startAngle,
183 // int sweepAngle. However, GdipDrawArcI uses also float for the startAngle and sweepAngle params
184 public void DrawArc (Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle)
187 status = GDIPlus.GdipDrawArcI (nativeObject, pen.nativeObject,
188 x, y, width, height, startAngle, sweepAngle);
189 GDIPlus.CheckStatus (status);
192 public void DrawBezier (Pen pen, PointF pt1, PointF pt2, PointF pt3, PointF pt4)
195 status = GDIPlus.GdipDrawBezier (nativeObject, pen.nativeObject,
196 pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X,
197 pt3.Y, pt4.X, pt4.Y);
198 GDIPlus.CheckStatus (status);
201 public void DrawBezier (Pen pen, Point pt1, Point pt2, Point pt3, Point pt4)
204 status = GDIPlus.GdipDrawBezierI (nativeObject, pen.nativeObject,
205 pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X,
206 pt3.Y, pt4.X, pt4.Y);
207 GDIPlus.CheckStatus (status);
210 public void DrawBezier (Pen pen, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4)
213 status = GDIPlus.GdipDrawBezier (nativeObject, pen.nativeObject, x1,
214 y1, x2, y2, x3, y3, x4, y4);
215 GDIPlus.CheckStatus (status);
218 public void DrawBeziers (Pen pen, Point [] points)
220 int length = points.Length;
226 for (int i = 0; i < length; i += 3) {
227 Point p1 = points [i];
228 Point p2 = points [i + 1];
229 Point p3 = points [i + 2];
230 Point p4 = points [i + 3];
232 status = GDIPlus.GdipDrawBezier (nativeObject,
234 p1.X, p1.Y, p2.X, p2.Y,
235 p3.X, p3.Y, p4.X, p4.Y);
236 GDIPlus.CheckStatus (status);
240 public void DrawBeziers (Pen pen, PointF [] points)
242 int length = points.Length;
248 for (int i = 0; i < length; i += 3) {
249 PointF p1 = points [i];
250 PointF p2 = points [i + 1];
251 PointF p3 = points [i + 2];
252 PointF p4 = points [i + 3];
254 status = GDIPlus.GdipDrawBezier (nativeObject,
256 p1.X, p1.Y, p2.X, p2.Y,
257 p3.X, p3.Y, p4.X, p4.Y);
258 GDIPlus.CheckStatus (status);
263 public void DrawClosedCurve (Pen pen, PointF [] points)
266 status = GDIPlus.GdipDrawClosedCurve (nativeObject, pen.nativeObject, points, points.Length);
267 GDIPlus.CheckStatus (status);
270 public void DrawClosedCurve (Pen pen, Point [] points)
273 status = GDIPlus.GdipDrawClosedCurveI (nativeObject, pen.nativeObject, points, points.Length);
274 GDIPlus.CheckStatus (status);
277 public void DrawClosedCurve (Pen pen, Point [] points, float tension, FillMode fillmode)
280 status = GDIPlus.GdipDrawClosedCurve2I (nativeObject, pen.nativeObject, points, points.Length, tension);
281 GDIPlus.CheckStatus (status);
284 public void DrawClosedCurve (Pen pen, PointF [] points, float tension, FillMode fillmode)
287 status = GDIPlus.GdipDrawClosedCurve2 (nativeObject, pen.nativeObject, points, points.Length, tension);
288 GDIPlus.CheckStatus (status);
291 public void DrawCurve (Pen pen, Point [] points)
294 status = GDIPlus.GdipDrawCurveI (nativeObject, pen.nativeObject, points, points.Length);
295 GDIPlus.CheckStatus (status);
298 public void DrawCurve (Pen pen, PointF [] points)
301 status = GDIPlus.GdipDrawCurve (nativeObject, pen.nativeObject, points, points.Length);
302 GDIPlus.CheckStatus (status);
305 public void DrawCurve (Pen pen, PointF [] points, float tension)
308 status = GDIPlus.GdipDrawCurve2 (nativeObject, pen.nativeObject, points, points.Length, tension);
309 GDIPlus.CheckStatus (status);
312 public void DrawCurve (Pen pen, Point [] points, float tension)
315 status = GDIPlus.GdipDrawCurve2I (nativeObject, pen.nativeObject, points, points.Length, tension);
316 GDIPlus.CheckStatus (status);
320 public void DrawCurve (Pen pen, PointF [] points, int offset, int numberOfSegments)
323 status = GDIPlus.GdipDrawCurve3 (nativeObject, pen.nativeObject,
324 points, points.Length, offset,
325 numberOfSegments, 0.5f);
326 GDIPlus.CheckStatus (status);
329 public void DrawCurve (Pen pen, Point [] points, int offset, int numberOfSegments, float tension)
332 status = GDIPlus.GdipDrawCurve3I (nativeObject, pen.nativeObject,
333 points, points.Length, offset,
334 numberOfSegments, tension);
335 GDIPlus.CheckStatus (status);
339 public void DrawCurve (Pen pen, PointF [] points, int offset, int numberOfSegments, float tension)
342 status = GDIPlus.GdipDrawCurve3 (nativeObject, pen.nativeObject,
343 points, points.Length, offset,
344 numberOfSegments, tension);
345 GDIPlus.CheckStatus (status);
348 public void DrawEllipse (Pen pen, Rectangle rect)
350 DrawEllipse (pen, rect.X, rect.Y, rect.Width, rect.Height);
353 public void DrawEllipse (Pen pen, RectangleF rect)
355 DrawEllipse (pen, rect.X, rect.Y, rect.Width, rect.Height);
358 public void DrawEllipse (Pen pen, int x, int y, int width, int height)
361 status = GDIPlus.GdipDrawEllipseI (nativeObject, pen.nativeObject, x, y, width, height);
362 GDIPlus.CheckStatus (status);
365 public void DrawEllipse (Pen pen, float x, float y, float width, float height)
367 Status status = GDIPlus.GdipDrawEllipse (nativeObject, pen.nativeObject, x, y, width, height);
368 GDIPlus.CheckStatus (status);
371 public void DrawIcon (Icon icon, Rectangle targetRect)
373 Image img = icon.ToBitmap ();
374 DrawImage (img, targetRect);
377 public void DrawIcon (Icon icon, int x, int y)
379 Image img = icon.ToBitmap ();
380 DrawImage (img, x, y);
383 public void DrawIconUnstretched (Icon icon, Rectangle targetRect)
385 Image img = icon.ToBitmap ();
386 DrawImageUnscaled (img, targetRect);
389 public void DrawImage (Image image, RectangleF rect)
391 Status status = GDIPlus.GdipDrawImageRect(nativeObject, image.NativeObject, rect.X, rect.Y, rect.Width, rect.Height);
392 GDIPlus.CheckStatus (status);
396 public void DrawImage (Image image, PointF point)
398 Status status = GDIPlus.GdipDrawImage (nativeObject, image.NativeObject, point.X, point.Y);
399 GDIPlus.CheckStatus (status);
403 public void DrawImage (Image image, Point [] destPoints)
405 Status status = GDIPlus.GdipDrawImagePointsI (nativeObject, image.NativeObject, destPoints, destPoints.Length);
406 GDIPlus.CheckStatus (status);
410 public void DrawImage (Image image, Point point)
412 DrawImage (image, point.X, point.Y);
416 public void DrawImage (Image image, Rectangle rect)
418 DrawImage (image, rect.X, rect.Y, rect.Width, rect.Height);
422 public void DrawImage (Image image, PointF [] destPoints)
424 Status status = GDIPlus.GdipDrawImagePoints (nativeObject, image.NativeObject, destPoints, destPoints.Length);
425 GDIPlus.CheckStatus (status);
429 public void DrawImage (Image image, int x, int y)
431 Status status = GDIPlus.GdipDrawImageI (nativeObject, image.NativeObject, x, y);
432 GDIPlus.CheckStatus (status);
436 public void DrawImage (Image image, float x, float y)
438 Status status = GDIPlus.GdipDrawImage (nativeObject, image.NativeObject, x, y);
439 GDIPlus.CheckStatus (status);
443 public void DrawImage (Image image, Rectangle destRect, Rectangle srcRect, GraphicsUnit srcUnit)
445 Status status = GDIPlus.GdipDrawImageRectRectI (nativeObject, image.NativeObject,
446 destRect.X, destRect.Y, destRect.Width, destRect.Height,
447 srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height,
448 srcUnit, IntPtr.Zero, null, IntPtr.Zero);
449 GDIPlus.CheckStatus (status);
452 public void DrawImage (Image image, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit)
454 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
455 destRect.X, destRect.Y, destRect.Width, destRect.Height,
456 srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height,
457 srcUnit, IntPtr.Zero, null, IntPtr.Zero);
458 GDIPlus.CheckStatus (status);
462 public void DrawImage (Image image, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit)
464 Status status = GDIPlus.GdipDrawImagePointsRectI (nativeObject, image.NativeObject,
465 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
466 srcRect.Width, srcRect.Height, srcUnit, IntPtr.Zero,
468 GDIPlus.CheckStatus (status);
472 public void DrawImage (Image image, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit)
475 Status status = GDIPlus.GdipDrawImagePointsRect (nativeObject, image.NativeObject,
476 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
477 srcRect.Width, srcRect.Height, srcUnit, IntPtr.Zero,
479 GDIPlus.CheckStatus (status);
483 public void DrawImage (Image image, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit,
484 ImageAttributes imageAttr)
486 Status status = GDIPlus.GdipDrawImagePointsRectI (nativeObject, image.NativeObject,
487 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
488 srcRect.Width, srcRect.Height, srcUnit,
489 imageAttr.NativeObject, null, IntPtr.Zero);
490 GDIPlus.CheckStatus (status);
493 public void DrawImage (Image image, float x, float y, float width, float height)
495 Status status = GDIPlus.GdipDrawImageRect(nativeObject, image.NativeObject, x, y,
497 GDIPlus.CheckStatus (status);
501 public void DrawImage (Image image, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit,
502 ImageAttributes imageAttr)
504 Status status = GDIPlus.GdipDrawImagePointsRect (nativeObject, image.NativeObject,
505 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
506 srcRect.Width, srcRect.Height, srcUnit,
507 imageAttr.NativeObject, null, IntPtr.Zero);
508 GDIPlus.CheckStatus (status);
512 public void DrawImage (Image image, int x, int y, Rectangle srcRect, GraphicsUnit srcUnit)
514 Status status = GDIPlus.GdipDrawImagePointRectI(nativeObject, image.NativeObject, x, y, srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit);
515 GDIPlus.CheckStatus (status);
518 public void DrawImage (Image image, int x, int y, int width, int height)
520 Status status = GDIPlus.GdipDrawImageRectI (nativeObject, image.nativeObject, x, y, width, height);
521 GDIPlus.CheckStatus (status);
524 public void DrawImage (Image image, float x, float y, RectangleF srcRect, GraphicsUnit srcUnit)
526 Status status = GDIPlus.GdipDrawImagePointRect (nativeObject, image.nativeObject, x, y, srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit);
527 GDIPlus.CheckStatus (status);
531 public void DrawImage (Image image, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)
533 Status status = GDIPlus.GdipDrawImagePointsRect (nativeObject, image.NativeObject,
534 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
535 srcRect.Width, srcRect.Height, srcUnit,
536 imageAttr.NativeObject, callback, IntPtr.Zero);
537 GDIPlus.CheckStatus (status);
541 public void DrawImage (Image image, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)
544 Status status = GDIPlus.GdipDrawImagePointsRectI (nativeObject, image.NativeObject,
545 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
546 srcRect.Width, srcRect.Height, srcUnit,
547 imageAttr.NativeObject, callback, IntPtr.Zero);
548 GDIPlus.CheckStatus (status);
552 public void DrawImage (Image image, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, int callbackData)
555 Status status = GDIPlus.GdipDrawImagePointsRectI (nativeObject, image.NativeObject,
556 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
557 srcRect.Width, srcRect.Height, srcUnit,
558 imageAttr.NativeObject, callback, (IntPtr) callbackData);
559 GDIPlus.CheckStatus (status);
563 public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit)
565 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
566 destRect.X, destRect.Y, destRect.Width, destRect.Height,
567 srcX, srcY, srcWidth, srcHeight, srcUnit, IntPtr.Zero,
569 GDIPlus.CheckStatus (status);
572 public void DrawImage (Image image, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, int callbackData)
574 Status status = GDIPlus.GdipDrawImagePointsRect (nativeObject, image.NativeObject,
575 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
576 srcRect.Width, srcRect.Height, srcUnit,
577 imageAttr.NativeObject, callback, (IntPtr) callbackData);
578 GDIPlus.CheckStatus (status);
582 public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit)
584 Status status = GDIPlus.GdipDrawImageRectRectI (nativeObject, image.NativeObject,
585 destRect.X, destRect.Y, destRect.Width, destRect.Height,
586 srcX, srcY, srcWidth, srcHeight, srcUnit, IntPtr.Zero,
588 GDIPlus.CheckStatus (status);
592 public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttrs)
594 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
595 destRect.X, destRect.Y, destRect.Width, destRect.Height,
596 srcX, srcY, srcWidth, srcHeight, srcUnit,
597 imageAttrs.NativeObject, null, IntPtr.Zero);
598 GDIPlus.CheckStatus (status);
601 public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr)
603 Status status = GDIPlus.GdipDrawImageRectRectI (nativeObject, image.NativeObject,
604 destRect.X, destRect.Y, destRect.Width,
605 destRect.Height, srcX, srcY, srcWidth, srcHeight,
606 srcUnit, imageAttr.NativeObject, null, IntPtr.Zero);
607 GDIPlus.CheckStatus (status);
610 public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)
612 Status status = GDIPlus.GdipDrawImageRectRectI (nativeObject, image.NativeObject,
613 destRect.X, destRect.Y, destRect.Width,
614 destRect.Height, srcX, srcY, srcWidth, srcHeight,
615 srcUnit, imageAttr.NativeObject, callback,
617 GDIPlus.CheckStatus (status);
620 public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)
622 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
623 destRect.X, destRect.Y, destRect.Width,
624 destRect.Height, srcX, srcY, srcWidth, srcHeight,
625 srcUnit, imageAttr.NativeObject,
626 callback, IntPtr.Zero);
627 GDIPlus.CheckStatus (status);
631 public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, IntPtr callbackData)
633 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
634 destRect.X, destRect.Y, destRect.Width, destRect.Height,
635 srcX, srcY, srcWidth, srcHeight, srcUnit,
636 imageAttr.NativeObject, callback, callbackData);
637 GDIPlus.CheckStatus (status);
641 public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, IntPtr callbackData)
643 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
644 destRect.X, destRect.Y, destRect.Width, destRect.Height,
645 srcX, srcY, srcWidth, srcHeight, srcUnit,
646 imageAttr.NativeObject, callback, callbackData);
647 GDIPlus.CheckStatus (status);
650 public void DrawImageUnscaled (Image image, Point point)
652 DrawImageUnscaled (image, point.X, point.Y);
655 public void DrawImageUnscaled (Image image, Rectangle rect)
657 DrawImageUnscaled (image, rect.X, rect.Y, rect.Width, rect.Height);
660 public void DrawImageUnscaled (Image image, int x, int y)
662 DrawImage (image, x, y, image.Width, image.Height);
665 public void DrawImageUnscaled (Image image, int x, int y, int width, int height)
667 Image tmpImg = new Bitmap (width, height);
668 Graphics g = FromImage (tmpImg);
669 g.DrawImage (image, 0, 0, image.Width, image.Height);
670 this.DrawImage (tmpImg, x, y, width, height);
675 public void DrawLine (Pen pen, PointF pt1, PointF pt2)
677 Status status = GDIPlus.GdipDrawLine (nativeObject, pen.nativeObject,
678 pt1.X, pt1.Y, pt2.X, pt2.Y);
679 GDIPlus.CheckStatus (status);
682 public void DrawLine (Pen pen, Point pt1, Point pt2)
684 Status status = GDIPlus.GdipDrawLineI (nativeObject, pen.nativeObject,
685 pt1.X, pt1.Y, pt2.X, pt2.Y);
686 GDIPlus.CheckStatus (status);
689 public void DrawLine (Pen pen, int x1, int y1, int x2, int y2)
691 Status status = GDIPlus.GdipDrawLineI (nativeObject, pen.nativeObject, x1, y1, x2, y2);
692 GDIPlus.CheckStatus (status);
695 public void DrawLine (Pen pen, float x1, float y1, float x2, float y2)
697 Status status = GDIPlus.GdipDrawLine (nativeObject, pen.nativeObject, x1, y1, x2, y2);
698 GDIPlus.CheckStatus (status);
701 public void DrawLines (Pen pen, PointF [] points)
703 Status status = GDIPlus.GdipDrawLines (nativeObject, pen.nativeObject, points, points.Length);
704 GDIPlus.CheckStatus (status);
707 public void DrawLines (Pen pen, Point [] points)
709 Status status = GDIPlus.GdipDrawLinesI (nativeObject, pen.nativeObject, points, points.Length);
710 GDIPlus.CheckStatus (status);
713 public void DrawPath (Pen pen, GraphicsPath path)
715 Status status = GDIPlus.GdipDrawPath (nativeObject, pen.nativeObject, path.nativePath);
716 GDIPlus.CheckStatus (status);
719 public void DrawPie (Pen pen, Rectangle rect, float startAngle, float sweepAngle)
721 DrawPie (pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
724 public void DrawPie (Pen pen, RectangleF rect, float startAngle, float sweepAngle)
726 DrawPie (pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
729 public void DrawPie (Pen pen, float x, float y, float width, float height, float startAngle, float sweepAngle)
731 Status status = GDIPlus.GdipDrawPie (nativeObject, pen.nativeObject, x, y, width, height, startAngle, sweepAngle);
732 GDIPlus.CheckStatus (status);
735 // Microsoft documentation states that the signature for this member should be
736 // public void DrawPie(Pen pen, int x, int y, int width, int height, int startAngle
737 // int sweepAngle. However, GdipDrawPieI uses also float for the startAngle and sweepAngle params
738 public void DrawPie (Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle)
740 Status status = GDIPlus.GdipDrawPieI (nativeObject, pen.nativeObject, x, y, width, height, startAngle, sweepAngle);
741 GDIPlus.CheckStatus (status);
744 public void DrawPolygon (Pen pen, Point [] points)
746 Status status = GDIPlus.GdipDrawPolygonI (nativeObject, pen.nativeObject, points, points.Length);
747 GDIPlus.CheckStatus (status);
750 public void DrawPolygon (Pen pen, PointF [] points)
752 Status status = GDIPlus.GdipDrawPolygon (nativeObject, pen.nativeObject, points, points.Length);
753 GDIPlus.CheckStatus (status);
756 internal void DrawRectangle (Pen pen, RectangleF rect)
758 DrawRectangle (pen, rect.Left, rect.Top, rect.Width, rect.Height);
761 public void DrawRectangle (Pen pen, Rectangle rect)
763 DrawRectangle (pen, rect.Left, rect.Top, rect.Width, rect.Height);
766 public void DrawRectangle (Pen pen, float x, float y, float width, float height)
768 Status status = GDIPlus.GdipDrawRectangle (nativeObject, pen.nativeObject, x, y, width, height);
769 GDIPlus.CheckStatus (status);
772 public void DrawRectangle (Pen pen, int x, int y, int width, int height)
774 Status status = GDIPlus.GdipDrawRectangleI (nativeObject, pen.nativeObject, x, y, width, height);
775 GDIPlus.CheckStatus (status);
778 public void DrawRectangles (Pen pen, RectangleF [] rects)
780 Status status = GDIPlus.GdipDrawRectangles (nativeObject, pen.nativeObject, rects, rects.Length);
781 GDIPlus.CheckStatus (status);
784 public void DrawRectangles (Pen pen, Rectangle [] rects)
786 Status status = GDIPlus.GdipDrawRectanglesI (nativeObject, pen.nativeObject, rects, rects.Length);
787 GDIPlus.CheckStatus (status);
790 public void DrawString (string s, Font font, Brush brush, RectangleF layoutRectangle)
792 DrawString (s, font, brush, layoutRectangle, null);
795 public void DrawString (string s, Font font, Brush brush, PointF point)
797 DrawString (s, font, brush, new RectangleF (point.X, point.Y, 0, 0), null);
800 public void DrawString (string s, Font font, Brush brush, PointF point, StringFormat format)
802 DrawString(s, font, brush, new RectangleF(point.X, point.Y, 0, 0), format);
805 public void DrawString (string s, Font font, Brush brush, float x, float y)
807 DrawString (s, font, brush, new RectangleF (x, y, 0, 0), null);
810 public void DrawString (string s, Font font, Brush brush, float x, float y, StringFormat format)
812 DrawString (s, font, brush, new RectangleF(x, y, 0, 0), format);
815 public void DrawString (string s, Font font, Brush brush, RectangleF layoutRectangle, StringFormat format)
818 throw new ArgumentNullException ("font");
820 throw new ArgumentNullException ("brush");
821 if (s == null || s.Length == 0)
824 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject, ref layoutRectangle, format != null ? format.NativeObject : IntPtr.Zero, brush.nativeObject);
825 GDIPlus.CheckStatus (status);
828 public void EndContainer (GraphicsContainer container)
830 Status status = GDIPlus.GdipEndContainer(nativeObject, container.NativeObject);
831 GDIPlus.CheckStatus (status);
835 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, EnumerateMetafileProc callback)
837 throw new NotImplementedException ();
841 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, EnumerateMetafileProc callback)
843 throw new NotImplementedException ();
847 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, EnumerateMetafileProc callback)
849 throw new NotImplementedException ();
853 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, EnumerateMetafileProc callback)
855 throw new NotImplementedException ();
859 public void EnumerateMetafile (Metafile metafile, Point destPoint, EnumerateMetafileProc callback)
861 throw new NotImplementedException ();
865 public void EnumerateMetafile (Metafile metafile, PointF destPoint, EnumerateMetafileProc callback)
867 throw new NotImplementedException ();
871 public void EnumerateMetafile (Metafile metafile, PointF destPoint, EnumerateMetafileProc callback, IntPtr callbackData)
873 throw new NotImplementedException ();
877 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, EnumerateMetafileProc callback, IntPtr callbackData)
879 throw new NotImplementedException ();
883 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData)
885 throw new NotImplementedException ();
889 public void EnumerateMetafile (Metafile metafile, Point destPoint, EnumerateMetafileProc callback, IntPtr callbackData)
891 throw new NotImplementedException ();
895 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData)
897 throw new NotImplementedException ();
901 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, EnumerateMetafileProc callback, IntPtr callbackData)
903 throw new NotImplementedException ();
907 public void EnumerateMetafile (Metafile metafile, PointF destPoint, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
909 throw new NotImplementedException ();
913 public void EnumerateMetafile (Metafile metafile, Point destPoint, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
915 throw new NotImplementedException ();
919 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
921 throw new NotImplementedException ();
925 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
927 throw new NotImplementedException ();
931 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
933 throw new NotImplementedException ();
937 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
939 throw new NotImplementedException ();
943 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
945 throw new NotImplementedException ();
949 public void EnumerateMetafile (Metafile metafile, Point destPoint, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
951 throw new NotImplementedException ();
955 public void EnumerateMetafile (Metafile metafile, PointF destPoint, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
957 throw new NotImplementedException ();
961 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
963 throw new NotImplementedException ();
967 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
969 throw new NotImplementedException ();
973 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
975 throw new NotImplementedException ();
979 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
981 throw new NotImplementedException ();
985 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
987 throw new NotImplementedException ();
991 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
993 throw new NotImplementedException ();
997 public void EnumerateMetafile (Metafile metafile, PointF destPoint, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
999 throw new NotImplementedException ();
1003 public void EnumerateMetafile (Metafile metafile, Point destPoint, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
1005 throw new NotImplementedException ();
1009 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
1011 throw new NotImplementedException ();
1015 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, Rectangle srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1017 throw new NotImplementedException ();
1021 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, Rectangle srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1023 throw new NotImplementedException ();
1027 public void EnumerateMetafile (Metafile metafile, Point destPoint, Rectangle srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1029 throw new NotImplementedException ();
1033 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, RectangleF srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1035 throw new NotImplementedException ();
1039 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, RectangleF srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1041 throw new NotImplementedException ();
1045 public void EnumerateMetafile (Metafile metafile, PointF destPoint, RectangleF srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1047 throw new NotImplementedException ();
1050 public void ExcludeClip (Rectangle rect)
1052 Status status = GDIPlus.GdipSetClipRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, CombineMode.Exclude);
1053 GDIPlus.CheckStatus (status);
1056 public void ExcludeClip (Region region)
1058 Status status = GDIPlus.GdipSetClipRegion (nativeObject, region.NativeObject, CombineMode.Exclude);
1059 GDIPlus.CheckStatus (status);
1063 public void FillClosedCurve (Brush brush, PointF [] points)
1065 Status status = GDIPlus.GdipFillClosedCurve (nativeObject, brush.NativeObject, points, points.Length);
1066 GDIPlus.CheckStatus (status);
1070 public void FillClosedCurve (Brush brush, Point [] points)
1072 Status status = GDIPlus.GdipFillClosedCurveI (nativeObject, brush.NativeObject, points, points.Length);
1073 GDIPlus.CheckStatus (status);
1077 public void FillClosedCurve (Brush brush, PointF [] points, FillMode fillmode)
1079 FillClosedCurve (brush, points, fillmode, 0.5f);
1082 public void FillClosedCurve (Brush brush, Point [] points, FillMode fillmode)
1084 FillClosedCurve (brush, points, fillmode, 0.5f);
1087 public void FillClosedCurve (Brush brush, PointF [] points, FillMode fillmode, float tension)
1089 Status status = GDIPlus.GdipFillClosedCurve2 (nativeObject, brush.NativeObject, points, points.Length, tension, fillmode);
1090 GDIPlus.CheckStatus (status);
1093 public void FillClosedCurve (Brush brush, Point [] points, FillMode fillmode, float tension)
1095 Status status = GDIPlus.GdipFillClosedCurve2I (nativeObject, brush.NativeObject, points, points.Length, tension, fillmode);
1096 GDIPlus.CheckStatus (status);
1099 public void FillEllipse (Brush brush, Rectangle rect)
1101 FillEllipse (brush, rect.X, rect.Y, rect.Width, rect.Height);
1104 public void FillEllipse (Brush brush, RectangleF rect)
1106 FillEllipse (brush, rect.X, rect.Y, rect.Width, rect.Height);
1109 public void FillEllipse (Brush brush, float x, float y, float width, float height)
1111 Status status = GDIPlus.GdipFillEllipse (nativeObject, brush.nativeObject, x, y, width, height);
1112 GDIPlus.CheckStatus (status);
1115 public void FillEllipse (Brush brush, int x, int y, int width, int height)
1117 Status status = GDIPlus.GdipFillEllipseI (nativeObject, brush.nativeObject, x, y, width, height);
1118 GDIPlus.CheckStatus (status);
1121 public void FillPath (Brush brush, GraphicsPath path)
1123 Status status = GDIPlus.GdipFillPath (nativeObject, brush.NativeObject, path.NativeObject);
1124 GDIPlus.CheckStatus (status);
1127 public void FillPie (Brush brush, Rectangle rect, float startAngle, float sweepAngle)
1129 Status status = GDIPlus.GdipFillPie (nativeObject, brush.NativeObject, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
1130 GDIPlus.CheckStatus (status);
1133 public void FillPie (Brush brush, int x, int y, int width, int height, int startAngle, int sweepAngle)
1135 Status status = GDIPlus.GdipFillPieI (nativeObject, brush.NativeObject, x, y, width, height, startAngle, sweepAngle);
1136 GDIPlus.CheckStatus (status);
1139 public void FillPie (Brush brush, float x, float y, float width, float height, float startAngle, float sweepAngle)
1141 Status status = GDIPlus.GdipFillPie (nativeObject, brush.NativeObject, x, y, width, height, startAngle, sweepAngle);
1142 GDIPlus.CheckStatus (status);
1145 public void FillPolygon (Brush brush, PointF [] points)
1147 Status status = GDIPlus.GdipFillPolygon2 (nativeObject, brush.nativeObject, points, points.Length);
1148 GDIPlus.CheckStatus (status);
1151 public void FillPolygon (Brush brush, Point [] points)
1153 Status status = GDIPlus.GdipFillPolygon2I (nativeObject, brush.nativeObject, points, points.Length);
1154 GDIPlus.CheckStatus (status);
1157 public void FillPolygon (Brush brush, Point [] points, FillMode fillMode)
1159 Status status = GDIPlus.GdipFillPolygonI (nativeObject, brush.nativeObject, points, points.Length, fillMode);
1160 GDIPlus.CheckStatus (status);
1163 public void FillPolygon (Brush brush, PointF [] points, FillMode fillMode)
1165 Status status = GDIPlus.GdipFillPolygon (nativeObject, brush.nativeObject, points, points.Length, fillMode);
1166 GDIPlus.CheckStatus (status);
1169 public void FillRectangle (Brush brush, RectangleF rect)
1171 FillRectangle (brush, rect.Left, rect.Top, rect.Width, rect.Height);
1174 public void FillRectangle (Brush brush, Rectangle rect)
1176 FillRectangle (brush, rect.Left, rect.Top, rect.Width, rect.Height);
1179 public void FillRectangle (Brush brush, int x, int y, int width, int height)
1181 Status status = GDIPlus.GdipFillRectangleI (nativeObject, brush.nativeObject, x, y, width, height);
1182 GDIPlus.CheckStatus (status);
1185 public void FillRectangle (Brush brush, float x, float y, float width, float height)
1187 Status status = GDIPlus.GdipFillRectangle (nativeObject, brush.nativeObject, x, y, width, height);
1188 GDIPlus.CheckStatus (status);
1191 public void FillRectangles (Brush brush, Rectangle [] rects)
1193 Status status = GDIPlus.GdipFillRectanglesI (nativeObject, brush.nativeObject, rects, rects.Length);
1194 GDIPlus.CheckStatus (status);
1197 public void FillRectangles (Brush brush, RectangleF [] rects)
1199 Status status = GDIPlus.GdipFillRectangles (nativeObject, brush.nativeObject, rects, rects.Length);
1200 GDIPlus.CheckStatus (status);
1204 public void FillRegion (Brush brush, Region region)
1206 Status status = GDIPlus.GdipFillRegion (nativeObject, brush.NativeObject, region.NativeObject);
1207 GDIPlus.CheckStatus(status);
1211 public void Flush ()
1213 Flush (FlushIntention.Flush);
1217 public void Flush (FlushIntention intention)
1219 Status status = GDIPlus.GdipFlush (nativeObject, intention);
1220 GDIPlus.CheckStatus (status);
1221 if (GDIPlus.UseQuartzDrawable || GDIPlus.UseCocoaDrawable)
1222 Carbon.CGContextSynchronize (GDIPlus.Display);
1225 [EditorBrowsable (EditorBrowsableState.Advanced)]
1226 public static Graphics FromHdc (IntPtr hdc)
1229 Status status = GDIPlus.GdipCreateFromHDC (hdc, out graphics);
1230 GDIPlus.CheckStatus (status);
1231 return new Graphics (graphics);
1235 [EditorBrowsable (EditorBrowsableState.Advanced)]
1236 public static Graphics FromHdc (IntPtr hdc, IntPtr hdevice)
1238 throw new NotImplementedException ();
1241 [EditorBrowsable (EditorBrowsableState.Advanced)]
1242 [SecurityPermission (SecurityAction.LinkDemand, UnmanagedCode = true)]
1243 public static Graphics FromHdcInternal (IntPtr hdc)
1245 GDIPlus.Display = hdc;
1249 [EditorBrowsable (EditorBrowsableState.Advanced)]
1250 public static Graphics FromHwnd (IntPtr hwnd)
1254 if (GDIPlus.UseCocoaDrawable) {
1255 CarbonContext cgContext = Carbon.GetCGContextForNSView (hwnd);
1256 GDIPlus.GdipCreateFromQuartz_macosx (cgContext.ctx, cgContext.width, cgContext.height, out graphics);
1258 GDIPlus.Display = cgContext.ctx;
1259 return new Graphics (graphics);
1261 if (GDIPlus.UseQuartzDrawable) {
1262 CarbonContext cgContext = Carbon.GetCGContextForView (hwnd);
1263 GDIPlus.GdipCreateFromQuartz_macosx (cgContext.ctx, cgContext.width, cgContext.height, out graphics);
1265 GDIPlus.Display = cgContext.ctx;
1266 return new Graphics (graphics);
1268 if (GDIPlus.UseX11Drawable) {
1269 if (GDIPlus.Display == IntPtr.Zero) {
1270 GDIPlus.Display = GDIPlus.XOpenDisplay (IntPtr.Zero);
1273 return FromXDrawable (hwnd, GDIPlus.Display);
1277 Status status = GDIPlus.GdipCreateFromHWND (hwnd, out graphics);
1278 GDIPlus.CheckStatus (status);
1280 return new Graphics (graphics);
1283 [EditorBrowsable (EditorBrowsableState.Advanced)]
1284 [SecurityPermission (SecurityAction.LinkDemand, UnmanagedCode = true)]
1285 public static Graphics FromHwndInternal (IntPtr hwnd)
1287 return FromHwnd (hwnd);
1290 public static Graphics FromImage (Image image)
1294 if (image == null) throw new ArgumentException ();
1296 if ((image.PixelFormat & PixelFormat.Indexed) != PixelFormat.Undefined) {
\r
1297 // And MS ignores its own rules again
\r
1298 throw new Exception ("A Graphics object cannot be created from an image that has an indexed pixel format");
\r
1301 Status status = GDIPlus.GdipGetImageGraphicsContext (image.nativeObject, out graphics);
1302 GDIPlus.CheckStatus (status);
1303 Graphics result = new Graphics (graphics);
1305 // check for Unix platforms - see FAQ for more details
1306 // http://www.mono-project.com/FAQ:_Technical#How_to_detect_the_execution_platform_.3F
1307 int platform = (int) Environment.OSVersion.Platform;
1308 if ((platform == 4) || (platform == 128)) {
1309 Rectangle rect = new Rectangle (0,0, image.Width, image.Height);
1310 GDIPlus.GdipSetVisibleClip_linux (result.NativeObject, ref rect);
1316 internal static Graphics FromXDrawable (IntPtr drawable, IntPtr display)
1320 Status s = GDIPlus.GdipCreateFromXDrawable_linux (drawable, display, out graphics);
1321 GDIPlus.CheckStatus (s);
1322 return new Graphics (graphics);
1326 public static IntPtr GetHalftonePalette ()
1328 throw new NotImplementedException ();
1331 [EditorBrowsable (EditorBrowsableState.Advanced)]
1332 public IntPtr GetHdc ()
1335 GDIPlus.CheckStatus (GDIPlus.GdipGetDC (this.nativeObject, out hdc));
1340 public Color GetNearestColor (Color color)
1344 Status status = GDIPlus.GdipGetNearestColor (nativeObject, out argb);
1345 GDIPlus.CheckStatus (status);
1347 return Color.FromArgb (argb);
1351 public void IntersectClip (Region region)
1353 Status status = GDIPlus.GdipSetClipRegion (nativeObject, region.NativeObject, CombineMode.Intersect);
1354 GDIPlus.CheckStatus (status);
1357 public void IntersectClip (RectangleF rect)
1359 Status status = GDIPlus.GdipSetClipRect (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, CombineMode.Intersect);
1360 GDIPlus.CheckStatus (status);
1363 public void IntersectClip (Rectangle rect)
1365 Status status = GDIPlus.GdipSetClipRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, CombineMode.Intersect);
1366 GDIPlus.CheckStatus (status);
1369 public bool IsVisible (Point point)
1371 bool isVisible = false;
1373 Status status = GDIPlus.GdipIsVisiblePointI (nativeObject, point.X, point.Y, out isVisible);
1374 GDIPlus.CheckStatus (status);
1380 public bool IsVisible (RectangleF rect)
1382 bool isVisible = false;
1384 Status status = GDIPlus.GdipIsVisibleRect (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, out isVisible);
1385 GDIPlus.CheckStatus (status);
1390 public bool IsVisible (PointF point)
1392 bool isVisible = false;
1394 Status status = GDIPlus.GdipIsVisiblePoint (nativeObject, point.X, point.Y, out isVisible);
1395 GDIPlus.CheckStatus (status);
1400 public bool IsVisible (Rectangle rect)
1402 bool isVisible = false;
1404 Status status = GDIPlus.GdipIsVisibleRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, out isVisible);
1405 GDIPlus.CheckStatus (status);
1410 public bool IsVisible (float x, float y)
1412 return IsVisible (new PointF (x, y));
1415 public bool IsVisible (int x, int y)
1417 return IsVisible (new Point (x, y));
1420 public bool IsVisible (float x, float y, float width, float height)
1422 return IsVisible (new RectangleF (x, y, width, height));
1426 public bool IsVisible (int x, int y, int width, int height)
1428 return IsVisible (new Rectangle (x, y, width, height));
1432 public Region [] MeasureCharacterRanges (string text, Font font, RectangleF layoutRect, StringFormat stringFormat)
1435 int regcount = stringFormat.GetMeasurableCharacterRangeCount ();
1436 IntPtr[] native_regions = new IntPtr [regcount];
1437 Region[] regions = new Region [regcount];
1439 for (int i = 0; i < regcount; i++) {
1440 regions[i] = new Region ();
1441 native_regions[i] = regions[i].NativeObject;
1444 status = GDIPlus.GdipMeasureCharacterRanges (nativeObject, text, text.Length,
1445 font.NativeObject, ref layoutRect, stringFormat.NativeObject,
1446 regcount, out native_regions[0]);
1448 GDIPlus.CheckStatus (status);
1454 public SizeF MeasureString (string text, Font font)
1456 return MeasureString (text, font, new Size (0, 0));
1460 public SizeF MeasureString (string text, Font font, SizeF layoutArea)
1462 int charactersFitted, linesFilled;
1463 RectangleF boundingBox = new RectangleF ();
1464 RectangleF rect = new RectangleF (0, 0, layoutArea.Width,
1467 if (text == null || text.Length == 0)
1471 throw new ArgumentNullException ("font");
1473 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1474 font.NativeObject, ref rect,
1475 IntPtr.Zero, out boundingBox,
1476 out charactersFitted, out linesFilled);
1477 GDIPlus.CheckStatus (status);
1479 return new SizeF (boundingBox.Width, boundingBox.Height);
1483 public SizeF MeasureString (string text, Font font, int width)
1485 RectangleF boundingBox = new RectangleF ();
1486 RectangleF rect = new RectangleF (0, 0, width, 999999);
1487 int charactersFitted, linesFilled;
1489 if (text == null || text.Length == 0)
1493 throw new ArgumentNullException ("font");
1495 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1496 font.NativeObject, ref rect,
1497 IntPtr.Zero, out boundingBox,
1498 out charactersFitted, out linesFilled);
1499 GDIPlus.CheckStatus (status);
1501 return new SizeF (boundingBox.Width, boundingBox.Height);
1505 public SizeF MeasureString (string text, Font font, SizeF layoutArea,
1506 StringFormat stringFormat)
1508 int charactersFitted, linesFilled;
1509 return MeasureString (text, font, layoutArea, stringFormat,
1510 out charactersFitted, out linesFilled);
1514 public SizeF MeasureString (string text, Font font, int width, StringFormat format)
1516 int charactersFitted, linesFilled;
1517 return MeasureString (text, font, new SizeF (width, 999999),
1518 format, out charactersFitted, out linesFilled);
1522 public SizeF MeasureString (string text, Font font, PointF origin,
1523 StringFormat stringFormat)
1525 RectangleF boundingBox = new RectangleF ();
1526 RectangleF rect = new RectangleF (origin.X, origin.Y, 0, 0);
1527 int charactersFitted, linesFilled;
1529 if (text == null || text.Length == 0)
1533 throw new ArgumentNullException ("font");
1535 if (stringFormat == null)
1536 stringFormat = new StringFormat ();
1538 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1539 font.NativeObject, ref rect,
1540 stringFormat.NativeObject,
1542 out charactersFitted,
1544 GDIPlus.CheckStatus (status);
1546 return new SizeF (boundingBox.Width, boundingBox.Height);
1550 public SizeF MeasureString (string text, Font font, SizeF layoutArea,
1551 StringFormat stringFormat, out int charactersFitted,
1552 out int linesFilled)
1554 RectangleF boundingBox = new RectangleF ();
1555 RectangleF rect = new RectangleF (0, 0, layoutArea.Width, layoutArea.Height);
1556 charactersFitted = 0;
1559 if (text == null || text.Length == 0)
1563 throw new ArgumentNullException ("font");
1565 if (stringFormat == null)
1566 stringFormat = new StringFormat ();
1568 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1569 font.NativeObject, ref rect,
1570 stringFormat.NativeObject,
1572 out charactersFitted,
1574 GDIPlus.CheckStatus (status);
1576 return new SizeF (boundingBox.Width, boundingBox.Height);
1579 public void MultiplyTransform (Matrix matrix)
1581 MultiplyTransform (matrix, MatrixOrder.Prepend);
1584 public void MultiplyTransform (Matrix matrix, MatrixOrder order)
1586 Status status = GDIPlus.GdipMultiplyWorldTransform (nativeObject,
1587 matrix.nativeMatrix,
1589 GDIPlus.CheckStatus (status);
1592 [EditorBrowsable (EditorBrowsableState.Advanced)]
1593 public void ReleaseHdc (IntPtr hdc)
1595 Status status = GDIPlus.GdipReleaseDC (nativeObject, hdc);
1596 GDIPlus.CheckStatus (status);
1600 [EditorBrowsable (EditorBrowsableState.Advanced)]
1601 [SecurityPermission (SecurityAction.LinkDemand, UnmanagedCode = true)]
1602 public void ReleaseHdcInternal (IntPtr hdc)
1604 throw new NotImplementedException ();
1608 public void ResetClip ()
1610 Status status = GDIPlus.GdipResetClip (nativeObject);
1611 GDIPlus.CheckStatus (status);
1614 public void ResetTransform ()
1616 Status status = GDIPlus.GdipResetWorldTransform (nativeObject);
1617 GDIPlus.CheckStatus (status);
1620 public void Restore (GraphicsState gstate)
1622 Status status = GDIPlus.GdipRestoreGraphics (nativeObject, gstate.nativeState);
1623 GDIPlus.CheckStatus (status);
1627 public void RotateTransform (float angle)
1629 RotateTransform (angle, MatrixOrder.Prepend);
1632 public void RotateTransform (float angle, MatrixOrder order)
1635 Status status = GDIPlus.GdipRotateWorldTransform (nativeObject, angle, order);
1636 GDIPlus.CheckStatus (status);
1639 public GraphicsState Save ()
1642 Status status = GDIPlus.GdipSaveGraphics (nativeObject, out saveState);
1643 GDIPlus.CheckStatus (status);
1645 GraphicsState state = new GraphicsState ();
1646 state.nativeState = saveState;
1650 public void ScaleTransform (float sx, float sy)
1652 ScaleTransform (sx, sy, MatrixOrder.Prepend);
1655 public void ScaleTransform (float sx, float sy, MatrixOrder order)
1657 Status status = GDIPlus.GdipScaleWorldTransform (nativeObject, sx, sy, order);
1658 GDIPlus.CheckStatus (status);
1662 public void SetClip (RectangleF rect)
1664 SetClip (rect, CombineMode.Replace);
1668 public void SetClip (GraphicsPath path)
1670 SetClip (path, CombineMode.Replace);
1674 public void SetClip (Rectangle rect)
1676 SetClip (rect, CombineMode.Replace);
1680 public void SetClip (Graphics g)
1682 SetClip (g, CombineMode.Replace);
1686 public void SetClip (Graphics g, CombineMode combineMode)
1688 Status status = GDIPlus.GdipSetClipGraphics (nativeObject, g.NativeObject, combineMode);
1689 GDIPlus.CheckStatus (status);
1693 public void SetClip (Rectangle rect, CombineMode combineMode)
1695 Status status = GDIPlus.GdipSetClipRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, combineMode);
1696 GDIPlus.CheckStatus (status);
1700 public void SetClip (RectangleF rect, CombineMode combineMode)
1702 Status status = GDIPlus.GdipSetClipRect (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, combineMode);
1703 GDIPlus.CheckStatus (status);
1707 public void SetClip (Region region, CombineMode combineMode)
1709 Status status = GDIPlus.GdipSetClipRegion(nativeObject, region.NativeObject, combineMode);
1710 GDIPlus.CheckStatus (status);
1714 public void SetClip (GraphicsPath path, CombineMode combineMode)
1716 Status status = GDIPlus.GdipSetClipPath (nativeObject, path.NativeObject, combineMode);
1717 GDIPlus.CheckStatus (status);
1721 public void TransformPoints (CoordinateSpace destSpace, CoordinateSpace srcSpace, PointF [] pts)
1723 IntPtr ptrPt = GDIPlus.FromPointToUnManagedMemory (pts);
1725 Status status = GDIPlus.GdipTransformPoints (nativeObject, destSpace, srcSpace, ptrPt, pts.Length);
1726 GDIPlus.CheckStatus (status);
1728 GDIPlus.FromUnManagedMemoryToPoint (ptrPt, pts);
1732 public void TransformPoints (CoordinateSpace destSpace, CoordinateSpace srcSpace, Point [] pts)
1734 IntPtr ptrPt = GDIPlus.FromPointToUnManagedMemoryI (pts);
1736 Status status = GDIPlus.GdipTransformPointsI (nativeObject, destSpace, srcSpace, ptrPt, pts.Length);
1737 GDIPlus.CheckStatus (status);
1739 GDIPlus.FromUnManagedMemoryToPointI (ptrPt, pts);
1743 public void TranslateClip (int dx, int dy)
1745 Status status = GDIPlus.GdipTranslateClipI (nativeObject, dx, dy);
1746 GDIPlus.CheckStatus (status);
1750 public void TranslateClip (float dx, float dy)
1752 Status status = GDIPlus.GdipTranslateClip (nativeObject, dx, dy);
1753 GDIPlus.CheckStatus (status);
1756 public void TranslateTransform (float dx, float dy)
1758 TranslateTransform (dx, dy, MatrixOrder.Prepend);
1762 public void TranslateTransform (float dx, float dy, MatrixOrder order)
1764 Status status = GDIPlus.GdipTranslateWorldTransform (nativeObject, dx, dy, order);
1765 GDIPlus.CheckStatus (status);
1768 public Region Clip {
1770 Region reg = new Region();
1771 Status status = GDIPlus.GdipGetClip (nativeObject, reg.NativeObject);
1772 GDIPlus.CheckStatus (status);
1776 SetClip (value, CombineMode.Replace);
1780 public RectangleF ClipBounds {
1782 RectangleF rect = new RectangleF ();
1783 Status status = GDIPlus.GdipGetClipBounds (nativeObject, out rect);
1784 GDIPlus.CheckStatus (status);
1789 public CompositingMode CompositingMode {
1791 CompositingMode mode;
1792 Status status = GDIPlus.GdipGetCompositingMode (nativeObject, out mode);
1793 GDIPlus.CheckStatus (status);
1798 Status status = GDIPlus.GdipSetCompositingMode (nativeObject, value);
1799 GDIPlus.CheckStatus (status);
1804 public CompositingQuality CompositingQuality {
1806 CompositingQuality quality;
1808 Status status = GDIPlus.GdipGetCompositingQuality (nativeObject, out quality);
1809 GDIPlus.CheckStatus (status);
1813 Status status = GDIPlus.GdipSetCompositingQuality (nativeObject, value);
1814 GDIPlus.CheckStatus (status);
1822 Status status = GDIPlus.GdipGetDpiX (nativeObject, out x);
1823 GDIPlus.CheckStatus (status);
1832 Status status = GDIPlus.GdipGetDpiY (nativeObject, out y);
1833 GDIPlus.CheckStatus (status);
1838 public InterpolationMode InterpolationMode {
1840 InterpolationMode imode = InterpolationMode.Invalid;
1841 Status status = GDIPlus.GdipGetInterpolationMode (nativeObject, out imode);
1842 GDIPlus.CheckStatus (status);
1846 Status status = GDIPlus.GdipSetInterpolationMode (nativeObject, value);
1847 GDIPlus.CheckStatus (status);
1851 public bool IsClipEmpty {
1853 bool isEmpty = false;
1855 Status status = GDIPlus.GdipIsClipEmpty (nativeObject, out isEmpty);
1856 GDIPlus.CheckStatus (status);
1861 public bool IsVisibleClipEmpty {
1863 bool isEmpty = false;
1865 Status status = GDIPlus.GdipIsVisibleClipEmpty (nativeObject, out isEmpty);
1866 GDIPlus.CheckStatus (status);
1871 public float PageScale {
1875 Status status = GDIPlus.GdipGetPageScale (nativeObject, out scale);
1876 GDIPlus.CheckStatus (status);
1880 Status status = GDIPlus.GdipSetPageScale (nativeObject, value);
1881 GDIPlus.CheckStatus (status);
1885 public GraphicsUnit PageUnit {
1889 Status status = GDIPlus.GdipGetPageUnit (nativeObject, out unit);
1890 GDIPlus.CheckStatus (status);
1894 Status status = GDIPlus.GdipSetPageUnit (nativeObject, value);
1895 GDIPlus.CheckStatus (status);
1899 public PixelOffsetMode PixelOffsetMode {
1901 PixelOffsetMode pixelOffset = PixelOffsetMode.Invalid;
1903 Status status = GDIPlus.GdipGetPixelOffsetMode (nativeObject, out pixelOffset);
1904 GDIPlus.CheckStatus (status);
1908 Status status = GDIPlus.GdipSetPixelOffsetMode (nativeObject, value);
1909 GDIPlus.CheckStatus (status);
1913 public Point RenderingOrigin {
1916 Status status = GDIPlus.GdipGetRenderingOrigin (nativeObject, out x, out y);
1917 GDIPlus.CheckStatus (status);
1918 return new Point (x, y);
1922 Status status = GDIPlus.GdipSetRenderingOrigin (nativeObject, value.X, value.Y);
1923 GDIPlus.CheckStatus (status);
1927 public SmoothingMode SmoothingMode {
1929 SmoothingMode mode = SmoothingMode.Invalid;
1931 Status status = GDIPlus.GdipGetSmoothingMode (nativeObject, out mode);
1932 GDIPlus.CheckStatus (status);
1937 Status status = GDIPlus.GdipSetSmoothingMode (nativeObject, value);
1938 GDIPlus.CheckStatus (status);
1942 public int TextContrast {
1946 Status status = GDIPlus.GdipGetTextContrast (nativeObject, out contrast);
1947 GDIPlus.CheckStatus (status);
1952 Status status = GDIPlus.GdipSetTextContrast (nativeObject, value);
1953 GDIPlus.CheckStatus (status);
1957 public TextRenderingHint TextRenderingHint {
1959 TextRenderingHint hint;
1961 Status status = GDIPlus.GdipGetTextRenderingHint (nativeObject, out hint);
1962 GDIPlus.CheckStatus (status);
1967 Status status = GDIPlus.GdipSetTextRenderingHint (nativeObject, value);
1968 GDIPlus.CheckStatus (status);
1972 public Matrix Transform {
1974 Matrix matrix = new Matrix ();
1975 Status status = GDIPlus.GdipGetWorldTransform (nativeObject, matrix.nativeMatrix);
1976 GDIPlus.CheckStatus (status);
1980 Status status = GDIPlus.GdipSetWorldTransform (nativeObject, value.nativeMatrix);
1981 GDIPlus.CheckStatus (status);
1985 public RectangleF VisibleClipBounds {
1989 Status status = GDIPlus.GdipGetVisibleClipBounds (nativeObject, out rect);
1990 GDIPlus.CheckStatus (status);