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 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;
40 namespace System.Drawing
43 public sealed class Graphics : MarshalByRefObject, IDisposable
45 internal IntPtr nativeObject = IntPtr.Zero;
46 private bool disposed = false;
47 private static float defDpiX = 0;
48 private static float defDpiY = 0;
49 private static IntPtr display = IntPtr.Zero;
50 private static bool use_x_drawable = false;
53 public delegate bool EnumerateMetafileProc (EmfPlusRecordType recordType,
57 PlayRecordCallback callbackData);
60 public delegate bool DrawImageAbort (IntPtr callbackData);
62 private Graphics (IntPtr nativeGraphics)
64 nativeObject = nativeGraphics;
65 if (Environment.OSVersion.Platform == (PlatformID) 128) {
66 use_x_drawable = true;
75 static internal float systemDpiX {
78 Bitmap bmp = new Bitmap(1,1);
79 Graphics g = Graphics.FromImage(bmp);
86 static internal float systemDpiY {
89 Bitmap bmp = new Bitmap(1,1);
90 Graphics g = Graphics.FromImage(bmp);
97 internal IntPtr NativeObject {
103 nativeObject = value;
108 public void AddMetafileComment (byte [] data)
110 throw new NotImplementedException ();
114 public GraphicsContainer BeginContainer ()
118 status = GDIPlus.GdipBeginContainer2 (nativeObject, out state);
119 GDIPlus.CheckStatus (status);
121 return new GraphicsContainer(state);
124 public GraphicsContainer BeginContainer (Rectangle dstrect, Rectangle srcrect, GraphicsUnit unit)
128 status = GDIPlus.GdipBeginContainerI (nativeObject, dstrect, srcrect, unit, out state);
129 GDIPlus.CheckStatus (status);
131 return new GraphicsContainer (state);
135 public GraphicsContainer BeginContainer (RectangleF dstrect, RectangleF srcrect, GraphicsUnit unit)
139 status = GDIPlus.GdipBeginContainer (nativeObject, dstrect, srcrect, unit, out state);
140 GDIPlus.CheckStatus (status);
142 return new GraphicsContainer (state);
146 public void Clear (Color color)
149 status = GDIPlus.GdipGraphicsClear (nativeObject, color.ToArgb ());
150 GDIPlus.CheckStatus (status);
153 public void Dispose ()
159 status = GDIPlus.GdipDeleteGraphics (nativeObject);
160 GDIPlus.CheckStatus (status);
167 public void DrawArc (Pen pen, Rectangle rect, float startAngle, float sweepAngle)
169 DrawArc (pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
173 public void DrawArc (Pen pen, RectangleF rect, float startAngle, float sweepAngle)
175 DrawArc (pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
179 public void DrawArc (Pen pen, float x, float y, float width, float height, float startAngle, float sweepAngle)
182 status = GDIPlus.GdipDrawArc (nativeObject, pen.nativeObject,
183 x, y, width, height, startAngle, sweepAngle);
184 GDIPlus.CheckStatus (status);
187 // Microsoft documentation states that the signature for this member should be
188 // public void DrawArc( Pen pen, int x, int y, int width, int height, int startAngle,
189 // int sweepAngle. However, GdipDrawArcI uses also float for the startAngle and sweepAngle params
190 public void DrawArc (Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle)
193 status = GDIPlus.GdipDrawArcI (nativeObject, pen.nativeObject,
194 x, y, width, height, startAngle, sweepAngle);
195 GDIPlus.CheckStatus (status);
198 public void DrawBezier (Pen pen, PointF pt1, PointF pt2, PointF pt3, PointF pt4)
201 status = GDIPlus.GdipDrawBezier (nativeObject, pen.nativeObject,
202 pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X,
203 pt3.Y, pt4.X, pt4.Y);
204 GDIPlus.CheckStatus (status);
207 public void DrawBezier (Pen pen, Point pt1, Point pt2, Point pt3, Point pt4)
210 status = GDIPlus.GdipDrawBezierI (nativeObject, pen.nativeObject,
211 pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X,
212 pt3.Y, pt4.X, pt4.Y);
213 GDIPlus.CheckStatus (status);
216 public void DrawBezier (Pen pen, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4)
219 status = GDIPlus.GdipDrawBezier (nativeObject, pen.nativeObject, x1,
220 y1, x2, y2, x3, y3, x4, y4);
221 GDIPlus.CheckStatus (status);
224 public void DrawBeziers (Pen pen, Point [] points)
226 int length = points.Length;
232 for (int i = 0; i < length; i += 3) {
233 Point p1 = points [i];
234 Point p2 = points [i + 1];
235 Point p3 = points [i + 2];
236 Point p4 = points [i + 3];
238 status = GDIPlus.GdipDrawBezier (nativeObject,
240 p1.X, p1.Y, p2.X, p2.Y,
241 p3.X, p3.Y, p4.X, p4.Y);
242 GDIPlus.CheckStatus (status);
246 public void DrawBeziers (Pen pen, PointF [] points)
248 int length = points.Length;
254 for (int i = 0; i < length; i += 3) {
255 PointF p1 = points [i];
256 PointF p2 = points [i + 1];
257 PointF p3 = points [i + 2];
258 PointF p4 = points [i + 3];
260 status = GDIPlus.GdipDrawBezier (nativeObject,
262 p1.X, p1.Y, p2.X, p2.Y,
263 p3.X, p3.Y, p4.X, p4.Y);
264 GDIPlus.CheckStatus (status);
269 public void DrawClosedCurve (Pen pen, PointF [] points)
272 status = GDIPlus.GdipDrawClosedCurve (nativeObject, pen.nativeObject, points, points.Length);
273 GDIPlus.CheckStatus (status);
276 public void DrawClosedCurve (Pen pen, Point [] points)
279 status = GDIPlus.GdipDrawClosedCurveI (nativeObject, pen.nativeObject, points, points.Length);
280 GDIPlus.CheckStatus (status);
283 public void DrawClosedCurve (Pen pen, Point [] points, float tension, FillMode fillmode)
286 status = GDIPlus.GdipDrawClosedCurve2I (nativeObject, pen.nativeObject, points, points.Length, tension);
287 GDIPlus.CheckStatus (status);
290 public void DrawClosedCurve (Pen pen, PointF [] points, float tension, FillMode fillmode)
293 status = GDIPlus.GdipDrawClosedCurve2 (nativeObject, pen.nativeObject, points, points.Length, tension);
294 GDIPlus.CheckStatus (status);
297 public void DrawCurve (Pen pen, Point [] points)
300 status = GDIPlus.GdipDrawCurveI (nativeObject, pen.nativeObject, points, points.Length);
301 GDIPlus.CheckStatus (status);
304 public void DrawCurve (Pen pen, PointF [] points)
307 status = GDIPlus.GdipDrawCurve (nativeObject, pen.nativeObject, points, points.Length);
308 GDIPlus.CheckStatus (status);
311 public void DrawCurve (Pen pen, PointF [] points, float tension)
314 status = GDIPlus.GdipDrawCurve2 (nativeObject, pen.nativeObject, points, points.Length, tension);
315 GDIPlus.CheckStatus (status);
318 public void DrawCurve (Pen pen, Point [] points, float tension)
321 status = GDIPlus.GdipDrawCurve2I (nativeObject, pen.nativeObject, points, points.Length, tension);
322 GDIPlus.CheckStatus (status);
326 public void DrawCurve (Pen pen, PointF [] points, int offset, int numberOfSegments)
329 status = GDIPlus.GdipDrawCurve3 (nativeObject, pen.nativeObject,
330 points, points.Length, offset,
331 numberOfSegments, 0.5f);
332 GDIPlus.CheckStatus (status);
335 public void DrawCurve (Pen pen, Point [] points, int offset, int numberOfSegments, float tension)
338 status = GDIPlus.GdipDrawCurve3I (nativeObject, pen.nativeObject,
339 points, points.Length, offset,
340 numberOfSegments, tension);
341 GDIPlus.CheckStatus (status);
345 public void DrawCurve (Pen pen, PointF [] points, int offset, int numberOfSegments, float tension)
348 status = GDIPlus.GdipDrawCurve3 (nativeObject, pen.nativeObject,
349 points, points.Length, offset,
350 numberOfSegments, tension);
351 GDIPlus.CheckStatus (status);
354 public void DrawEllipse (Pen pen, Rectangle rect)
356 DrawEllipse (pen, rect.X, rect.Y, rect.Width, rect.Height);
359 public void DrawEllipse (Pen pen, RectangleF rect)
361 DrawEllipse (pen, rect.X, rect.Y, rect.Width, rect.Height);
364 public void DrawEllipse (Pen pen, int x, int y, int width, int height)
367 status = GDIPlus.GdipDrawEllipseI (nativeObject, pen.nativeObject, x, y, width, height);
368 GDIPlus.CheckStatus (status);
371 public void DrawEllipse (Pen pen, float x, float y, float width, float height)
373 Status status = GDIPlus.GdipDrawEllipse (nativeObject, pen.nativeObject, x, y, width, height);
374 GDIPlus.CheckStatus (status);
377 public void DrawIcon (Icon icon, Rectangle targetRect)
379 Image img = icon.ToBitmap ();
380 DrawImage (img, targetRect);
383 public void DrawIcon (Icon icon, int x, int y)
385 Image img = icon.ToBitmap ();
386 DrawImage (img, x, y);
389 public void DrawIconUnstretched (Icon icon, Rectangle targetRect)
391 Image img = icon.ToBitmap ();
392 DrawImageUnscaled (img, targetRect);
395 public void DrawImage (Image image, RectangleF rect)
397 Status status = GDIPlus.GdipDrawImageRect(nativeObject, image.NativeObject, rect.X, rect.Y, rect.Width, rect.Height);
398 GDIPlus.CheckStatus (status);
402 public void DrawImage (Image image, PointF point)
404 Status status = GDIPlus.GdipDrawImage (nativeObject, image.NativeObject, point.X, point.Y);
405 GDIPlus.CheckStatus (status);
409 public void DrawImage (Image image, Point [] destPoints)
411 Status status = GDIPlus.GdipDrawImagePointsI (nativeObject, image.NativeObject, destPoints, destPoints.Length);
412 GDIPlus.CheckStatus (status);
416 public void DrawImage (Image image, Point point)
418 DrawImage (image, point.X, point.Y);
422 public void DrawImage (Image image, Rectangle rect)
424 DrawImage (image, rect.X, rect.Y, rect.Width, rect.Height);
428 public void DrawImage (Image image, PointF [] destPoints)
430 Status status = GDIPlus.GdipDrawImagePoints (nativeObject, image.NativeObject, destPoints, destPoints.Length);
431 GDIPlus.CheckStatus (status);
435 public void DrawImage (Image image, int x, int y)
437 Status status = GDIPlus.GdipDrawImageI (nativeObject, image.NativeObject, x, y);
438 GDIPlus.CheckStatus (status);
442 public void DrawImage (Image image, float x, float y)
444 Status status = GDIPlus.GdipDrawImage (nativeObject, image.NativeObject, x, y);
445 GDIPlus.CheckStatus (status);
449 public void DrawImage (Image image, Rectangle destRect, Rectangle srcRect, GraphicsUnit srcUnit)
451 Status status = GDIPlus.GdipDrawImageRectRectI (nativeObject, image.NativeObject,
452 destRect.X, destRect.Y, destRect.Width, destRect.Height,
453 srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height,
454 srcUnit, IntPtr.Zero, null, IntPtr.Zero);
455 GDIPlus.CheckStatus (status);
458 public void DrawImage (Image image, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit)
460 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
461 destRect.X, destRect.Y, destRect.Width, destRect.Height,
462 srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height,
463 srcUnit, IntPtr.Zero, null, IntPtr.Zero);
464 GDIPlus.CheckStatus (status);
468 public void DrawImage (Image image, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit)
470 Status status = GDIPlus.GdipDrawImagePointsRectI (nativeObject, image.NativeObject,
471 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
472 srcRect.Width, srcRect.Height, srcUnit, IntPtr.Zero,
474 GDIPlus.CheckStatus (status);
478 public void DrawImage (Image image, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit)
481 Status status = GDIPlus.GdipDrawImagePointsRect (nativeObject, image.NativeObject,
482 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
483 srcRect.Width, srcRect.Height, srcUnit, IntPtr.Zero,
485 GDIPlus.CheckStatus (status);
489 public void DrawImage (Image image, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit,
490 ImageAttributes imageAttr)
492 Status status = GDIPlus.GdipDrawImagePointsRectI (nativeObject, image.NativeObject,
493 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
494 srcRect.Width, srcRect.Height, srcUnit,
495 imageAttr.NativeObject, null, IntPtr.Zero);
496 GDIPlus.CheckStatus (status);
499 public void DrawImage (Image image, float x, float y, float width, float height)
501 Status status = GDIPlus.GdipDrawImageRect(nativeObject, image.NativeObject, x, y,
503 GDIPlus.CheckStatus (status);
507 public void DrawImage (Image image, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit,
508 ImageAttributes imageAttr)
510 Status status = GDIPlus.GdipDrawImagePointsRect (nativeObject, image.NativeObject,
511 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
512 srcRect.Width, srcRect.Height, srcUnit,
513 imageAttr.NativeObject, null, IntPtr.Zero);
514 GDIPlus.CheckStatus (status);
518 public void DrawImage (Image image, int x, int y, Rectangle srcRect, GraphicsUnit srcUnit)
520 Status status = GDIPlus.GdipDrawImagePointRectI(nativeObject, image.NativeObject, x, y, srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit);
521 GDIPlus.CheckStatus (status);
524 public void DrawImage (Image image, int x, int y, int width, int height)
526 Status status = GDIPlus.GdipDrawImageRectI (nativeObject, image.nativeObject, x, y, width, height);
527 GDIPlus.CheckStatus (status);
530 public void DrawImage (Image image, float x, float y, RectangleF srcRect, GraphicsUnit srcUnit)
532 Status status = GDIPlus.GdipDrawImagePointRect (nativeObject, image.nativeObject, x, y, srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit);
533 GDIPlus.CheckStatus (status);
537 public void DrawImage (Image image, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)
539 Status status = GDIPlus.GdipDrawImagePointsRect (nativeObject, image.NativeObject,
540 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
541 srcRect.Width, srcRect.Height, srcUnit,
542 imageAttr.NativeObject, callback, IntPtr.Zero);
543 GDIPlus.CheckStatus (status);
547 public void DrawImage (Image image, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)
550 Status status = GDIPlus.GdipDrawImagePointsRectI (nativeObject, image.NativeObject,
551 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
552 srcRect.Width, srcRect.Height, srcUnit,
553 imageAttr.NativeObject, callback, IntPtr.Zero);
554 GDIPlus.CheckStatus (status);
558 public void DrawImage (Image image, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, int callbackData)
561 Status status = GDIPlus.GdipDrawImagePointsRectI (nativeObject, image.NativeObject,
562 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
563 srcRect.Width, srcRect.Height, srcUnit,
564 imageAttr.NativeObject, callback, (IntPtr) callbackData);
565 GDIPlus.CheckStatus (status);
569 public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit)
571 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
572 destRect.X, destRect.Y, destRect.Width, destRect.Height,
573 srcX, srcY, srcWidth, srcHeight, srcUnit, IntPtr.Zero,
575 GDIPlus.CheckStatus (status);
578 public void DrawImage (Image image, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, int callbackData)
580 Status status = GDIPlus.GdipDrawImagePointsRect (nativeObject, image.NativeObject,
581 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
582 srcRect.Width, srcRect.Height, srcUnit,
583 imageAttr.NativeObject, callback, (IntPtr) callbackData);
584 GDIPlus.CheckStatus (status);
588 public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit)
590 Status status = GDIPlus.GdipDrawImageRectRectI (nativeObject, image.NativeObject,
591 destRect.X, destRect.Y, destRect.Width, destRect.Height,
592 srcX, srcY, srcWidth, srcHeight, srcUnit, IntPtr.Zero,
594 GDIPlus.CheckStatus (status);
598 public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttrs)
600 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
601 destRect.X, destRect.Y, destRect.Width, destRect.Height,
602 srcX, srcY, srcWidth, srcHeight, srcUnit,
603 imageAttrs.NativeObject, null, IntPtr.Zero);
604 GDIPlus.CheckStatus (status);
607 public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr)
609 Status status = GDIPlus.GdipDrawImageRectRectI (nativeObject, image.NativeObject,
610 destRect.X, destRect.Y, destRect.Width,
611 destRect.Height, srcX, srcY, srcWidth, srcHeight,
612 srcUnit, imageAttr.NativeObject, null, IntPtr.Zero);
613 GDIPlus.CheckStatus (status);
616 public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)
618 Status status = GDIPlus.GdipDrawImageRectRectI (nativeObject, image.NativeObject,
619 destRect.X, destRect.Y, destRect.Width,
620 destRect.Height, srcX, srcY, srcWidth, srcHeight,
621 srcUnit, imageAttr.NativeObject, callback,
623 GDIPlus.CheckStatus (status);
626 public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)
628 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
629 destRect.X, destRect.Y, destRect.Width,
630 destRect.Height, srcX, srcY, srcWidth, srcHeight,
631 srcUnit, imageAttr.NativeObject,
632 callback, IntPtr.Zero);
633 GDIPlus.CheckStatus (status);
637 public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, IntPtr callbackData)
639 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
640 destRect.X, destRect.Y, destRect.Width, destRect.Height,
641 srcX, srcY, srcWidth, srcHeight, srcUnit,
642 imageAttr.NativeObject, callback, callbackData);
643 GDIPlus.CheckStatus (status);
647 public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, IntPtr callbackData)
649 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
650 destRect.X, destRect.Y, destRect.Width, destRect.Height,
651 srcX, srcY, srcWidth, srcHeight, srcUnit,
652 imageAttr.NativeObject, callback, callbackData);
653 GDIPlus.CheckStatus (status);
656 public void DrawImageUnscaled (Image image, Point point)
658 DrawImageUnscaled (image, point.X, point.Y);
661 public void DrawImageUnscaled (Image image, Rectangle rect)
663 DrawImageUnscaled (image, rect.X, rect.Y, rect.Width, rect.Height);
666 public void DrawImageUnscaled (Image image, int x, int y)
668 DrawImage (image, x, y, image.Width, image.Height);
671 public void DrawImageUnscaled (Image image, int x, int y, int width, int height)
673 Image tmpImg = new Bitmap (width, height);
674 Graphics g = FromImage (tmpImg);
675 g.DrawImage (image, 0, 0, image.Width, image.Height);
676 this.DrawImage (tmpImg, x, y, width, height);
681 public void DrawLine (Pen pen, PointF pt1, PointF pt2)
683 Status status = GDIPlus.GdipDrawLine (nativeObject, pen.nativeObject,
684 pt1.X, pt1.Y, pt2.X, pt2.Y);
685 GDIPlus.CheckStatus (status);
688 public void DrawLine (Pen pen, Point pt1, Point pt2)
690 Status status = GDIPlus.GdipDrawLineI (nativeObject, pen.nativeObject,
691 pt1.X, pt1.Y, pt2.X, pt2.Y);
692 GDIPlus.CheckStatus (status);
695 public void DrawLine (Pen pen, int x1, int y1, int x2, int y2)
697 Status status = GDIPlus.GdipDrawLineI (nativeObject, pen.nativeObject, x1, y1, x2, y2);
698 GDIPlus.CheckStatus (status);
701 public void DrawLine (Pen pen, float x1, float y1, float x2, float y2)
703 Status status = GDIPlus.GdipDrawLine (nativeObject, pen.nativeObject, x1, y1, x2, y2);
704 GDIPlus.CheckStatus (status);
707 public void DrawLines (Pen pen, PointF [] points)
709 Status status = GDIPlus.GdipDrawLines (nativeObject, pen.nativeObject, points, points.Length);
710 GDIPlus.CheckStatus (status);
713 public void DrawLines (Pen pen, Point [] points)
715 Status status = GDIPlus.GdipDrawLinesI (nativeObject, pen.nativeObject, points, points.Length);
716 GDIPlus.CheckStatus (status);
719 public void DrawPath (Pen pen, GraphicsPath path)
721 Status status = GDIPlus.GdipDrawPath (nativeObject, pen.nativeObject, path.nativePath);
722 GDIPlus.CheckStatus (status);
725 public void DrawPie (Pen pen, Rectangle rect, float startAngle, float sweepAngle)
727 DrawPie (pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
730 public void DrawPie (Pen pen, RectangleF rect, float startAngle, float sweepAngle)
732 DrawPie (pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
735 public void DrawPie (Pen pen, float x, float y, float width, float height, float startAngle, float sweepAngle)
737 Status status = GDIPlus.GdipDrawPie (nativeObject, pen.nativeObject, x, y, width, height, startAngle, sweepAngle);
738 GDIPlus.CheckStatus (status);
741 // Microsoft documentation states that the signature for this member should be
742 // public void DrawPie(Pen pen, int x, int y, int width, int height, int startAngle
743 // int sweepAngle. However, GdipDrawPieI uses also float for the startAngle and sweepAngle params
744 public void DrawPie (Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle)
746 Status status = GDIPlus.GdipDrawPieI (nativeObject, pen.nativeObject, x, y, width, height, startAngle, sweepAngle);
747 GDIPlus.CheckStatus (status);
750 public void DrawPolygon (Pen pen, Point [] points)
752 Status status = GDIPlus.GdipDrawPolygonI (nativeObject, pen.nativeObject, points, points.Length);
753 GDIPlus.CheckStatus (status);
756 public void DrawPolygon (Pen pen, PointF [] points)
758 Status status = GDIPlus.GdipDrawPolygon (nativeObject, pen.nativeObject, points, points.Length);
759 GDIPlus.CheckStatus (status);
762 internal void DrawRectangle (Pen pen, RectangleF rect)
764 DrawRectangle (pen, rect.Left, rect.Top, rect.Width, rect.Height);
767 public void DrawRectangle (Pen pen, Rectangle rect)
769 DrawRectangle (pen, rect.Left, rect.Top, rect.Width, rect.Height);
772 public void DrawRectangle (Pen pen, float x, float y, float width, float height)
774 Status status = GDIPlus.GdipDrawRectangle (nativeObject, pen.nativeObject, x, y, width, height);
775 GDIPlus.CheckStatus (status);
778 public void DrawRectangle (Pen pen, int x, int y, int width, int height)
780 Status status = GDIPlus.GdipDrawRectangleI (nativeObject, pen.nativeObject, x, y, width, height);
781 GDIPlus.CheckStatus (status);
784 public void DrawRectangles (Pen pen, RectangleF [] rects)
786 Status status = GDIPlus.GdipDrawRectangles (nativeObject, pen.nativeObject, rects, rects.Length);
787 GDIPlus.CheckStatus (status);
790 public void DrawRectangles (Pen pen, Rectangle [] rects)
792 Status status = GDIPlus.GdipDrawRectanglesI (nativeObject, pen.nativeObject, rects, rects.Length);
793 GDIPlus.CheckStatus (status);
796 public void DrawString (string s, Font font, Brush brush, RectangleF layoutRectangle)
798 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject, ref layoutRectangle, IntPtr.Zero, brush.nativeObject);
799 GDIPlus.CheckStatus (status);
802 public void DrawString (string s, Font font, Brush brush, PointF point)
804 RectangleF rc = new RectangleF (point.X, point.Y, 0, 0);
805 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject, ref rc, IntPtr.Zero, brush.nativeObject);
806 GDIPlus.CheckStatus (status);
809 public void DrawString (string s, Font font, Brush brush, PointF point, StringFormat format)
811 RectangleF rc = new RectangleF (point.X, point.Y, 0, 0);
812 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject, ref rc, format.NativeObject, brush.nativeObject);
813 GDIPlus.CheckStatus (status);
816 public void DrawString (string s, Font font, Brush brush, RectangleF layoutRectangle, StringFormat format)
818 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject, ref layoutRectangle, format.NativeObject, brush.nativeObject);
819 GDIPlus.CheckStatus (status);
822 public void DrawString (string s, Font font, Brush brush, float x, float y)
824 RectangleF rc = new RectangleF (x, y, 0, 0);
826 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject,
827 ref rc, IntPtr.Zero, brush.nativeObject);
828 GDIPlus.CheckStatus (status);
831 public void DrawString (string s, Font font, Brush brush, float x, float y, StringFormat format)
833 RectangleF rc = new RectangleF (x, y, 0, 0);
835 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject,
836 ref rc, format.NativeObject, brush.nativeObject);
837 GDIPlus.CheckStatus (status);
841 public void EndContainer (GraphicsContainer container)
843 Status status = GDIPlus.GdipEndContainer(nativeObject, container.NativeObject);
844 GDIPlus.CheckStatus (status);
848 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, EnumerateMetafileProc callback)
850 throw new NotImplementedException ();
854 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, EnumerateMetafileProc callback)
856 throw new NotImplementedException ();
860 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, EnumerateMetafileProc callback)
862 throw new NotImplementedException ();
866 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, EnumerateMetafileProc callback)
868 throw new NotImplementedException ();
872 public void EnumerateMetafile (Metafile metafile, Point destPoint, EnumerateMetafileProc callback)
874 throw new NotImplementedException ();
878 public void EnumerateMetafile (Metafile metafile, PointF destPoint, EnumerateMetafileProc callback)
880 throw new NotImplementedException ();
884 public void EnumerateMetafile (Metafile metafile, PointF destPoint, EnumerateMetafileProc callback, IntPtr callbackData)
886 throw new NotImplementedException ();
890 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, EnumerateMetafileProc callback, IntPtr callbackData)
892 throw new NotImplementedException ();
896 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData)
898 throw new NotImplementedException ();
902 public void EnumerateMetafile (Metafile metafile, Point destPoint, EnumerateMetafileProc callback, IntPtr callbackData)
904 throw new NotImplementedException ();
908 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData)
910 throw new NotImplementedException ();
914 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, EnumerateMetafileProc callback, IntPtr callbackData)
916 throw new NotImplementedException ();
920 public void EnumerateMetafile (Metafile metafile, PointF destPoint, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
922 throw new NotImplementedException ();
926 public void EnumerateMetafile (Metafile metafile, Point destPoint, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
928 throw new NotImplementedException ();
932 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
934 throw new NotImplementedException ();
938 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
940 throw new NotImplementedException ();
944 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
946 throw new NotImplementedException ();
950 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
952 throw new NotImplementedException ();
956 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
958 throw new NotImplementedException ();
962 public void EnumerateMetafile (Metafile metafile, Point destPoint, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
964 throw new NotImplementedException ();
968 public void EnumerateMetafile (Metafile metafile, PointF destPoint, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
970 throw new NotImplementedException ();
974 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
976 throw new NotImplementedException ();
980 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
982 throw new NotImplementedException ();
986 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
988 throw new NotImplementedException ();
992 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
994 throw new NotImplementedException ();
998 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
1000 throw new NotImplementedException ();
1004 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
1006 throw new NotImplementedException ();
1010 public void EnumerateMetafile (Metafile metafile, PointF destPoint, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
1012 throw new NotImplementedException ();
1016 public void EnumerateMetafile (Metafile metafile, Point destPoint, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
1018 throw new NotImplementedException ();
1022 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
1024 throw new NotImplementedException ();
1028 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, Rectangle srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1030 throw new NotImplementedException ();
1034 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, Rectangle srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1036 throw new NotImplementedException ();
1040 public void EnumerateMetafile (Metafile metafile, Point destPoint, Rectangle srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1042 throw new NotImplementedException ();
1046 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, RectangleF srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1048 throw new NotImplementedException ();
1052 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, RectangleF srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1054 throw new NotImplementedException ();
1058 public void EnumerateMetafile (Metafile metafile, PointF destPoint, RectangleF srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1060 throw new NotImplementedException ();
1063 public void ExcludeClip (Rectangle rect)
1065 Status status = GDIPlus.GdipSetClipRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, CombineMode.Exclude);
1066 GDIPlus.CheckStatus (status);
1069 public void ExcludeClip (Region region)
1071 Status status = GDIPlus.GdipSetClipRegion (nativeObject, region.NativeObject, CombineMode.Exclude);
1072 GDIPlus.CheckStatus (status);
1076 public void FillClosedCurve (Brush brush, PointF [] points)
1078 Status status = GDIPlus.GdipFillClosedCurve (nativeObject, brush.NativeObject, points, points.Length);
1079 GDIPlus.CheckStatus (status);
1083 public void FillClosedCurve (Brush brush, Point [] points)
1085 Status status = GDIPlus.GdipFillClosedCurveI (nativeObject, brush.NativeObject, points, points.Length);
1086 GDIPlus.CheckStatus (status);
1090 public void FillClosedCurve (Brush brush, PointF [] points, FillMode fillmode)
1092 FillClosedCurve (brush, points, fillmode, 0.5f);
1095 public void FillClosedCurve (Brush brush, Point [] points, FillMode fillmode)
1097 FillClosedCurve (brush, points, fillmode, 0.5f);
1100 public void FillClosedCurve (Brush brush, PointF [] points, FillMode fillmode, float tension)
1102 Status status = GDIPlus.GdipFillClosedCurve2 (nativeObject, brush.NativeObject, points, points.Length, tension, fillmode);
1103 GDIPlus.CheckStatus (status);
1106 public void FillClosedCurve (Brush brush, Point [] points, FillMode fillmode, float tension)
1108 Status status = GDIPlus.GdipFillClosedCurve2I (nativeObject, brush.NativeObject, points, points.Length, tension, fillmode);
1109 GDIPlus.CheckStatus (status);
1112 public void FillEllipse (Brush brush, Rectangle rect)
1114 FillEllipse (brush, rect.X, rect.Y, rect.Width, rect.Height);
1117 public void FillEllipse (Brush brush, RectangleF rect)
1119 FillEllipse (brush, rect.X, rect.Y, rect.Width, rect.Height);
1122 public void FillEllipse (Brush brush, float x, float y, float width, float height)
1124 Status status = GDIPlus.GdipFillEllipse (nativeObject, brush.nativeObject, x, y, width, height);
1125 GDIPlus.CheckStatus (status);
1128 public void FillEllipse (Brush brush, int x, int y, int width, int height)
1130 Status status = GDIPlus.GdipFillEllipseI (nativeObject, brush.nativeObject, x, y, width, height);
1131 GDIPlus.CheckStatus (status);
1134 public void FillPath (Brush brush, GraphicsPath path)
1136 Status status = GDIPlus.GdipFillPath (nativeObject, brush.NativeObject, path.NativeObject);
1137 GDIPlus.CheckStatus (status);
1140 public void FillPie (Brush brush, Rectangle rect, float startAngle, float sweepAngle)
1142 Status status = GDIPlus.GdipFillPie (nativeObject, brush.NativeObject, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
1143 GDIPlus.CheckStatus (status);
1146 public void FillPie (Brush brush, int x, int y, int width, int height, int startAngle, int sweepAngle)
1148 Status status = GDIPlus.GdipFillPieI (nativeObject, brush.NativeObject, x, y, width, height, startAngle, sweepAngle);
1149 GDIPlus.CheckStatus (status);
1152 public void FillPie (Brush brush, float x, float y, float width, float height, float startAngle, float sweepAngle)
1154 Status status = GDIPlus.GdipFillPie (nativeObject, brush.NativeObject, x, y, width, height, startAngle, sweepAngle);
1155 GDIPlus.CheckStatus (status);
1158 public void FillPolygon (Brush brush, PointF [] points)
1160 Status status = GDIPlus.GdipFillPolygon2 (nativeObject, brush.nativeObject, points, points.Length);
1161 GDIPlus.CheckStatus (status);
1164 public void FillPolygon (Brush brush, Point [] points)
1166 Status status = GDIPlus.GdipFillPolygon2I (nativeObject, brush.nativeObject, points, points.Length);
1167 GDIPlus.CheckStatus (status);
1170 public void FillPolygon (Brush brush, Point [] points, FillMode fillMode)
1172 Status status = GDIPlus.GdipFillPolygonI (nativeObject, brush.nativeObject, points, points.Length, fillMode);
1173 GDIPlus.CheckStatus (status);
1176 public void FillPolygon (Brush brush, PointF [] points, FillMode fillMode)
1178 Status status = GDIPlus.GdipFillPolygon (nativeObject, brush.nativeObject, points, points.Length, fillMode);
1179 GDIPlus.CheckStatus (status);
1182 public void FillRectangle (Brush brush, RectangleF rect)
1184 FillRectangle (brush, rect.Left, rect.Top, rect.Width, rect.Height);
1187 public void FillRectangle (Brush brush, Rectangle rect)
1189 FillRectangle (brush, rect.Left, rect.Top, rect.Width, rect.Height);
1192 public void FillRectangle (Brush brush, int x, int y, int width, int height)
1194 Status status = GDIPlus.GdipFillRectangleI (nativeObject, brush.nativeObject, x, y, width, height);
1195 GDIPlus.CheckStatus (status);
1198 public void FillRectangle (Brush brush, float x, float y, float width, float height)
1200 Status status = GDIPlus.GdipFillRectangle (nativeObject, brush.nativeObject, x, y, width, height);
1201 GDIPlus.CheckStatus (status);
1204 public void FillRectangles (Brush brush, Rectangle [] rects)
1206 Status status = GDIPlus.GdipFillRectanglesI (nativeObject, brush.nativeObject, rects, rects.Length);
1207 GDIPlus.CheckStatus (status);
1210 public void FillRectangles (Brush brush, RectangleF [] rects)
1212 Status status = GDIPlus.GdipFillRectangles (nativeObject, brush.nativeObject, rects, rects.Length);
1213 GDIPlus.CheckStatus (status);
1217 public void FillRegion (Brush brush, Region region)
1219 Status status = GDIPlus.GdipFillRegion (nativeObject, brush.NativeObject, region.NativeObject);
1220 GDIPlus.CheckStatus(status);
1224 public void Flush ()
1226 Flush (FlushIntention.Flush);
1230 public void Flush (FlushIntention intention)
1232 Status status = GDIPlus.GdipFlush (nativeObject, intention);
1233 GDIPlus.CheckStatus (status);
1236 [EditorBrowsable (EditorBrowsableState.Advanced)]
1237 public static Graphics FromHdc (IntPtr hdc)
1240 Status status = GDIPlus.GdipCreateFromHDC (hdc, out graphics);
1241 GDIPlus.CheckStatus (status);
1242 return new Graphics (graphics);
1246 [EditorBrowsable (EditorBrowsableState.Advanced)]
1247 public static Graphics FromHdc (IntPtr hdc, IntPtr hdevice)
1249 throw new NotImplementedException ();
1252 [EditorBrowsable (EditorBrowsableState.Advanced)]
1253 public static Graphics FromHdcInternal (IntPtr hdc)
1259 [EditorBrowsable (EditorBrowsableState.Advanced)]
1260 public static Graphics FromHwnd (IntPtr hwnd)
1264 if (use_x_drawable) {
1265 if (display==IntPtr.Zero) {
1266 display = GDIPlus.XOpenDisplay (IntPtr.Zero);
1269 return FromXDrawable (hwnd, display);
1272 Status status = GDIPlus.GdipCreateFromHWND (hwnd, out graphics);
1273 GDIPlus.CheckStatus (status);
1275 return new Graphics (graphics);
1279 [EditorBrowsable (EditorBrowsableState.Advanced)]
1280 public static Graphics FromHwndInternal (IntPtr hwnd)
1282 throw new NotImplementedException ();
1285 public static Graphics FromImage (Image image)
1287 lock (typeof (Graphics))
1289 if (image == null) throw new ArgumentException ();
1291 Status status = GDIPlus.GdipGetImageGraphicsContext (image.nativeObject, out graphics);
1292 GDIPlus.CheckStatus (status);
1293 Graphics result = new Graphics ((IntPtr) graphics);
1295 if (Environment.OSVersion.Platform == (PlatformID) 128) {
1296 Rectangle rect = new Rectangle (0,0, image.Width, image.Height);
1297 GDIPlus.GdipSetVisibleClip_linux (result.NativeObject, ref rect);
1304 internal static Graphics FromXDrawable (IntPtr drawable, IntPtr display)
1306 lock (typeof (Graphics))
1309 Status s = GDIPlus.GdipCreateFromXDrawable_linux (drawable, display, out graphics);
1310 GDIPlus.CheckStatus (s);
1311 return new Graphics (graphics);
1316 public static IntPtr GetHalftonePalette ()
1318 throw new NotImplementedException ();
1322 [EditorBrowsable (EditorBrowsableState.Advanced)]
1323 public IntPtr GetHdc ()
1326 Status status = GDIPlus.GdipGetDC (nativeObject, out hdc);
1327 GDIPlus.CheckStatus (status);
1329 return (IntPtr) hdc;
1333 public Color GetNearestColor (Color color)
1337 Status status = GDIPlus.GdipGetNearestColor (nativeObject, out argb);
1338 GDIPlus.CheckStatus (status);
1340 return Color.FromArgb (argb);
1344 public void IntersectClip (Region region)
1346 Status status = GDIPlus.GdipSetClipRegion (nativeObject, region.NativeObject, CombineMode.Intersect);
1347 GDIPlus.CheckStatus (status);
1350 public void IntersectClip (RectangleF rect)
1352 Status status = GDIPlus.GdipSetClipRect (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, CombineMode.Intersect);
1353 GDIPlus.CheckStatus (status);
1356 public void IntersectClip (Rectangle rect)
1358 Status status = GDIPlus.GdipSetClipRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, CombineMode.Intersect);
1359 GDIPlus.CheckStatus (status);
1362 public bool IsVisible (Point point)
1364 bool isVisible = false;
1366 Status status = GDIPlus.GdipIsVisiblePointI (nativeObject, point.X, point.Y, out isVisible);
1367 GDIPlus.CheckStatus (status);
1373 public bool IsVisible (RectangleF rect)
1375 bool isVisible = false;
1377 Status status = GDIPlus.GdipIsVisibleRect (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, out isVisible);
1378 GDIPlus.CheckStatus (status);
1383 public bool IsVisible (PointF point)
1385 bool isVisible = false;
1387 Status status = GDIPlus.GdipIsVisiblePoint (nativeObject, point.X, point.Y, out isVisible);
1388 GDIPlus.CheckStatus (status);
1393 public bool IsVisible (Rectangle rect)
1395 bool isVisible = false;
1397 Status status = GDIPlus.GdipIsVisibleRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, out isVisible);
1398 GDIPlus.CheckStatus (status);
1403 public bool IsVisible (float x, float y)
1405 return IsVisible (new PointF (x, y));
1408 public bool IsVisible (int x, int y)
1410 return IsVisible (new Point (x, y));
1413 public bool IsVisible (float x, float y, float width, float height)
1415 return IsVisible (new RectangleF (x, y, width, height));
1419 public bool IsVisible (int x, int y, int width, int height)
1421 return IsVisible (new Rectangle (x, y, width, height));
1425 public Region [] MeasureCharacterRanges (string text, Font font, RectangleF layoutRect, StringFormat stringFormat)
1428 int regcount = stringFormat.GetMeasurableCharacterRangeCount ();
1429 IntPtr[] native_regions = new IntPtr [regcount];
1430 Region[] regions = new Region [regcount];
1432 for (int i = 0; i < regcount; i++) {
1433 regions[i] = new Region ();
1434 native_regions[i] = regions[i].NativeObject;
1437 status = GDIPlus.GdipMeasureCharacterRanges (nativeObject, text, text.Length,
1438 font.NativeObject, ref layoutRect, stringFormat.NativeObject,
1439 regcount, out native_regions[0]);
1441 GDIPlus.CheckStatus (status);
1447 public SizeF MeasureString (string text, Font font)
1449 return MeasureString (text, font, new Size(0,0));
1453 public SizeF MeasureString (string text, Font font, SizeF layoutArea)
1455 int charactersFitted, linesFilled;
1456 RectangleF boundingBox = new RectangleF ();
1457 RectangleF rect = new RectangleF (0,0,layoutArea.Width, layoutArea.Height);
1459 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1460 font.NativeObject, ref rect, IntPtr.Zero, out boundingBox,
1461 out charactersFitted, out linesFilled);
1462 GDIPlus.CheckStatus (status);
1464 return new SizeF(boundingBox.Width, boundingBox.Height);
1468 public SizeF MeasureString (string text, Font font, int width)
1470 RectangleF boundingBox = new RectangleF ();
1471 RectangleF rect = new RectangleF (0, 0, width, 999999);
1472 int charactersFitted, linesFilled;
1474 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1475 font.NativeObject, ref rect, IntPtr.Zero,
1476 out boundingBox, out charactersFitted, out linesFilled);
1477 GDIPlus.CheckStatus (status);
1479 return new SizeF (boundingBox.Width, boundingBox.Height);
1483 public SizeF MeasureString (string text, Font font, SizeF layoutArea, StringFormat stringFormat)
1485 int charactersFitted, linesFilled;
1486 return MeasureString (text, font, layoutArea, stringFormat, out charactersFitted, out linesFilled);
1490 public SizeF MeasureString (string text, Font font, int width, StringFormat format)
1492 int charactersFitted, linesFilled;
1493 return MeasureString (text, font, new SizeF (width, 999999),
1494 format, out charactersFitted, out linesFilled);
1498 public SizeF MeasureString (string text, Font font, PointF origin, StringFormat stringFormat)
1500 RectangleF boundingBox = new RectangleF ();
1501 RectangleF rect = new RectangleF (origin.X, origin.Y, 0,0);
1502 int charactersFitted, linesFilled;
1504 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1505 font.NativeObject, ref rect, stringFormat.NativeObject,
1506 out boundingBox, out charactersFitted, out linesFilled);
1507 GDIPlus.CheckStatus (status);
1509 return new SizeF (boundingBox.Width, boundingBox.Height);
1513 public SizeF MeasureString (string text, Font font, SizeF layoutArea, StringFormat stringFormat, out int charactersFitted, out int linesFilled)
1515 RectangleF boundingBox = new RectangleF ();
1516 RectangleF rect = new RectangleF (0,0,layoutArea.Width, layoutArea.Height);
1517 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1518 font.NativeObject, ref rect, stringFormat.NativeObject,
1519 out boundingBox, out charactersFitted, out linesFilled);
1520 GDIPlus.CheckStatus (status);
1522 return new SizeF (boundingBox.Width, boundingBox.Height);
1525 public void MultiplyTransform (Matrix matrix)
1527 MultiplyTransform (matrix, MatrixOrder.Prepend);
1530 public void MultiplyTransform (Matrix matrix, MatrixOrder order)
1532 Status status = GDIPlus.GdipMultiplyWorldTransform (nativeObject, matrix.nativeMatrix, order);
1533 GDIPlus.CheckStatus (status);
1536 [EditorBrowsable (EditorBrowsableState.Advanced)]
1537 public void ReleaseHdc (IntPtr hdc)
1539 Status status = GDIPlus.GdipReleaseDC (nativeObject, hdc);
1540 GDIPlus.CheckStatus (status);
1544 [EditorBrowsable (EditorBrowsableState.Advanced)]
1545 public void ReleaseHdcInternal (IntPtr hdc)
1547 throw new NotImplementedException ();
1551 public void ResetClip ()
1553 Status status = GDIPlus.GdipResetClip (nativeObject);
1554 GDIPlus.CheckStatus (status);
1557 public void ResetTransform ()
1559 Status status = GDIPlus.GdipResetWorldTransform (nativeObject);
1560 GDIPlus.CheckStatus (status);
1563 public void Restore (GraphicsState gstate)
1565 Transform = gstate.matrix.Clone ();
1566 Status status = GDIPlus.GdipRestoreGraphics (nativeObject, gstate.nativeState);
1567 GDIPlus.CheckStatus (status);
1571 public void RotateTransform (float angle)
1573 RotateTransform (angle, MatrixOrder.Prepend);
1576 public void RotateTransform (float angle, MatrixOrder order)
1579 Status status = GDIPlus.GdipRotateWorldTransform (nativeObject, angle, order);
1580 GDIPlus.CheckStatus (status);
1583 public GraphicsState Save ()
1585 GraphicsState state = new GraphicsState ();
1586 state.matrix = Transform.Clone ();
1588 Status status = GDIPlus.GdipSaveGraphics (nativeObject, out saveState);
1589 GDIPlus.CheckStatus (status);
1591 state.nativeState = saveState;
1595 public void ScaleTransform (float sx, float sy)
1597 ScaleTransform (sx, sy, MatrixOrder.Prepend);
1600 public void ScaleTransform (float sx, float sy, MatrixOrder order)
1602 Status status = GDIPlus.GdipScaleWorldTransform (nativeObject, sx, sy, order);
1603 GDIPlus.CheckStatus (status);
1607 public void SetClip (RectangleF rect)
1609 SetClip (rect, CombineMode.Replace);
1613 public void SetClip (GraphicsPath path)
1615 SetClip (path, CombineMode.Replace);
1619 public void SetClip (Rectangle rect)
1621 SetClip (rect, CombineMode.Replace);
1625 public void SetClip (Graphics g)
1627 SetClip (g, CombineMode.Replace);
1631 public void SetClip (Graphics g, CombineMode combineMode)
1633 Status status = GDIPlus.GdipSetClipGraphics (nativeObject, g.NativeObject, combineMode);
1634 GDIPlus.CheckStatus (status);
1638 public void SetClip (Rectangle rect, CombineMode combineMode)
1640 Status status = GDIPlus.GdipSetClipRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, combineMode);
1641 GDIPlus.CheckStatus (status);
1645 public void SetClip (RectangleF rect, CombineMode combineMode)
1647 Status status = GDIPlus.GdipSetClipRect (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, combineMode);
1648 GDIPlus.CheckStatus (status);
1652 public void SetClip (Region region, CombineMode combineMode)
1654 Status status = GDIPlus.GdipSetClipRegion(nativeObject, region.NativeObject, combineMode);
1655 GDIPlus.CheckStatus (status);
1659 public void SetClip (GraphicsPath path, CombineMode combineMode)
1661 Status status = GDIPlus.GdipSetClipPath (nativeObject, path.NativeObject, combineMode);
1662 GDIPlus.CheckStatus (status);
1666 public void TransformPoints (CoordinateSpace destSpace, CoordinateSpace srcSpace, PointF [] pts)
1668 IntPtr ptrPt = GDIPlus.FromPointToUnManagedMemory (pts);
1670 Status status = GDIPlus.GdipTransformPoints (nativeObject, destSpace, srcSpace, ptrPt, pts.Length);
1671 GDIPlus.CheckStatus (status);
1673 GDIPlus.FromUnManagedMemoryToPoint (ptrPt, pts);
1677 public void TransformPoints (CoordinateSpace destSpace, CoordinateSpace srcSpace, Point [] pts)
1679 IntPtr ptrPt = GDIPlus.FromPointToUnManagedMemoryI (pts);
1681 Status status = GDIPlus.GdipTransformPointsI (nativeObject, destSpace, srcSpace, ptrPt, pts.Length);
1682 GDIPlus.CheckStatus (status);
1684 GDIPlus.FromUnManagedMemoryToPointI (ptrPt, pts);
1688 public void TranslateClip (int dx, int dy)
1690 Status status = GDIPlus.GdipTranslateClipI (nativeObject, dx, dy);
1691 GDIPlus.CheckStatus (status);
1695 public void TranslateClip (float dx, float dy)
1697 Status status = GDIPlus.GdipTranslateClip (nativeObject, dx, dy);
1698 GDIPlus.CheckStatus (status);
1701 public void TranslateTransform (float dx, float dy)
1703 TranslateTransform (dx, dy, MatrixOrder.Prepend);
1707 public void TranslateTransform (float dx, float dy, MatrixOrder order)
1709 Status status = GDIPlus.GdipTranslateWorldTransform (nativeObject, dx, dy, order);
1710 GDIPlus.CheckStatus (status);
1713 public Region Clip {
1715 Region reg = new Region();
1716 Status status = GDIPlus.GdipGetClip (nativeObject, reg.NativeObject);
1717 GDIPlus.CheckStatus (status);
1721 SetClip (value, CombineMode.Replace);
1725 public RectangleF ClipBounds {
1727 RectangleF rect = new RectangleF ();
1728 Status status = GDIPlus.GdipGetClipBounds (nativeObject, out rect);
1729 GDIPlus.CheckStatus (status);
1734 public CompositingMode CompositingMode {
1736 CompositingMode mode;
1737 Status status = GDIPlus.GdipGetCompositingMode (nativeObject, out mode);
1738 GDIPlus.CheckStatus (status);
1743 Status status = GDIPlus.GdipSetCompositingMode (nativeObject, value);
1744 GDIPlus.CheckStatus (status);
1749 public CompositingQuality CompositingQuality {
1751 CompositingQuality quality;
1753 Status status = GDIPlus.GdipGetCompositingQuality (nativeObject, out quality);
1754 GDIPlus.CheckStatus (status);
1758 Status status = GDIPlus.GdipSetCompositingQuality (nativeObject, value);
1759 GDIPlus.CheckStatus (status);
1767 Status status = GDIPlus.GdipGetDpiX (nativeObject, out x);
1768 GDIPlus.CheckStatus (status);
1777 Status status = GDIPlus.GdipGetDpiY (nativeObject, out y);
1778 GDIPlus.CheckStatus (status);
1783 public InterpolationMode InterpolationMode {
1785 InterpolationMode imode = InterpolationMode.Invalid;
1786 Status status = GDIPlus.GdipGetInterpolationMode (nativeObject, out imode);
1787 GDIPlus.CheckStatus (status);
1791 Status status = GDIPlus.GdipSetInterpolationMode (nativeObject, value);
1792 GDIPlus.CheckStatus (status);
1796 public bool IsClipEmpty {
1798 bool isEmpty = false;
1800 Status status = GDIPlus.GdipIsClipEmpty (nativeObject, out isEmpty);
1801 GDIPlus.CheckStatus (status);
1806 public bool IsVisibleClipEmpty {
1808 bool isEmpty = false;
1810 Status status = GDIPlus.GdipIsVisibleClipEmpty (nativeObject, out isEmpty);
1811 GDIPlus.CheckStatus (status);
1816 public float PageScale {
1820 Status status = GDIPlus.GdipGetPageScale (nativeObject, out scale);
1821 GDIPlus.CheckStatus (status);
1825 Status status = GDIPlus.GdipSetPageScale (nativeObject, value);
1826 GDIPlus.CheckStatus (status);
1830 public GraphicsUnit PageUnit {
1834 Status status = GDIPlus.GdipGetPageUnit (nativeObject, out unit);
1835 GDIPlus.CheckStatus (status);
1839 Status status = GDIPlus.GdipSetPageUnit (nativeObject, value);
1840 GDIPlus.CheckStatus (status);
1844 public PixelOffsetMode PixelOffsetMode {
1846 PixelOffsetMode pixelOffset = PixelOffsetMode.Invalid;
1848 Status status = GDIPlus.GdipGetPixelOffsetMode (nativeObject, out pixelOffset);
1849 GDIPlus.CheckStatus (status);
1853 Status status = GDIPlus.GdipSetPixelOffsetMode (nativeObject, value);
1854 GDIPlus.CheckStatus (status);
1858 public Point RenderingOrigin {
1861 Status status = GDIPlus.GdipGetRenderingOrigin (nativeObject, out x, out y);
1862 GDIPlus.CheckStatus (status);
1863 return new Point (x, y);
1867 Status status = GDIPlus.GdipSetRenderingOrigin (nativeObject, value.X, value.Y);
1868 GDIPlus.CheckStatus (status);
1872 public SmoothingMode SmoothingMode {
1874 SmoothingMode mode = SmoothingMode.Invalid;
1876 Status status = GDIPlus.GdipGetSmoothingMode (nativeObject, out mode);
1877 GDIPlus.CheckStatus (status);
1882 Status status = GDIPlus.GdipSetSmoothingMode (nativeObject, value);
1883 GDIPlus.CheckStatus (status);
1887 public int TextContrast {
1891 Status status = GDIPlus.GdipGetTextContrast (nativeObject, out contrast);
1892 GDIPlus.CheckStatus (status);
1897 Status status = GDIPlus.GdipSetTextContrast (nativeObject, value);
1898 GDIPlus.CheckStatus (status);
1902 public TextRenderingHint TextRenderingHint {
1904 TextRenderingHint hint;
1906 Status status = GDIPlus.GdipGetTextRenderingHint (nativeObject, out hint);
1907 GDIPlus.CheckStatus (status);
1912 Status status = GDIPlus.GdipSetTextRenderingHint (nativeObject, value);
1913 GDIPlus.CheckStatus (status);
1917 public Matrix Transform {
1919 Matrix matrix = new Matrix ();
1920 Status status = GDIPlus.GdipGetWorldTransform (nativeObject, matrix.nativeMatrix);
1921 GDIPlus.CheckStatus (status);
1925 Status status = GDIPlus.GdipSetWorldTransform (nativeObject, value.nativeMatrix);
1926 GDIPlus.CheckStatus (status);
1930 public RectangleF VisibleClipBounds {
1934 Status status = GDIPlus.GdipGetVisibleClipBounds (nativeObject, out rect);
1935 GDIPlus.CheckStatus (status);