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);
158 GC.SuppressFinalize(this);
162 public void DrawArc (Pen pen, Rectangle rect, float startAngle, float sweepAngle)
164 DrawArc (pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
168 public void DrawArc (Pen pen, RectangleF rect, float startAngle, float sweepAngle)
170 DrawArc (pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
174 public void DrawArc (Pen pen, float x, float y, float width, float height, float startAngle, float sweepAngle)
177 status = GDIPlus.GdipDrawArc (nativeObject, pen.nativeObject,
178 x, y, width, height, startAngle, sweepAngle);
179 GDIPlus.CheckStatus (status);
182 // Microsoft documentation states that the signature for this member should be
183 // public void DrawArc( Pen pen, int x, int y, int width, int height, int startAngle,
184 // int sweepAngle. However, GdipDrawArcI uses also float for the startAngle and sweepAngle params
185 public void DrawArc (Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle)
188 status = GDIPlus.GdipDrawArcI (nativeObject, pen.nativeObject,
189 x, y, width, height, startAngle, sweepAngle);
190 GDIPlus.CheckStatus (status);
193 public void DrawBezier (Pen pen, PointF pt1, PointF pt2, PointF pt3, PointF pt4)
196 status = GDIPlus.GdipDrawBezier (nativeObject, pen.nativeObject,
197 pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X,
198 pt3.Y, pt4.X, pt4.Y);
199 GDIPlus.CheckStatus (status);
202 public void DrawBezier (Pen pen, Point pt1, Point pt2, Point pt3, Point pt4)
205 status = GDIPlus.GdipDrawBezierI (nativeObject, pen.nativeObject,
206 pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X,
207 pt3.Y, pt4.X, pt4.Y);
208 GDIPlus.CheckStatus (status);
211 public void DrawBezier (Pen pen, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4)
214 status = GDIPlus.GdipDrawBezier (nativeObject, pen.nativeObject, x1,
215 y1, x2, y2, x3, y3, x4, y4);
216 GDIPlus.CheckStatus (status);
219 public void DrawBeziers (Pen pen, Point [] points)
221 int length = points.Length;
227 for (int i = 0; i < length; i += 3) {
228 Point p1 = points [i];
229 Point p2 = points [i + 1];
230 Point p3 = points [i + 2];
231 Point p4 = points [i + 3];
233 status = GDIPlus.GdipDrawBezier (nativeObject,
235 p1.X, p1.Y, p2.X, p2.Y,
236 p3.X, p3.Y, p4.X, p4.Y);
237 GDIPlus.CheckStatus (status);
241 public void DrawBeziers (Pen pen, PointF [] points)
243 int length = points.Length;
249 for (int i = 0; i < length; i += 3) {
250 PointF p1 = points [i];
251 PointF p2 = points [i + 1];
252 PointF p3 = points [i + 2];
253 PointF p4 = points [i + 3];
255 status = GDIPlus.GdipDrawBezier (nativeObject,
257 p1.X, p1.Y, p2.X, p2.Y,
258 p3.X, p3.Y, p4.X, p4.Y);
259 GDIPlus.CheckStatus (status);
264 public void DrawClosedCurve (Pen pen, PointF [] points)
267 status = GDIPlus.GdipDrawClosedCurve (nativeObject, pen.nativeObject, points, points.Length);
268 GDIPlus.CheckStatus (status);
271 public void DrawClosedCurve (Pen pen, Point [] points)
274 status = GDIPlus.GdipDrawClosedCurveI (nativeObject, pen.nativeObject, points, points.Length);
275 GDIPlus.CheckStatus (status);
278 public void DrawClosedCurve (Pen pen, Point [] points, float tension, FillMode fillmode)
281 status = GDIPlus.GdipDrawClosedCurve2I (nativeObject, pen.nativeObject, points, points.Length, tension);
282 GDIPlus.CheckStatus (status);
285 public void DrawClosedCurve (Pen pen, PointF [] points, float tension, FillMode fillmode)
288 status = GDIPlus.GdipDrawClosedCurve2 (nativeObject, pen.nativeObject, points, points.Length, tension);
289 GDIPlus.CheckStatus (status);
292 public void DrawCurve (Pen pen, Point [] points)
295 status = GDIPlus.GdipDrawCurveI (nativeObject, pen.nativeObject, points, points.Length);
296 GDIPlus.CheckStatus (status);
299 public void DrawCurve (Pen pen, PointF [] points)
302 status = GDIPlus.GdipDrawCurve (nativeObject, pen.nativeObject, points, points.Length);
303 GDIPlus.CheckStatus (status);
306 public void DrawCurve (Pen pen, PointF [] points, float tension)
309 status = GDIPlus.GdipDrawCurve2 (nativeObject, pen.nativeObject, points, points.Length, tension);
310 GDIPlus.CheckStatus (status);
313 public void DrawCurve (Pen pen, Point [] points, float tension)
316 status = GDIPlus.GdipDrawCurve2I (nativeObject, pen.nativeObject, points, points.Length, tension);
317 GDIPlus.CheckStatus (status);
321 public void DrawCurve (Pen pen, PointF [] points, int offset, int numberOfSegments)
324 status = GDIPlus.GdipDrawCurve3 (nativeObject, pen.nativeObject,
325 points, points.Length, offset,
326 numberOfSegments, 0.5f);
327 GDIPlus.CheckStatus (status);
330 public void DrawCurve (Pen pen, Point [] points, int offset, int numberOfSegments, float tension)
333 status = GDIPlus.GdipDrawCurve3I (nativeObject, pen.nativeObject,
334 points, points.Length, offset,
335 numberOfSegments, tension);
336 GDIPlus.CheckStatus (status);
340 public void DrawCurve (Pen pen, PointF [] points, int offset, int numberOfSegments, float tension)
343 status = GDIPlus.GdipDrawCurve3 (nativeObject, pen.nativeObject,
344 points, points.Length, offset,
345 numberOfSegments, tension);
346 GDIPlus.CheckStatus (status);
349 public void DrawEllipse (Pen pen, Rectangle rect)
351 DrawEllipse (pen, rect.X, rect.Y, rect.Width, rect.Height);
354 public void DrawEllipse (Pen pen, RectangleF rect)
356 DrawEllipse (pen, rect.X, rect.Y, rect.Width, rect.Height);
359 public void DrawEllipse (Pen pen, int x, int y, int width, int height)
362 status = GDIPlus.GdipDrawEllipseI (nativeObject, pen.nativeObject, x, y, width, height);
363 GDIPlus.CheckStatus (status);
366 public void DrawEllipse (Pen pen, float x, float y, float width, float height)
368 Status status = GDIPlus.GdipDrawEllipse (nativeObject, pen.nativeObject, x, y, width, height);
369 GDIPlus.CheckStatus (status);
372 public void DrawIcon (Icon icon, Rectangle targetRect)
374 Image img = icon.ToBitmap ();
375 DrawImage (img, targetRect);
378 public void DrawIcon (Icon icon, int x, int y)
380 Image img = icon.ToBitmap ();
381 DrawImage (img, x, y);
384 public void DrawIconUnstretched (Icon icon, Rectangle targetRect)
386 Image img = icon.ToBitmap ();
387 DrawImageUnscaled (img, targetRect);
390 public void DrawImage (Image image, RectangleF rect)
392 Status status = GDIPlus.GdipDrawImageRect(nativeObject, image.NativeObject, rect.X, rect.Y, rect.Width, rect.Height);
393 GDIPlus.CheckStatus (status);
397 public void DrawImage (Image image, PointF point)
399 Status status = GDIPlus.GdipDrawImage (nativeObject, image.NativeObject, point.X, point.Y);
400 GDIPlus.CheckStatus (status);
404 public void DrawImage (Image image, Point [] destPoints)
406 Status status = GDIPlus.GdipDrawImagePointsI (nativeObject, image.NativeObject, destPoints, destPoints.Length);
407 GDIPlus.CheckStatus (status);
411 public void DrawImage (Image image, Point point)
413 DrawImage (image, point.X, point.Y);
417 public void DrawImage (Image image, Rectangle rect)
419 DrawImage (image, rect.X, rect.Y, rect.Width, rect.Height);
423 public void DrawImage (Image image, PointF [] destPoints)
425 Status status = GDIPlus.GdipDrawImagePoints (nativeObject, image.NativeObject, destPoints, destPoints.Length);
426 GDIPlus.CheckStatus (status);
430 public void DrawImage (Image image, int x, int y)
432 Status status = GDIPlus.GdipDrawImageI (nativeObject, image.NativeObject, x, y);
433 GDIPlus.CheckStatus (status);
437 public void DrawImage (Image image, float x, float y)
439 Status status = GDIPlus.GdipDrawImage (nativeObject, image.NativeObject, x, y);
440 GDIPlus.CheckStatus (status);
444 public void DrawImage (Image image, Rectangle destRect, Rectangle srcRect, GraphicsUnit srcUnit)
446 Status status = GDIPlus.GdipDrawImageRectRectI (nativeObject, image.NativeObject,
447 destRect.X, destRect.Y, destRect.Width, destRect.Height,
448 srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height,
449 srcUnit, IntPtr.Zero, null, IntPtr.Zero);
450 GDIPlus.CheckStatus (status);
453 public void DrawImage (Image image, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit)
455 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
456 destRect.X, destRect.Y, destRect.Width, destRect.Height,
457 srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height,
458 srcUnit, IntPtr.Zero, null, IntPtr.Zero);
459 GDIPlus.CheckStatus (status);
463 public void DrawImage (Image image, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit)
465 Status status = GDIPlus.GdipDrawImagePointsRectI (nativeObject, image.NativeObject,
466 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
467 srcRect.Width, srcRect.Height, srcUnit, IntPtr.Zero,
469 GDIPlus.CheckStatus (status);
473 public void DrawImage (Image image, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit)
476 Status status = GDIPlus.GdipDrawImagePointsRect (nativeObject, image.NativeObject,
477 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
478 srcRect.Width, srcRect.Height, srcUnit, IntPtr.Zero,
480 GDIPlus.CheckStatus (status);
484 public void DrawImage (Image image, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit,
485 ImageAttributes imageAttr)
487 Status status = GDIPlus.GdipDrawImagePointsRectI (nativeObject, image.NativeObject,
488 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
489 srcRect.Width, srcRect.Height, srcUnit,
490 imageAttr != null ? imageAttr.NativeObject : IntPtr.Zero, null, IntPtr.Zero);
491 GDIPlus.CheckStatus (status);
494 public void DrawImage (Image image, float x, float y, float width, float height)
496 Status status = GDIPlus.GdipDrawImageRect(nativeObject, image.NativeObject, x, y,
498 GDIPlus.CheckStatus (status);
502 public void DrawImage (Image image, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit,
503 ImageAttributes imageAttr)
505 Status status = GDIPlus.GdipDrawImagePointsRect (nativeObject, image.NativeObject,
506 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
507 srcRect.Width, srcRect.Height, srcUnit,
508 imageAttr != null ? imageAttr.NativeObject : IntPtr.Zero, null, IntPtr.Zero);
509 GDIPlus.CheckStatus (status);
513 public void DrawImage (Image image, int x, int y, Rectangle srcRect, GraphicsUnit srcUnit)
515 Status status = GDIPlus.GdipDrawImagePointRectI(nativeObject, image.NativeObject, x, y, srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit);
516 GDIPlus.CheckStatus (status);
519 public void DrawImage (Image image, int x, int y, int width, int height)
521 Status status = GDIPlus.GdipDrawImageRectI (nativeObject, image.nativeObject, x, y, width, height);
522 GDIPlus.CheckStatus (status);
525 public void DrawImage (Image image, float x, float y, RectangleF srcRect, GraphicsUnit srcUnit)
527 Status status = GDIPlus.GdipDrawImagePointRect (nativeObject, image.nativeObject, x, y, srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit);
528 GDIPlus.CheckStatus (status);
532 public void DrawImage (Image image, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)
534 Status status = GDIPlus.GdipDrawImagePointsRect (nativeObject, image.NativeObject,
535 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
536 srcRect.Width, srcRect.Height, srcUnit,
537 imageAttr != null ? imageAttr.NativeObject : IntPtr.Zero, callback, IntPtr.Zero);
538 GDIPlus.CheckStatus (status);
542 public void DrawImage (Image image, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)
545 Status status = GDIPlus.GdipDrawImagePointsRectI (nativeObject, image.NativeObject,
546 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
547 srcRect.Width, srcRect.Height, srcUnit,
548 imageAttr != null ? imageAttr.NativeObject : IntPtr.Zero, callback, IntPtr.Zero);
549 GDIPlus.CheckStatus (status);
553 public void DrawImage (Image image, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, int callbackData)
556 Status status = GDIPlus.GdipDrawImagePointsRectI (nativeObject, image.NativeObject,
557 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
558 srcRect.Width, srcRect.Height, srcUnit,
559 imageAttr != null ? imageAttr.NativeObject : IntPtr.Zero, callback, (IntPtr) callbackData);
560 GDIPlus.CheckStatus (status);
564 public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit)
566 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
567 destRect.X, destRect.Y, destRect.Width, destRect.Height,
568 srcX, srcY, srcWidth, srcHeight, srcUnit, IntPtr.Zero,
570 GDIPlus.CheckStatus (status);
573 public void DrawImage (Image image, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, int callbackData)
575 Status status = GDIPlus.GdipDrawImagePointsRect (nativeObject, image.NativeObject,
576 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
577 srcRect.Width, srcRect.Height, srcUnit,
578 imageAttr != null ? imageAttr.NativeObject : IntPtr.Zero, callback, (IntPtr) callbackData);
579 GDIPlus.CheckStatus (status);
583 public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit)
585 Status status = GDIPlus.GdipDrawImageRectRectI (nativeObject, image.NativeObject,
586 destRect.X, destRect.Y, destRect.Width, destRect.Height,
587 srcX, srcY, srcWidth, srcHeight, srcUnit, IntPtr.Zero,
589 GDIPlus.CheckStatus (status);
593 public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttrs)
595 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
596 destRect.X, destRect.Y, destRect.Width, destRect.Height,
597 srcX, srcY, srcWidth, srcHeight, srcUnit,
598 imageAttrs != null ? imageAttrs.NativeObject : IntPtr.Zero, null, IntPtr.Zero);
599 GDIPlus.CheckStatus (status);
602 public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr)
604 Status status = GDIPlus.GdipDrawImageRectRectI (nativeObject, image.NativeObject,
605 destRect.X, destRect.Y, destRect.Width,
606 destRect.Height, srcX, srcY, srcWidth, srcHeight,
607 srcUnit, imageAttr != null ? imageAttr.NativeObject : IntPtr.Zero, null, IntPtr.Zero);
608 GDIPlus.CheckStatus (status);
611 public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)
613 Status status = GDIPlus.GdipDrawImageRectRectI (nativeObject, image.NativeObject,
614 destRect.X, destRect.Y, destRect.Width,
615 destRect.Height, srcX, srcY, srcWidth, srcHeight,
616 srcUnit, imageAttr != null ? imageAttr.NativeObject : IntPtr.Zero, callback,
618 GDIPlus.CheckStatus (status);
621 public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)
623 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
624 destRect.X, destRect.Y, destRect.Width,
625 destRect.Height, srcX, srcY, srcWidth, srcHeight,
626 srcUnit, imageAttr != null ? imageAttr.NativeObject : IntPtr.Zero,
627 callback, IntPtr.Zero);
628 GDIPlus.CheckStatus (status);
632 public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, IntPtr callbackData)
634 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
635 destRect.X, destRect.Y, destRect.Width, destRect.Height,
636 srcX, srcY, srcWidth, srcHeight, srcUnit,
637 imageAttr != null ? imageAttr.NativeObject : IntPtr.Zero, callback, callbackData);
638 GDIPlus.CheckStatus (status);
642 public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, IntPtr callbackData)
644 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
645 destRect.X, destRect.Y, destRect.Width, destRect.Height,
646 srcX, srcY, srcWidth, srcHeight, srcUnit,
647 imageAttr != null ? imageAttr.NativeObject : IntPtr.Zero, callback, callbackData);
648 GDIPlus.CheckStatus (status);
651 public void DrawImageUnscaled (Image image, Point point)
653 DrawImageUnscaled (image, point.X, point.Y);
656 public void DrawImageUnscaled (Image image, Rectangle rect)
658 DrawImageUnscaled (image, rect.X, rect.Y, rect.Width, rect.Height);
661 public void DrawImageUnscaled (Image image, int x, int y)
663 DrawImage (image, x, y, image.Width, image.Height);
666 public void DrawImageUnscaled (Image image, int x, int y, int width, int height)
668 Image tmpImg = new Bitmap (width, height);
669 Graphics g = FromImage (tmpImg);
670 g.DrawImage (image, 0, 0, image.Width, image.Height);
671 this.DrawImage (tmpImg, x, y, width, height);
676 public void DrawLine (Pen pen, PointF pt1, PointF pt2)
678 Status status = GDIPlus.GdipDrawLine (nativeObject, pen.nativeObject,
679 pt1.X, pt1.Y, pt2.X, pt2.Y);
680 GDIPlus.CheckStatus (status);
683 public void DrawLine (Pen pen, Point pt1, Point pt2)
685 Status status = GDIPlus.GdipDrawLineI (nativeObject, pen.nativeObject,
686 pt1.X, pt1.Y, pt2.X, pt2.Y);
687 GDIPlus.CheckStatus (status);
690 public void DrawLine (Pen pen, int x1, int y1, int x2, int y2)
692 Status status = GDIPlus.GdipDrawLineI (nativeObject, pen.nativeObject, x1, y1, x2, y2);
693 GDIPlus.CheckStatus (status);
696 public void DrawLine (Pen pen, float x1, float y1, float x2, float y2)
698 Status status = GDIPlus.GdipDrawLine (nativeObject, pen.nativeObject, x1, y1, x2, y2);
699 GDIPlus.CheckStatus (status);
702 public void DrawLines (Pen pen, PointF [] points)
704 Status status = GDIPlus.GdipDrawLines (nativeObject, pen.nativeObject, points, points.Length);
705 GDIPlus.CheckStatus (status);
708 public void DrawLines (Pen pen, Point [] points)
710 Status status = GDIPlus.GdipDrawLinesI (nativeObject, pen.nativeObject, points, points.Length);
711 GDIPlus.CheckStatus (status);
714 public void DrawPath (Pen pen, GraphicsPath path)
716 Status status = GDIPlus.GdipDrawPath (nativeObject, pen.nativeObject, path.nativePath);
717 GDIPlus.CheckStatus (status);
720 public void DrawPie (Pen pen, Rectangle rect, float startAngle, float sweepAngle)
722 DrawPie (pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
725 public void DrawPie (Pen pen, RectangleF rect, float startAngle, float sweepAngle)
727 DrawPie (pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
730 public void DrawPie (Pen pen, float x, float y, float width, float height, float startAngle, float sweepAngle)
732 Status status = GDIPlus.GdipDrawPie (nativeObject, pen.nativeObject, x, y, width, height, startAngle, sweepAngle);
733 GDIPlus.CheckStatus (status);
736 // Microsoft documentation states that the signature for this member should be
737 // public void DrawPie(Pen pen, int x, int y, int width, int height, int startAngle
738 // int sweepAngle. However, GdipDrawPieI uses also float for the startAngle and sweepAngle params
739 public void DrawPie (Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle)
741 Status status = GDIPlus.GdipDrawPieI (nativeObject, pen.nativeObject, x, y, width, height, startAngle, sweepAngle);
742 GDIPlus.CheckStatus (status);
745 public void DrawPolygon (Pen pen, Point [] points)
747 Status status = GDIPlus.GdipDrawPolygonI (nativeObject, pen.nativeObject, points, points.Length);
748 GDIPlus.CheckStatus (status);
751 public void DrawPolygon (Pen pen, PointF [] points)
753 Status status = GDIPlus.GdipDrawPolygon (nativeObject, pen.nativeObject, points, points.Length);
754 GDIPlus.CheckStatus (status);
757 internal void DrawRectangle (Pen pen, RectangleF rect)
759 DrawRectangle (pen, rect.Left, rect.Top, rect.Width, rect.Height);
762 public void DrawRectangle (Pen pen, Rectangle rect)
764 DrawRectangle (pen, rect.Left, rect.Top, rect.Width, rect.Height);
767 public void DrawRectangle (Pen pen, float x, float y, float width, float height)
769 Status status = GDIPlus.GdipDrawRectangle (nativeObject, pen.nativeObject, x, y, width, height);
770 GDIPlus.CheckStatus (status);
773 public void DrawRectangle (Pen pen, int x, int y, int width, int height)
775 Status status = GDIPlus.GdipDrawRectangleI (nativeObject, pen.nativeObject, x, y, width, height);
776 GDIPlus.CheckStatus (status);
779 public void DrawRectangles (Pen pen, RectangleF [] rects)
781 Status status = GDIPlus.GdipDrawRectangles (nativeObject, pen.nativeObject, rects, rects.Length);
782 GDIPlus.CheckStatus (status);
785 public void DrawRectangles (Pen pen, Rectangle [] rects)
787 Status status = GDIPlus.GdipDrawRectanglesI (nativeObject, pen.nativeObject, rects, rects.Length);
788 GDIPlus.CheckStatus (status);
791 public void DrawString (string s, Font font, Brush brush, RectangleF layoutRectangle)
793 DrawString (s, font, brush, layoutRectangle, null);
796 public void DrawString (string s, Font font, Brush brush, PointF point)
798 DrawString (s, font, brush, new RectangleF (point.X, point.Y, 0, 0), null);
801 public void DrawString (string s, Font font, Brush brush, PointF point, StringFormat format)
803 DrawString(s, font, brush, new RectangleF(point.X, point.Y, 0, 0), format);
806 public void DrawString (string s, Font font, Brush brush, float x, float y)
808 DrawString (s, font, brush, new RectangleF (x, y, 0, 0), null);
811 public void DrawString (string s, Font font, Brush brush, float x, float y, StringFormat format)
813 DrawString (s, font, brush, new RectangleF(x, y, 0, 0), format);
816 public void DrawString (string s, Font font, Brush brush, RectangleF layoutRectangle, StringFormat format)
819 throw new ArgumentNullException ("font");
821 throw new ArgumentNullException ("brush");
822 if (s == null || s.Length == 0)
825 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject, ref layoutRectangle, format != null ? format.NativeObject : IntPtr.Zero, brush.nativeObject);
826 GDIPlus.CheckStatus (status);
829 public void EndContainer (GraphicsContainer container)
831 Status status = GDIPlus.GdipEndContainer(nativeObject, container.NativeObject);
832 GDIPlus.CheckStatus (status);
836 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, EnumerateMetafileProc callback)
838 throw new NotImplementedException ();
842 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, EnumerateMetafileProc callback)
844 throw new NotImplementedException ();
848 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, EnumerateMetafileProc callback)
850 throw new NotImplementedException ();
854 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, EnumerateMetafileProc callback)
856 throw new NotImplementedException ();
860 public void EnumerateMetafile (Metafile metafile, Point destPoint, EnumerateMetafileProc callback)
862 throw new NotImplementedException ();
866 public void EnumerateMetafile (Metafile metafile, PointF destPoint, EnumerateMetafileProc callback)
868 throw new NotImplementedException ();
872 public void EnumerateMetafile (Metafile metafile, PointF destPoint, EnumerateMetafileProc callback, IntPtr callbackData)
874 throw new NotImplementedException ();
878 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, EnumerateMetafileProc callback, IntPtr callbackData)
880 throw new NotImplementedException ();
884 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData)
886 throw new NotImplementedException ();
890 public void EnumerateMetafile (Metafile metafile, Point destPoint, EnumerateMetafileProc callback, IntPtr callbackData)
892 throw new NotImplementedException ();
896 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData)
898 throw new NotImplementedException ();
902 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, EnumerateMetafileProc callback, IntPtr callbackData)
904 throw new NotImplementedException ();
908 public void EnumerateMetafile (Metafile metafile, PointF destPoint, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
910 throw new NotImplementedException ();
914 public void EnumerateMetafile (Metafile metafile, Point destPoint, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
916 throw new NotImplementedException ();
920 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
922 throw new NotImplementedException ();
926 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
928 throw new NotImplementedException ();
932 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
934 throw new NotImplementedException ();
938 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
940 throw new NotImplementedException ();
944 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
946 throw new NotImplementedException ();
950 public void EnumerateMetafile (Metafile metafile, Point destPoint, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
952 throw new NotImplementedException ();
956 public void EnumerateMetafile (Metafile metafile, PointF destPoint, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
958 throw new NotImplementedException ();
962 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
964 throw new NotImplementedException ();
968 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
970 throw new NotImplementedException ();
974 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
976 throw new NotImplementedException ();
980 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
982 throw new NotImplementedException ();
986 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
988 throw new NotImplementedException ();
992 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
994 throw new NotImplementedException ();
998 public void EnumerateMetafile (Metafile metafile, PointF destPoint, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
1000 throw new NotImplementedException ();
1004 public void EnumerateMetafile (Metafile metafile, Point destPoint, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
1006 throw new NotImplementedException ();
1010 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
1012 throw new NotImplementedException ();
1016 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, Rectangle srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1018 throw new NotImplementedException ();
1022 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, Rectangle srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1024 throw new NotImplementedException ();
1028 public void EnumerateMetafile (Metafile metafile, Point destPoint, Rectangle srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1030 throw new NotImplementedException ();
1034 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, RectangleF srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1036 throw new NotImplementedException ();
1040 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, RectangleF srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1042 throw new NotImplementedException ();
1046 public void EnumerateMetafile (Metafile metafile, PointF destPoint, RectangleF srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1048 throw new NotImplementedException ();
1051 public void ExcludeClip (Rectangle rect)
1053 Status status = GDIPlus.GdipSetClipRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, CombineMode.Exclude);
1054 GDIPlus.CheckStatus (status);
1057 public void ExcludeClip (Region region)
1059 Status status = GDIPlus.GdipSetClipRegion (nativeObject, region.NativeObject, CombineMode.Exclude);
1060 GDIPlus.CheckStatus (status);
1064 public void FillClosedCurve (Brush brush, PointF [] points)
1066 Status status = GDIPlus.GdipFillClosedCurve (nativeObject, brush.NativeObject, points, points.Length);
1067 GDIPlus.CheckStatus (status);
1071 public void FillClosedCurve (Brush brush, Point [] points)
1073 Status status = GDIPlus.GdipFillClosedCurveI (nativeObject, brush.NativeObject, points, points.Length);
1074 GDIPlus.CheckStatus (status);
1078 public void FillClosedCurve (Brush brush, PointF [] points, FillMode fillmode)
1080 FillClosedCurve (brush, points, fillmode, 0.5f);
1083 public void FillClosedCurve (Brush brush, Point [] points, FillMode fillmode)
1085 FillClosedCurve (brush, points, fillmode, 0.5f);
1088 public void FillClosedCurve (Brush brush, PointF [] points, FillMode fillmode, float tension)
1090 Status status = GDIPlus.GdipFillClosedCurve2 (nativeObject, brush.NativeObject, points, points.Length, tension, fillmode);
1091 GDIPlus.CheckStatus (status);
1094 public void FillClosedCurve (Brush brush, Point [] points, FillMode fillmode, float tension)
1096 Status status = GDIPlus.GdipFillClosedCurve2I (nativeObject, brush.NativeObject, points, points.Length, tension, fillmode);
1097 GDIPlus.CheckStatus (status);
1100 public void FillEllipse (Brush brush, Rectangle rect)
1102 FillEllipse (brush, rect.X, rect.Y, rect.Width, rect.Height);
1105 public void FillEllipse (Brush brush, RectangleF rect)
1107 FillEllipse (brush, rect.X, rect.Y, rect.Width, rect.Height);
1110 public void FillEllipse (Brush brush, float x, float y, float width, float height)
1112 Status status = GDIPlus.GdipFillEllipse (nativeObject, brush.nativeObject, x, y, width, height);
1113 GDIPlus.CheckStatus (status);
1116 public void FillEllipse (Brush brush, int x, int y, int width, int height)
1118 Status status = GDIPlus.GdipFillEllipseI (nativeObject, brush.nativeObject, x, y, width, height);
1119 GDIPlus.CheckStatus (status);
1122 public void FillPath (Brush brush, GraphicsPath path)
1124 Status status = GDIPlus.GdipFillPath (nativeObject, brush.NativeObject, path.NativeObject);
1125 GDIPlus.CheckStatus (status);
1128 public void FillPie (Brush brush, Rectangle rect, float startAngle, float sweepAngle)
1130 Status status = GDIPlus.GdipFillPie (nativeObject, brush.NativeObject, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
1131 GDIPlus.CheckStatus (status);
1134 public void FillPie (Brush brush, int x, int y, int width, int height, int startAngle, int sweepAngle)
1136 Status status = GDIPlus.GdipFillPieI (nativeObject, brush.NativeObject, x, y, width, height, startAngle, sweepAngle);
1137 GDIPlus.CheckStatus (status);
1140 public void FillPie (Brush brush, float x, float y, float width, float height, float startAngle, float sweepAngle)
1142 Status status = GDIPlus.GdipFillPie (nativeObject, brush.NativeObject, x, y, width, height, startAngle, sweepAngle);
1143 GDIPlus.CheckStatus (status);
1146 public void FillPolygon (Brush brush, PointF [] points)
1148 Status status = GDIPlus.GdipFillPolygon2 (nativeObject, brush.nativeObject, points, points.Length);
1149 GDIPlus.CheckStatus (status);
1152 public void FillPolygon (Brush brush, Point [] points)
1154 Status status = GDIPlus.GdipFillPolygon2I (nativeObject, brush.nativeObject, points, points.Length);
1155 GDIPlus.CheckStatus (status);
1158 public void FillPolygon (Brush brush, Point [] points, FillMode fillMode)
1160 Status status = GDIPlus.GdipFillPolygonI (nativeObject, brush.nativeObject, points, points.Length, fillMode);
1161 GDIPlus.CheckStatus (status);
1164 public void FillPolygon (Brush brush, PointF [] points, FillMode fillMode)
1166 Status status = GDIPlus.GdipFillPolygon (nativeObject, brush.nativeObject, points, points.Length, fillMode);
1167 GDIPlus.CheckStatus (status);
1170 public void FillRectangle (Brush brush, RectangleF rect)
1172 FillRectangle (brush, rect.Left, rect.Top, rect.Width, rect.Height);
1175 public void FillRectangle (Brush brush, Rectangle rect)
1177 FillRectangle (brush, rect.Left, rect.Top, rect.Width, rect.Height);
1180 public void FillRectangle (Brush brush, int x, int y, int width, int height)
1182 Status status = GDIPlus.GdipFillRectangleI (nativeObject, brush.nativeObject, x, y, width, height);
1183 GDIPlus.CheckStatus (status);
1186 public void FillRectangle (Brush brush, float x, float y, float width, float height)
1188 Status status = GDIPlus.GdipFillRectangle (nativeObject, brush.nativeObject, x, y, width, height);
1189 GDIPlus.CheckStatus (status);
1192 public void FillRectangles (Brush brush, Rectangle [] rects)
1194 Status status = GDIPlus.GdipFillRectanglesI (nativeObject, brush.nativeObject, rects, rects.Length);
1195 GDIPlus.CheckStatus (status);
1198 public void FillRectangles (Brush brush, RectangleF [] rects)
1200 Status status = GDIPlus.GdipFillRectangles (nativeObject, brush.nativeObject, rects, rects.Length);
1201 GDIPlus.CheckStatus (status);
1205 public void FillRegion (Brush brush, Region region)
1207 Status status = GDIPlus.GdipFillRegion (nativeObject, brush.NativeObject, region.NativeObject);
1208 GDIPlus.CheckStatus(status);
1212 public void Flush ()
1214 Flush (FlushIntention.Flush);
1218 public void Flush (FlushIntention intention)
1220 Status status = GDIPlus.GdipFlush (nativeObject, intention);
1221 GDIPlus.CheckStatus (status);
1222 if (GDIPlus.UseQuartzDrawable || GDIPlus.UseCocoaDrawable)
1223 Carbon.CGContextSynchronize (GDIPlus.Display);
1226 [EditorBrowsable (EditorBrowsableState.Advanced)]
1227 public static Graphics FromHdc (IntPtr hdc)
1230 Status status = GDIPlus.GdipCreateFromHDC (hdc, out graphics);
1231 GDIPlus.CheckStatus (status);
1232 return new Graphics (graphics);
1236 [EditorBrowsable (EditorBrowsableState.Advanced)]
1237 public static Graphics FromHdc (IntPtr hdc, IntPtr hdevice)
1239 throw new NotImplementedException ();
1242 [EditorBrowsable (EditorBrowsableState.Advanced)]
1243 [SecurityPermission (SecurityAction.LinkDemand, UnmanagedCode = true)]
1244 public static Graphics FromHdcInternal (IntPtr hdc)
1246 GDIPlus.Display = hdc;
1250 [EditorBrowsable (EditorBrowsableState.Advanced)]
1251 public static Graphics FromHwnd (IntPtr hwnd)
1255 if (GDIPlus.UseCocoaDrawable) {
1256 CarbonContext cgContext = Carbon.GetCGContextForNSView (hwnd);
1257 GDIPlus.GdipCreateFromQuartz_macosx (cgContext.ctx, cgContext.width, cgContext.height, out graphics);
1259 GDIPlus.Display = cgContext.ctx;
1260 return new Graphics (graphics);
1262 if (GDIPlus.UseQuartzDrawable) {
1263 CarbonContext cgContext = Carbon.GetCGContextForView (hwnd);
1264 GDIPlus.GdipCreateFromQuartz_macosx (cgContext.ctx, cgContext.width, cgContext.height, out graphics);
1266 GDIPlus.Display = cgContext.ctx;
1267 return new Graphics (graphics);
1269 if (GDIPlus.UseX11Drawable) {
1270 if (GDIPlus.Display == IntPtr.Zero) {
1271 GDIPlus.Display = GDIPlus.XOpenDisplay (IntPtr.Zero);
1274 return FromXDrawable (hwnd, GDIPlus.Display);
1278 Status status = GDIPlus.GdipCreateFromHWND (hwnd, out graphics);
1279 GDIPlus.CheckStatus (status);
1281 return new Graphics (graphics);
1284 [EditorBrowsable (EditorBrowsableState.Advanced)]
1285 [SecurityPermission (SecurityAction.LinkDemand, UnmanagedCode = true)]
1286 public static Graphics FromHwndInternal (IntPtr hwnd)
1288 return FromHwnd (hwnd);
1291 public static Graphics FromImage (Image image)
1296 throw new ArgumentNullException ();
1298 Status status = GDIPlus.GdipGetImageGraphicsContext (image.nativeObject, out graphics);
1299 GDIPlus.CheckStatus (status);
1300 Graphics result = new Graphics (graphics);
1302 // check for Unix platforms - see FAQ for more details
1303 // http://www.mono-project.com/FAQ:_Technical#How_to_detect_the_execution_platform_.3F
1304 int platform = (int) Environment.OSVersion.Platform;
1305 if ((platform == 4) || (platform == 128)) {
1306 Rectangle rect = new Rectangle (0,0, image.Width, image.Height);
1307 GDIPlus.GdipSetVisibleClip_linux (result.NativeObject, ref rect);
1313 internal static Graphics FromXDrawable (IntPtr drawable, IntPtr display)
1317 Status s = GDIPlus.GdipCreateFromXDrawable_linux (drawable, display, out graphics);
1318 GDIPlus.CheckStatus (s);
1319 return new Graphics (graphics);
1323 public static IntPtr GetHalftonePalette ()
1325 throw new NotImplementedException ();
1328 [EditorBrowsable (EditorBrowsableState.Advanced)]
1329 public IntPtr GetHdc ()
1332 GDIPlus.CheckStatus (GDIPlus.GdipGetDC (this.nativeObject, out hdc));
1337 public Color GetNearestColor (Color color)
1341 Status status = GDIPlus.GdipGetNearestColor (nativeObject, out argb);
1342 GDIPlus.CheckStatus (status);
1344 return Color.FromArgb (argb);
1348 public void IntersectClip (Region region)
1350 Status status = GDIPlus.GdipSetClipRegion (nativeObject, region.NativeObject, CombineMode.Intersect);
1351 GDIPlus.CheckStatus (status);
1354 public void IntersectClip (RectangleF rect)
1356 Status status = GDIPlus.GdipSetClipRect (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, CombineMode.Intersect);
1357 GDIPlus.CheckStatus (status);
1360 public void IntersectClip (Rectangle rect)
1362 Status status = GDIPlus.GdipSetClipRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, CombineMode.Intersect);
1363 GDIPlus.CheckStatus (status);
1366 public bool IsVisible (Point point)
1368 bool isVisible = false;
1370 Status status = GDIPlus.GdipIsVisiblePointI (nativeObject, point.X, point.Y, out isVisible);
1371 GDIPlus.CheckStatus (status);
1377 public bool IsVisible (RectangleF rect)
1379 bool isVisible = false;
1381 Status status = GDIPlus.GdipIsVisibleRect (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, out isVisible);
1382 GDIPlus.CheckStatus (status);
1387 public bool IsVisible (PointF point)
1389 bool isVisible = false;
1391 Status status = GDIPlus.GdipIsVisiblePoint (nativeObject, point.X, point.Y, out isVisible);
1392 GDIPlus.CheckStatus (status);
1397 public bool IsVisible (Rectangle rect)
1399 bool isVisible = false;
1401 Status status = GDIPlus.GdipIsVisibleRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, out isVisible);
1402 GDIPlus.CheckStatus (status);
1407 public bool IsVisible (float x, float y)
1409 return IsVisible (new PointF (x, y));
1412 public bool IsVisible (int x, int y)
1414 return IsVisible (new Point (x, y));
1417 public bool IsVisible (float x, float y, float width, float height)
1419 return IsVisible (new RectangleF (x, y, width, height));
1423 public bool IsVisible (int x, int y, int width, int height)
1425 return IsVisible (new Rectangle (x, y, width, height));
1429 public Region [] MeasureCharacterRanges (string text, Font font, RectangleF layoutRect, StringFormat stringFormat)
1432 int regcount = stringFormat.GetMeasurableCharacterRangeCount ();
1433 IntPtr[] native_regions = new IntPtr [regcount];
1434 Region[] regions = new Region [regcount];
1436 for (int i = 0; i < regcount; i++) {
1437 regions[i] = new Region ();
1438 native_regions[i] = regions[i].NativeObject;
1441 status = GDIPlus.GdipMeasureCharacterRanges (nativeObject, text, text.Length,
1442 font.NativeObject, ref layoutRect, stringFormat.NativeObject,
1443 regcount, out native_regions[0]);
1445 GDIPlus.CheckStatus (status);
1451 public SizeF MeasureString (string text, Font font)
1453 return MeasureString (text, font, new Size (0, 0));
1457 public SizeF MeasureString (string text, Font font, SizeF layoutArea)
1459 int charactersFitted, linesFilled;
1460 RectangleF boundingBox = new RectangleF ();
1461 RectangleF rect = new RectangleF (0, 0, layoutArea.Width,
1464 if (text == null || text.Length == 0)
1468 throw new ArgumentNullException ("font");
1470 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1471 font.NativeObject, ref rect,
1472 IntPtr.Zero, out boundingBox,
1473 out charactersFitted, out linesFilled);
1474 GDIPlus.CheckStatus (status);
1476 return new SizeF (boundingBox.Width, boundingBox.Height);
1480 public SizeF MeasureString (string text, Font font, int width)
1482 RectangleF boundingBox = new RectangleF ();
1483 RectangleF rect = new RectangleF (0, 0, width, 999999);
1484 int charactersFitted, linesFilled;
1486 if (text == null || text.Length == 0)
1490 throw new ArgumentNullException ("font");
1492 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1493 font.NativeObject, ref rect,
1494 IntPtr.Zero, out boundingBox,
1495 out charactersFitted, out linesFilled);
1496 GDIPlus.CheckStatus (status);
1498 return new SizeF (boundingBox.Width, boundingBox.Height);
1502 public SizeF MeasureString (string text, Font font, SizeF layoutArea,
1503 StringFormat stringFormat)
1505 int charactersFitted, linesFilled;
1506 return MeasureString (text, font, layoutArea, stringFormat,
1507 out charactersFitted, out linesFilled);
1511 public SizeF MeasureString (string text, Font font, int width, StringFormat format)
1513 int charactersFitted, linesFilled;
1514 return MeasureString (text, font, new SizeF (width, 999999),
1515 format, out charactersFitted, out linesFilled);
1519 public SizeF MeasureString (string text, Font font, PointF origin,
1520 StringFormat stringFormat)
1522 RectangleF boundingBox = new RectangleF ();
1523 RectangleF rect = new RectangleF (origin.X, origin.Y, 0, 0);
1524 int charactersFitted, linesFilled;
1526 if (text == null || text.Length == 0)
1530 throw new ArgumentNullException ("font");
1532 if (stringFormat == null)
1533 stringFormat = new StringFormat ();
1535 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1536 font.NativeObject, ref rect,
1537 stringFormat.NativeObject,
1539 out charactersFitted,
1541 GDIPlus.CheckStatus (status);
1543 return new SizeF (boundingBox.Width, boundingBox.Height);
1547 public SizeF MeasureString (string text, Font font, SizeF layoutArea,
1548 StringFormat stringFormat, out int charactersFitted,
1549 out int linesFilled)
1551 RectangleF boundingBox = new RectangleF ();
1552 RectangleF rect = new RectangleF (0, 0, layoutArea.Width, layoutArea.Height);
1553 charactersFitted = 0;
1556 if (text == null || text.Length == 0)
1560 throw new ArgumentNullException ("font");
1562 if (stringFormat == null)
1563 stringFormat = new StringFormat ();
1565 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1566 font.NativeObject, ref rect,
1567 stringFormat.NativeObject,
1569 out charactersFitted,
1571 GDIPlus.CheckStatus (status);
1573 return new SizeF (boundingBox.Width, boundingBox.Height);
1576 public void MultiplyTransform (Matrix matrix)
1578 MultiplyTransform (matrix, MatrixOrder.Prepend);
1581 public void MultiplyTransform (Matrix matrix, MatrixOrder order)
1583 Status status = GDIPlus.GdipMultiplyWorldTransform (nativeObject,
1584 matrix.nativeMatrix,
1586 GDIPlus.CheckStatus (status);
1589 [EditorBrowsable (EditorBrowsableState.Advanced)]
1590 public void ReleaseHdc (IntPtr hdc)
1592 Status status = GDIPlus.GdipReleaseDC (nativeObject, hdc);
1593 GDIPlus.CheckStatus (status);
1597 [EditorBrowsable (EditorBrowsableState.Advanced)]
1598 [SecurityPermission (SecurityAction.LinkDemand, UnmanagedCode = true)]
1599 public void ReleaseHdcInternal (IntPtr hdc)
1601 throw new NotImplementedException ();
1605 public void ResetClip ()
1607 Status status = GDIPlus.GdipResetClip (nativeObject);
1608 GDIPlus.CheckStatus (status);
1611 public void ResetTransform ()
1613 Status status = GDIPlus.GdipResetWorldTransform (nativeObject);
1614 GDIPlus.CheckStatus (status);
1617 public void Restore (GraphicsState gstate)
1619 Status status = GDIPlus.GdipRestoreGraphics (nativeObject, gstate.nativeState);
1620 GDIPlus.CheckStatus (status);
1624 public void RotateTransform (float angle)
1626 RotateTransform (angle, MatrixOrder.Prepend);
1629 public void RotateTransform (float angle, MatrixOrder order)
1632 Status status = GDIPlus.GdipRotateWorldTransform (nativeObject, angle, order);
1633 GDIPlus.CheckStatus (status);
1636 public GraphicsState Save ()
1639 Status status = GDIPlus.GdipSaveGraphics (nativeObject, out saveState);
1640 GDIPlus.CheckStatus (status);
1642 GraphicsState state = new GraphicsState ();
1643 state.nativeState = saveState;
1647 public void ScaleTransform (float sx, float sy)
1649 ScaleTransform (sx, sy, MatrixOrder.Prepend);
1652 public void ScaleTransform (float sx, float sy, MatrixOrder order)
1654 Status status = GDIPlus.GdipScaleWorldTransform (nativeObject, sx, sy, order);
1655 GDIPlus.CheckStatus (status);
1659 public void SetClip (RectangleF rect)
1661 SetClip (rect, CombineMode.Replace);
1665 public void SetClip (GraphicsPath path)
1667 SetClip (path, CombineMode.Replace);
1671 public void SetClip (Rectangle rect)
1673 SetClip (rect, CombineMode.Replace);
1677 public void SetClip (Graphics g)
1679 SetClip (g, CombineMode.Replace);
1683 public void SetClip (Graphics g, CombineMode combineMode)
1685 Status status = GDIPlus.GdipSetClipGraphics (nativeObject, g.NativeObject, combineMode);
1686 GDIPlus.CheckStatus (status);
1690 public void SetClip (Rectangle rect, CombineMode combineMode)
1692 Status status = GDIPlus.GdipSetClipRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, combineMode);
1693 GDIPlus.CheckStatus (status);
1697 public void SetClip (RectangleF rect, CombineMode combineMode)
1699 Status status = GDIPlus.GdipSetClipRect (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, combineMode);
1700 GDIPlus.CheckStatus (status);
1704 public void SetClip (Region region, CombineMode combineMode)
1706 Status status = GDIPlus.GdipSetClipRegion(nativeObject, region.NativeObject, combineMode);
1707 GDIPlus.CheckStatus (status);
1711 public void SetClip (GraphicsPath path, CombineMode combineMode)
1713 Status status = GDIPlus.GdipSetClipPath (nativeObject, path.NativeObject, combineMode);
1714 GDIPlus.CheckStatus (status);
1718 public void TransformPoints (CoordinateSpace destSpace, CoordinateSpace srcSpace, PointF [] pts)
1720 IntPtr ptrPt = GDIPlus.FromPointToUnManagedMemory (pts);
1722 Status status = GDIPlus.GdipTransformPoints (nativeObject, destSpace, srcSpace, ptrPt, pts.Length);
1723 GDIPlus.CheckStatus (status);
1725 GDIPlus.FromUnManagedMemoryToPoint (ptrPt, pts);
1729 public void TransformPoints (CoordinateSpace destSpace, CoordinateSpace srcSpace, Point [] pts)
1731 IntPtr ptrPt = GDIPlus.FromPointToUnManagedMemoryI (pts);
1733 Status status = GDIPlus.GdipTransformPointsI (nativeObject, destSpace, srcSpace, ptrPt, pts.Length);
1734 GDIPlus.CheckStatus (status);
1736 GDIPlus.FromUnManagedMemoryToPointI (ptrPt, pts);
1740 public void TranslateClip (int dx, int dy)
1742 Status status = GDIPlus.GdipTranslateClipI (nativeObject, dx, dy);
1743 GDIPlus.CheckStatus (status);
1747 public void TranslateClip (float dx, float dy)
1749 Status status = GDIPlus.GdipTranslateClip (nativeObject, dx, dy);
1750 GDIPlus.CheckStatus (status);
1753 public void TranslateTransform (float dx, float dy)
1755 TranslateTransform (dx, dy, MatrixOrder.Prepend);
1759 public void TranslateTransform (float dx, float dy, MatrixOrder order)
1761 Status status = GDIPlus.GdipTranslateWorldTransform (nativeObject, dx, dy, order);
1762 GDIPlus.CheckStatus (status);
1765 public Region Clip {
1767 Region reg = new Region();
1768 Status status = GDIPlus.GdipGetClip (nativeObject, reg.NativeObject);
1769 GDIPlus.CheckStatus (status);
1773 SetClip (value, CombineMode.Replace);
1777 public RectangleF ClipBounds {
1779 RectangleF rect = new RectangleF ();
1780 Status status = GDIPlus.GdipGetClipBounds (nativeObject, out rect);
1781 GDIPlus.CheckStatus (status);
1786 public CompositingMode CompositingMode {
1788 CompositingMode mode;
1789 Status status = GDIPlus.GdipGetCompositingMode (nativeObject, out mode);
1790 GDIPlus.CheckStatus (status);
1795 Status status = GDIPlus.GdipSetCompositingMode (nativeObject, value);
1796 GDIPlus.CheckStatus (status);
1801 public CompositingQuality CompositingQuality {
1803 CompositingQuality quality;
1805 Status status = GDIPlus.GdipGetCompositingQuality (nativeObject, out quality);
1806 GDIPlus.CheckStatus (status);
1810 Status status = GDIPlus.GdipSetCompositingQuality (nativeObject, value);
1811 GDIPlus.CheckStatus (status);
1819 Status status = GDIPlus.GdipGetDpiX (nativeObject, out x);
1820 GDIPlus.CheckStatus (status);
1829 Status status = GDIPlus.GdipGetDpiY (nativeObject, out y);
1830 GDIPlus.CheckStatus (status);
1835 public InterpolationMode InterpolationMode {
1837 InterpolationMode imode = InterpolationMode.Invalid;
1838 Status status = GDIPlus.GdipGetInterpolationMode (nativeObject, out imode);
1839 GDIPlus.CheckStatus (status);
1843 Status status = GDIPlus.GdipSetInterpolationMode (nativeObject, value);
1844 GDIPlus.CheckStatus (status);
1848 public bool IsClipEmpty {
1850 bool isEmpty = false;
1852 Status status = GDIPlus.GdipIsClipEmpty (nativeObject, out isEmpty);
1853 GDIPlus.CheckStatus (status);
1858 public bool IsVisibleClipEmpty {
1860 bool isEmpty = false;
1862 Status status = GDIPlus.GdipIsVisibleClipEmpty (nativeObject, out isEmpty);
1863 GDIPlus.CheckStatus (status);
1868 public float PageScale {
1872 Status status = GDIPlus.GdipGetPageScale (nativeObject, out scale);
1873 GDIPlus.CheckStatus (status);
1877 Status status = GDIPlus.GdipSetPageScale (nativeObject, value);
1878 GDIPlus.CheckStatus (status);
1882 public GraphicsUnit PageUnit {
1886 Status status = GDIPlus.GdipGetPageUnit (nativeObject, out unit);
1887 GDIPlus.CheckStatus (status);
1891 Status status = GDIPlus.GdipSetPageUnit (nativeObject, value);
1892 GDIPlus.CheckStatus (status);
1896 public PixelOffsetMode PixelOffsetMode {
1898 PixelOffsetMode pixelOffset = PixelOffsetMode.Invalid;
1900 Status status = GDIPlus.GdipGetPixelOffsetMode (nativeObject, out pixelOffset);
1901 GDIPlus.CheckStatus (status);
1905 Status status = GDIPlus.GdipSetPixelOffsetMode (nativeObject, value);
1906 GDIPlus.CheckStatus (status);
1910 public Point RenderingOrigin {
1913 Status status = GDIPlus.GdipGetRenderingOrigin (nativeObject, out x, out y);
1914 GDIPlus.CheckStatus (status);
1915 return new Point (x, y);
1919 Status status = GDIPlus.GdipSetRenderingOrigin (nativeObject, value.X, value.Y);
1920 GDIPlus.CheckStatus (status);
1924 public SmoothingMode SmoothingMode {
1926 SmoothingMode mode = SmoothingMode.Invalid;
1928 Status status = GDIPlus.GdipGetSmoothingMode (nativeObject, out mode);
1929 GDIPlus.CheckStatus (status);
1934 Status status = GDIPlus.GdipSetSmoothingMode (nativeObject, value);
1935 GDIPlus.CheckStatus (status);
1939 public int TextContrast {
1943 Status status = GDIPlus.GdipGetTextContrast (nativeObject, out contrast);
1944 GDIPlus.CheckStatus (status);
1949 Status status = GDIPlus.GdipSetTextContrast (nativeObject, value);
1950 GDIPlus.CheckStatus (status);
1954 public TextRenderingHint TextRenderingHint {
1956 TextRenderingHint hint;
1958 Status status = GDIPlus.GdipGetTextRenderingHint (nativeObject, out hint);
1959 GDIPlus.CheckStatus (status);
1964 Status status = GDIPlus.GdipSetTextRenderingHint (nativeObject, value);
1965 GDIPlus.CheckStatus (status);
1969 public Matrix Transform {
1971 Matrix matrix = new Matrix ();
1972 Status status = GDIPlus.GdipGetWorldTransform (nativeObject, matrix.nativeMatrix);
1973 GDIPlus.CheckStatus (status);
1977 Status status = GDIPlus.GdipSetWorldTransform (nativeObject, value.nativeMatrix);
1978 GDIPlus.CheckStatus (status);
1982 public RectangleF VisibleClipBounds {
1986 Status status = GDIPlus.GdipGetVisibleClipBounds (nativeObject, out rect);
1987 GDIPlus.CheckStatus (status);