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;
51 // We use X Drawable on Linux.
52 private static bool use_x_drawable = (Environment.OSVersion.Platform == (PlatformID) 128);
55 public delegate bool EnumerateMetafileProc (EmfPlusRecordType recordType,
59 PlayRecordCallback callbackData);
62 public delegate bool DrawImageAbort (IntPtr callbackData);
64 private Graphics (IntPtr nativeGraphics)
66 nativeObject = nativeGraphics;
74 static internal float systemDpiX {
77 Bitmap bmp = new Bitmap (1, 1);
78 Graphics g = Graphics.FromImage (bmp);
85 static internal float systemDpiY {
88 Bitmap bmp = new Bitmap (1, 1);
89 Graphics g = Graphics.FromImage (bmp);
96 internal IntPtr NativeObject {
102 nativeObject = value;
107 public void AddMetafileComment (byte [] data)
109 throw new NotImplementedException ();
113 public GraphicsContainer BeginContainer ()
117 status = GDIPlus.GdipBeginContainer2 (nativeObject, out state);
118 GDIPlus.CheckStatus (status);
120 return new GraphicsContainer(state);
123 public GraphicsContainer BeginContainer (Rectangle dstrect, Rectangle srcrect, GraphicsUnit unit)
127 status = GDIPlus.GdipBeginContainerI (nativeObject, dstrect, srcrect, unit, out state);
128 GDIPlus.CheckStatus (status);
130 return new GraphicsContainer (state);
134 public GraphicsContainer BeginContainer (RectangleF dstrect, RectangleF srcrect, GraphicsUnit unit)
138 status = GDIPlus.GdipBeginContainer (nativeObject, dstrect, srcrect, unit, out state);
139 GDIPlus.CheckStatus (status);
141 return new GraphicsContainer (state);
145 public void Clear (Color color)
148 status = GDIPlus.GdipGraphicsClear (nativeObject, color.ToArgb ());
149 GDIPlus.CheckStatus (status);
152 public void Dispose ()
156 status = GDIPlus.GdipDeleteGraphics (nativeObject);
157 GDIPlus.CheckStatus (status);
163 public void DrawArc (Pen pen, Rectangle rect, float startAngle, float sweepAngle)
165 DrawArc (pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
169 public void DrawArc (Pen pen, RectangleF rect, float startAngle, float sweepAngle)
171 DrawArc (pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
175 public void DrawArc (Pen pen, float x, float y, float width, float height, float startAngle, float sweepAngle)
178 status = GDIPlus.GdipDrawArc (nativeObject, pen.nativeObject,
179 x, y, width, height, startAngle, sweepAngle);
180 GDIPlus.CheckStatus (status);
183 // Microsoft documentation states that the signature for this member should be
184 // public void DrawArc( Pen pen, int x, int y, int width, int height, int startAngle,
185 // int sweepAngle. However, GdipDrawArcI uses also float for the startAngle and sweepAngle params
186 public void DrawArc (Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle)
189 status = GDIPlus.GdipDrawArcI (nativeObject, pen.nativeObject,
190 x, y, width, height, startAngle, sweepAngle);
191 GDIPlus.CheckStatus (status);
194 public void DrawBezier (Pen pen, PointF pt1, PointF pt2, PointF pt3, PointF pt4)
197 status = GDIPlus.GdipDrawBezier (nativeObject, pen.nativeObject,
198 pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X,
199 pt3.Y, pt4.X, pt4.Y);
200 GDIPlus.CheckStatus (status);
203 public void DrawBezier (Pen pen, Point pt1, Point pt2, Point pt3, Point pt4)
206 status = GDIPlus.GdipDrawBezierI (nativeObject, pen.nativeObject,
207 pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X,
208 pt3.Y, pt4.X, pt4.Y);
209 GDIPlus.CheckStatus (status);
212 public void DrawBezier (Pen pen, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4)
215 status = GDIPlus.GdipDrawBezier (nativeObject, pen.nativeObject, x1,
216 y1, x2, y2, x3, y3, x4, y4);
217 GDIPlus.CheckStatus (status);
220 public void DrawBeziers (Pen pen, Point [] points)
222 int length = points.Length;
228 for (int i = 0; i < length; i += 3) {
229 Point p1 = points [i];
230 Point p2 = points [i + 1];
231 Point p3 = points [i + 2];
232 Point p4 = points [i + 3];
234 status = GDIPlus.GdipDrawBezier (nativeObject,
236 p1.X, p1.Y, p2.X, p2.Y,
237 p3.X, p3.Y, p4.X, p4.Y);
238 GDIPlus.CheckStatus (status);
242 public void DrawBeziers (Pen pen, PointF [] points)
244 int length = points.Length;
250 for (int i = 0; i < length; i += 3) {
251 PointF p1 = points [i];
252 PointF p2 = points [i + 1];
253 PointF p3 = points [i + 2];
254 PointF p4 = points [i + 3];
256 status = GDIPlus.GdipDrawBezier (nativeObject,
258 p1.X, p1.Y, p2.X, p2.Y,
259 p3.X, p3.Y, p4.X, p4.Y);
260 GDIPlus.CheckStatus (status);
265 public void DrawClosedCurve (Pen pen, PointF [] points)
268 status = GDIPlus.GdipDrawClosedCurve (nativeObject, pen.nativeObject, points, points.Length);
269 GDIPlus.CheckStatus (status);
272 public void DrawClosedCurve (Pen pen, Point [] points)
275 status = GDIPlus.GdipDrawClosedCurveI (nativeObject, pen.nativeObject, points, points.Length);
276 GDIPlus.CheckStatus (status);
279 public void DrawClosedCurve (Pen pen, Point [] points, float tension, FillMode fillmode)
282 status = GDIPlus.GdipDrawClosedCurve2I (nativeObject, pen.nativeObject, points, points.Length, tension);
283 GDIPlus.CheckStatus (status);
286 public void DrawClosedCurve (Pen pen, PointF [] points, float tension, FillMode fillmode)
289 status = GDIPlus.GdipDrawClosedCurve2 (nativeObject, pen.nativeObject, points, points.Length, tension);
290 GDIPlus.CheckStatus (status);
293 public void DrawCurve (Pen pen, Point [] points)
296 status = GDIPlus.GdipDrawCurveI (nativeObject, pen.nativeObject, points, points.Length);
297 GDIPlus.CheckStatus (status);
300 public void DrawCurve (Pen pen, PointF [] points)
303 status = GDIPlus.GdipDrawCurve (nativeObject, pen.nativeObject, points, points.Length);
304 GDIPlus.CheckStatus (status);
307 public void DrawCurve (Pen pen, PointF [] points, float tension)
310 status = GDIPlus.GdipDrawCurve2 (nativeObject, pen.nativeObject, points, points.Length, tension);
311 GDIPlus.CheckStatus (status);
314 public void DrawCurve (Pen pen, Point [] points, float tension)
317 status = GDIPlus.GdipDrawCurve2I (nativeObject, pen.nativeObject, points, points.Length, tension);
318 GDIPlus.CheckStatus (status);
322 public void DrawCurve (Pen pen, PointF [] points, int offset, int numberOfSegments)
325 status = GDIPlus.GdipDrawCurve3 (nativeObject, pen.nativeObject,
326 points, points.Length, offset,
327 numberOfSegments, 0.5f);
328 GDIPlus.CheckStatus (status);
331 public void DrawCurve (Pen pen, Point [] points, int offset, int numberOfSegments, float tension)
334 status = GDIPlus.GdipDrawCurve3I (nativeObject, pen.nativeObject,
335 points, points.Length, offset,
336 numberOfSegments, tension);
337 GDIPlus.CheckStatus (status);
341 public void DrawCurve (Pen pen, PointF [] points, int offset, int numberOfSegments, float tension)
344 status = GDIPlus.GdipDrawCurve3 (nativeObject, pen.nativeObject,
345 points, points.Length, offset,
346 numberOfSegments, tension);
347 GDIPlus.CheckStatus (status);
350 public void DrawEllipse (Pen pen, Rectangle rect)
352 DrawEllipse (pen, rect.X, rect.Y, rect.Width, rect.Height);
355 public void DrawEllipse (Pen pen, RectangleF rect)
357 DrawEllipse (pen, rect.X, rect.Y, rect.Width, rect.Height);
360 public void DrawEllipse (Pen pen, int x, int y, int width, int height)
363 status = GDIPlus.GdipDrawEllipseI (nativeObject, pen.nativeObject, x, y, width, height);
364 GDIPlus.CheckStatus (status);
367 public void DrawEllipse (Pen pen, float x, float y, float width, float height)
369 Status status = GDIPlus.GdipDrawEllipse (nativeObject, pen.nativeObject, x, y, width, height);
370 GDIPlus.CheckStatus (status);
373 public void DrawIcon (Icon icon, Rectangle targetRect)
375 Image img = icon.ToBitmap ();
376 DrawImage (img, targetRect);
379 public void DrawIcon (Icon icon, int x, int y)
381 Image img = icon.ToBitmap ();
382 DrawImage (img, x, y);
385 public void DrawIconUnstretched (Icon icon, Rectangle targetRect)
387 Image img = icon.ToBitmap ();
388 DrawImageUnscaled (img, targetRect);
391 public void DrawImage (Image image, RectangleF rect)
393 Status status = GDIPlus.GdipDrawImageRect(nativeObject, image.NativeObject, rect.X, rect.Y, rect.Width, rect.Height);
394 GDIPlus.CheckStatus (status);
398 public void DrawImage (Image image, PointF point)
400 Status status = GDIPlus.GdipDrawImage (nativeObject, image.NativeObject, point.X, point.Y);
401 GDIPlus.CheckStatus (status);
405 public void DrawImage (Image image, Point [] destPoints)
407 Status status = GDIPlus.GdipDrawImagePointsI (nativeObject, image.NativeObject, destPoints, destPoints.Length);
408 GDIPlus.CheckStatus (status);
412 public void DrawImage (Image image, Point point)
414 DrawImage (image, point.X, point.Y);
418 public void DrawImage (Image image, Rectangle rect)
420 DrawImage (image, rect.X, rect.Y, rect.Width, rect.Height);
424 public void DrawImage (Image image, PointF [] destPoints)
426 Status status = GDIPlus.GdipDrawImagePoints (nativeObject, image.NativeObject, destPoints, destPoints.Length);
427 GDIPlus.CheckStatus (status);
431 public void DrawImage (Image image, int x, int y)
433 Status status = GDIPlus.GdipDrawImageI (nativeObject, image.NativeObject, x, y);
434 GDIPlus.CheckStatus (status);
438 public void DrawImage (Image image, float x, float y)
440 Status status = GDIPlus.GdipDrawImage (nativeObject, image.NativeObject, x, y);
441 GDIPlus.CheckStatus (status);
445 public void DrawImage (Image image, Rectangle destRect, Rectangle srcRect, GraphicsUnit srcUnit)
447 Status status = GDIPlus.GdipDrawImageRectRectI (nativeObject, image.NativeObject,
448 destRect.X, destRect.Y, destRect.Width, destRect.Height,
449 srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height,
450 srcUnit, IntPtr.Zero, null, IntPtr.Zero);
451 GDIPlus.CheckStatus (status);
454 public void DrawImage (Image image, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit)
456 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
457 destRect.X, destRect.Y, destRect.Width, destRect.Height,
458 srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height,
459 srcUnit, IntPtr.Zero, null, IntPtr.Zero);
460 GDIPlus.CheckStatus (status);
464 public void DrawImage (Image image, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit)
466 Status status = GDIPlus.GdipDrawImagePointsRectI (nativeObject, image.NativeObject,
467 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
468 srcRect.Width, srcRect.Height, srcUnit, IntPtr.Zero,
470 GDIPlus.CheckStatus (status);
474 public void DrawImage (Image image, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit)
477 Status status = GDIPlus.GdipDrawImagePointsRect (nativeObject, image.NativeObject,
478 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
479 srcRect.Width, srcRect.Height, srcUnit, IntPtr.Zero,
481 GDIPlus.CheckStatus (status);
485 public void DrawImage (Image image, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit,
486 ImageAttributes imageAttr)
488 Status status = GDIPlus.GdipDrawImagePointsRectI (nativeObject, image.NativeObject,
489 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
490 srcRect.Width, srcRect.Height, srcUnit,
491 imageAttr.NativeObject, null, IntPtr.Zero);
492 GDIPlus.CheckStatus (status);
495 public void DrawImage (Image image, float x, float y, float width, float height)
497 Status status = GDIPlus.GdipDrawImageRect(nativeObject, image.NativeObject, x, y,
499 GDIPlus.CheckStatus (status);
503 public void DrawImage (Image image, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit,
504 ImageAttributes imageAttr)
506 Status status = GDIPlus.GdipDrawImagePointsRect (nativeObject, image.NativeObject,
507 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
508 srcRect.Width, srcRect.Height, srcUnit,
509 imageAttr.NativeObject, null, IntPtr.Zero);
510 GDIPlus.CheckStatus (status);
514 public void DrawImage (Image image, int x, int y, Rectangle srcRect, GraphicsUnit srcUnit)
516 Status status = GDIPlus.GdipDrawImagePointRectI(nativeObject, image.NativeObject, x, y, srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit);
517 GDIPlus.CheckStatus (status);
520 public void DrawImage (Image image, int x, int y, int width, int height)
522 Status status = GDIPlus.GdipDrawImageRectI (nativeObject, image.nativeObject, x, y, width, height);
523 GDIPlus.CheckStatus (status);
526 public void DrawImage (Image image, float x, float y, RectangleF srcRect, GraphicsUnit srcUnit)
528 Status status = GDIPlus.GdipDrawImagePointRect (nativeObject, image.nativeObject, x, y, srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit);
529 GDIPlus.CheckStatus (status);
533 public void DrawImage (Image image, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)
535 Status status = GDIPlus.GdipDrawImagePointsRect (nativeObject, image.NativeObject,
536 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
537 srcRect.Width, srcRect.Height, srcUnit,
538 imageAttr.NativeObject, callback, IntPtr.Zero);
539 GDIPlus.CheckStatus (status);
543 public void DrawImage (Image image, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)
546 Status status = GDIPlus.GdipDrawImagePointsRectI (nativeObject, image.NativeObject,
547 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
548 srcRect.Width, srcRect.Height, srcUnit,
549 imageAttr.NativeObject, callback, IntPtr.Zero);
550 GDIPlus.CheckStatus (status);
554 public void DrawImage (Image image, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, int callbackData)
557 Status status = GDIPlus.GdipDrawImagePointsRectI (nativeObject, image.NativeObject,
558 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
559 srcRect.Width, srcRect.Height, srcUnit,
560 imageAttr.NativeObject, callback, (IntPtr) callbackData);
561 GDIPlus.CheckStatus (status);
565 public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit)
567 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
568 destRect.X, destRect.Y, destRect.Width, destRect.Height,
569 srcX, srcY, srcWidth, srcHeight, srcUnit, IntPtr.Zero,
571 GDIPlus.CheckStatus (status);
574 public void DrawImage (Image image, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, int callbackData)
576 Status status = GDIPlus.GdipDrawImagePointsRect (nativeObject, image.NativeObject,
577 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
578 srcRect.Width, srcRect.Height, srcUnit,
579 imageAttr.NativeObject, callback, (IntPtr) callbackData);
580 GDIPlus.CheckStatus (status);
584 public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit)
586 Status status = GDIPlus.GdipDrawImageRectRectI (nativeObject, image.NativeObject,
587 destRect.X, destRect.Y, destRect.Width, destRect.Height,
588 srcX, srcY, srcWidth, srcHeight, srcUnit, IntPtr.Zero,
590 GDIPlus.CheckStatus (status);
594 public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttrs)
596 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
597 destRect.X, destRect.Y, destRect.Width, destRect.Height,
598 srcX, srcY, srcWidth, srcHeight, srcUnit,
599 imageAttrs.NativeObject, null, IntPtr.Zero);
600 GDIPlus.CheckStatus (status);
603 public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr)
605 Status status = GDIPlus.GdipDrawImageRectRectI (nativeObject, image.NativeObject,
606 destRect.X, destRect.Y, destRect.Width,
607 destRect.Height, srcX, srcY, srcWidth, srcHeight,
608 srcUnit, imageAttr.NativeObject, null, IntPtr.Zero);
609 GDIPlus.CheckStatus (status);
612 public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)
614 Status status = GDIPlus.GdipDrawImageRectRectI (nativeObject, image.NativeObject,
615 destRect.X, destRect.Y, destRect.Width,
616 destRect.Height, srcX, srcY, srcWidth, srcHeight,
617 srcUnit, imageAttr.NativeObject, callback,
619 GDIPlus.CheckStatus (status);
622 public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)
624 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
625 destRect.X, destRect.Y, destRect.Width,
626 destRect.Height, srcX, srcY, srcWidth, srcHeight,
627 srcUnit, imageAttr.NativeObject,
628 callback, IntPtr.Zero);
629 GDIPlus.CheckStatus (status);
633 public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, IntPtr callbackData)
635 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
636 destRect.X, destRect.Y, destRect.Width, destRect.Height,
637 srcX, srcY, srcWidth, srcHeight, srcUnit,
638 imageAttr.NativeObject, callback, callbackData);
639 GDIPlus.CheckStatus (status);
643 public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, IntPtr callbackData)
645 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
646 destRect.X, destRect.Y, destRect.Width, destRect.Height,
647 srcX, srcY, srcWidth, srcHeight, srcUnit,
648 imageAttr.NativeObject, callback, callbackData);
649 GDIPlus.CheckStatus (status);
652 public void DrawImageUnscaled (Image image, Point point)
654 DrawImageUnscaled (image, point.X, point.Y);
657 public void DrawImageUnscaled (Image image, Rectangle rect)
659 DrawImageUnscaled (image, rect.X, rect.Y, rect.Width, rect.Height);
662 public void DrawImageUnscaled (Image image, int x, int y)
664 DrawImage (image, x, y, image.Width, image.Height);
667 public void DrawImageUnscaled (Image image, int x, int y, int width, int height)
669 Image tmpImg = new Bitmap (width, height);
670 Graphics g = FromImage (tmpImg);
671 g.DrawImage (image, 0, 0, image.Width, image.Height);
672 this.DrawImage (tmpImg, x, y, width, height);
677 public void DrawLine (Pen pen, PointF pt1, PointF pt2)
679 Status status = GDIPlus.GdipDrawLine (nativeObject, pen.nativeObject,
680 pt1.X, pt1.Y, pt2.X, pt2.Y);
681 GDIPlus.CheckStatus (status);
684 public void DrawLine (Pen pen, Point pt1, Point pt2)
686 Status status = GDIPlus.GdipDrawLineI (nativeObject, pen.nativeObject,
687 pt1.X, pt1.Y, pt2.X, pt2.Y);
688 GDIPlus.CheckStatus (status);
691 public void DrawLine (Pen pen, int x1, int y1, int x2, int y2)
693 Status status = GDIPlus.GdipDrawLineI (nativeObject, pen.nativeObject, x1, y1, x2, y2);
694 GDIPlus.CheckStatus (status);
697 public void DrawLine (Pen pen, float x1, float y1, float x2, float y2)
699 Status status = GDIPlus.GdipDrawLine (nativeObject, pen.nativeObject, x1, y1, x2, y2);
700 GDIPlus.CheckStatus (status);
703 public void DrawLines (Pen pen, PointF [] points)
705 Status status = GDIPlus.GdipDrawLines (nativeObject, pen.nativeObject, points, points.Length);
706 GDIPlus.CheckStatus (status);
709 public void DrawLines (Pen pen, Point [] points)
711 Status status = GDIPlus.GdipDrawLinesI (nativeObject, pen.nativeObject, points, points.Length);
712 GDIPlus.CheckStatus (status);
715 public void DrawPath (Pen pen, GraphicsPath path)
717 Status status = GDIPlus.GdipDrawPath (nativeObject, pen.nativeObject, path.nativePath);
718 GDIPlus.CheckStatus (status);
721 public void DrawPie (Pen pen, Rectangle rect, float startAngle, float sweepAngle)
723 DrawPie (pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
726 public void DrawPie (Pen pen, RectangleF rect, float startAngle, float sweepAngle)
728 DrawPie (pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
731 public void DrawPie (Pen pen, float x, float y, float width, float height, float startAngle, float sweepAngle)
733 Status status = GDIPlus.GdipDrawPie (nativeObject, pen.nativeObject, x, y, width, height, startAngle, sweepAngle);
734 GDIPlus.CheckStatus (status);
737 // Microsoft documentation states that the signature for this member should be
738 // public void DrawPie(Pen pen, int x, int y, int width, int height, int startAngle
739 // int sweepAngle. However, GdipDrawPieI uses also float for the startAngle and sweepAngle params
740 public void DrawPie (Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle)
742 Status status = GDIPlus.GdipDrawPieI (nativeObject, pen.nativeObject, x, y, width, height, startAngle, sweepAngle);
743 GDIPlus.CheckStatus (status);
746 public void DrawPolygon (Pen pen, Point [] points)
748 Status status = GDIPlus.GdipDrawPolygonI (nativeObject, pen.nativeObject, points, points.Length);
749 GDIPlus.CheckStatus (status);
752 public void DrawPolygon (Pen pen, PointF [] points)
754 Status status = GDIPlus.GdipDrawPolygon (nativeObject, pen.nativeObject, points, points.Length);
755 GDIPlus.CheckStatus (status);
758 internal void DrawRectangle (Pen pen, RectangleF rect)
760 DrawRectangle (pen, rect.Left, rect.Top, rect.Width, rect.Height);
763 public void DrawRectangle (Pen pen, Rectangle rect)
765 DrawRectangle (pen, rect.Left, rect.Top, rect.Width, rect.Height);
768 public void DrawRectangle (Pen pen, float x, float y, float width, float height)
770 Status status = GDIPlus.GdipDrawRectangle (nativeObject, pen.nativeObject, x, y, width, height);
771 GDIPlus.CheckStatus (status);
774 public void DrawRectangle (Pen pen, int x, int y, int width, int height)
776 Status status = GDIPlus.GdipDrawRectangleI (nativeObject, pen.nativeObject, x, y, width, height);
777 GDIPlus.CheckStatus (status);
780 public void DrawRectangles (Pen pen, RectangleF [] rects)
782 Status status = GDIPlus.GdipDrawRectangles (nativeObject, pen.nativeObject, rects, rects.Length);
783 GDIPlus.CheckStatus (status);
786 public void DrawRectangles (Pen pen, Rectangle [] rects)
788 Status status = GDIPlus.GdipDrawRectanglesI (nativeObject, pen.nativeObject, rects, rects.Length);
789 GDIPlus.CheckStatus (status);
792 public void DrawString (string s, Font font, Brush brush, RectangleF layoutRectangle)
794 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject, ref layoutRectangle, IntPtr.Zero, brush.nativeObject);
795 GDIPlus.CheckStatus (status);
798 public void DrawString (string s, Font font, Brush brush, PointF point)
800 RectangleF rc = new RectangleF (point.X, point.Y, 0, 0);
801 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject, ref rc, IntPtr.Zero, brush.nativeObject);
802 GDIPlus.CheckStatus (status);
805 public void DrawString (string s, Font font, Brush brush, PointF point, StringFormat format)
807 RectangleF rc = new RectangleF (point.X, point.Y, 0, 0);
808 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject, ref rc, format.NativeObject, brush.nativeObject);
809 GDIPlus.CheckStatus (status);
812 public void DrawString (string s, Font font, Brush brush, RectangleF layoutRectangle, StringFormat format)
814 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject, ref layoutRectangle, format.NativeObject, brush.nativeObject);
815 GDIPlus.CheckStatus (status);
818 public void DrawString (string s, Font font, Brush brush, float x, float y)
820 RectangleF rc = new RectangleF (x, y, 0, 0);
822 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject,
823 ref rc, IntPtr.Zero, brush.nativeObject);
824 GDIPlus.CheckStatus (status);
827 public void DrawString (string s, Font font, Brush brush, float x, float y, StringFormat format)
829 RectangleF rc = new RectangleF (x, y, 0, 0);
831 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject,
832 ref rc, format.NativeObject, brush.nativeObject);
833 GDIPlus.CheckStatus (status);
837 public void EndContainer (GraphicsContainer container)
839 Status status = GDIPlus.GdipEndContainer(nativeObject, container.NativeObject);
840 GDIPlus.CheckStatus (status);
844 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, EnumerateMetafileProc callback)
846 throw new NotImplementedException ();
850 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, EnumerateMetafileProc callback)
852 throw new NotImplementedException ();
856 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, EnumerateMetafileProc callback)
858 throw new NotImplementedException ();
862 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, EnumerateMetafileProc callback)
864 throw new NotImplementedException ();
868 public void EnumerateMetafile (Metafile metafile, Point destPoint, EnumerateMetafileProc callback)
870 throw new NotImplementedException ();
874 public void EnumerateMetafile (Metafile metafile, PointF destPoint, EnumerateMetafileProc callback)
876 throw new NotImplementedException ();
880 public void EnumerateMetafile (Metafile metafile, PointF destPoint, EnumerateMetafileProc callback, IntPtr callbackData)
882 throw new NotImplementedException ();
886 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, EnumerateMetafileProc callback, IntPtr callbackData)
888 throw new NotImplementedException ();
892 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData)
894 throw new NotImplementedException ();
898 public void EnumerateMetafile (Metafile metafile, Point destPoint, EnumerateMetafileProc callback, IntPtr callbackData)
900 throw new NotImplementedException ();
904 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData)
906 throw new NotImplementedException ();
910 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, EnumerateMetafileProc callback, IntPtr callbackData)
912 throw new NotImplementedException ();
916 public void EnumerateMetafile (Metafile metafile, PointF destPoint, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
918 throw new NotImplementedException ();
922 public void EnumerateMetafile (Metafile metafile, Point destPoint, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
924 throw new NotImplementedException ();
928 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
930 throw new NotImplementedException ();
934 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
936 throw new NotImplementedException ();
940 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
942 throw new NotImplementedException ();
946 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
948 throw new NotImplementedException ();
952 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
954 throw new NotImplementedException ();
958 public void EnumerateMetafile (Metafile metafile, Point destPoint, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
960 throw new NotImplementedException ();
964 public void EnumerateMetafile (Metafile metafile, PointF destPoint, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
966 throw new NotImplementedException ();
970 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
972 throw new NotImplementedException ();
976 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
978 throw new NotImplementedException ();
982 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
984 throw new NotImplementedException ();
988 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
990 throw new NotImplementedException ();
994 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
996 throw new NotImplementedException ();
1000 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
1002 throw new NotImplementedException ();
1006 public void EnumerateMetafile (Metafile metafile, PointF destPoint, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
1008 throw new NotImplementedException ();
1012 public void EnumerateMetafile (Metafile metafile, Point destPoint, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
1014 throw new NotImplementedException ();
1018 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
1020 throw new NotImplementedException ();
1024 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, Rectangle srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1026 throw new NotImplementedException ();
1030 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, Rectangle srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1032 throw new NotImplementedException ();
1036 public void EnumerateMetafile (Metafile metafile, Point destPoint, Rectangle srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1038 throw new NotImplementedException ();
1042 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, RectangleF srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1044 throw new NotImplementedException ();
1048 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, RectangleF srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1050 throw new NotImplementedException ();
1054 public void EnumerateMetafile (Metafile metafile, PointF destPoint, RectangleF srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1056 throw new NotImplementedException ();
1059 public void ExcludeClip (Rectangle rect)
1061 Status status = GDIPlus.GdipSetClipRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, CombineMode.Exclude);
1062 GDIPlus.CheckStatus (status);
1065 public void ExcludeClip (Region region)
1067 Status status = GDIPlus.GdipSetClipRegion (nativeObject, region.NativeObject, CombineMode.Exclude);
1068 GDIPlus.CheckStatus (status);
1072 public void FillClosedCurve (Brush brush, PointF [] points)
1074 Status status = GDIPlus.GdipFillClosedCurve (nativeObject, brush.NativeObject, points, points.Length);
1075 GDIPlus.CheckStatus (status);
1079 public void FillClosedCurve (Brush brush, Point [] points)
1081 Status status = GDIPlus.GdipFillClosedCurveI (nativeObject, brush.NativeObject, points, points.Length);
1082 GDIPlus.CheckStatus (status);
1086 public void FillClosedCurve (Brush brush, PointF [] points, FillMode fillmode)
1088 FillClosedCurve (brush, points, fillmode, 0.5f);
1091 public void FillClosedCurve (Brush brush, Point [] points, FillMode fillmode)
1093 FillClosedCurve (brush, points, fillmode, 0.5f);
1096 public void FillClosedCurve (Brush brush, PointF [] points, FillMode fillmode, float tension)
1098 Status status = GDIPlus.GdipFillClosedCurve2 (nativeObject, brush.NativeObject, points, points.Length, tension, fillmode);
1099 GDIPlus.CheckStatus (status);
1102 public void FillClosedCurve (Brush brush, Point [] points, FillMode fillmode, float tension)
1104 Status status = GDIPlus.GdipFillClosedCurve2I (nativeObject, brush.NativeObject, points, points.Length, tension, fillmode);
1105 GDIPlus.CheckStatus (status);
1108 public void FillEllipse (Brush brush, Rectangle rect)
1110 FillEllipse (brush, rect.X, rect.Y, rect.Width, rect.Height);
1113 public void FillEllipse (Brush brush, RectangleF rect)
1115 FillEllipse (brush, rect.X, rect.Y, rect.Width, rect.Height);
1118 public void FillEllipse (Brush brush, float x, float y, float width, float height)
1120 Status status = GDIPlus.GdipFillEllipse (nativeObject, brush.nativeObject, x, y, width, height);
1121 GDIPlus.CheckStatus (status);
1124 public void FillEllipse (Brush brush, int x, int y, int width, int height)
1126 Status status = GDIPlus.GdipFillEllipseI (nativeObject, brush.nativeObject, x, y, width, height);
1127 GDIPlus.CheckStatus (status);
1130 public void FillPath (Brush brush, GraphicsPath path)
1132 Status status = GDIPlus.GdipFillPath (nativeObject, brush.NativeObject, path.NativeObject);
1133 GDIPlus.CheckStatus (status);
1136 public void FillPie (Brush brush, Rectangle rect, float startAngle, float sweepAngle)
1138 Status status = GDIPlus.GdipFillPie (nativeObject, brush.NativeObject, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
1139 GDIPlus.CheckStatus (status);
1142 public void FillPie (Brush brush, int x, int y, int width, int height, int startAngle, int sweepAngle)
1144 Status status = GDIPlus.GdipFillPieI (nativeObject, brush.NativeObject, x, y, width, height, startAngle, sweepAngle);
1145 GDIPlus.CheckStatus (status);
1148 public void FillPie (Brush brush, float x, float y, float width, float height, float startAngle, float sweepAngle)
1150 Status status = GDIPlus.GdipFillPie (nativeObject, brush.NativeObject, x, y, width, height, startAngle, sweepAngle);
1151 GDIPlus.CheckStatus (status);
1154 public void FillPolygon (Brush brush, PointF [] points)
1156 Status status = GDIPlus.GdipFillPolygon2 (nativeObject, brush.nativeObject, points, points.Length);
1157 GDIPlus.CheckStatus (status);
1160 public void FillPolygon (Brush brush, Point [] points)
1162 Status status = GDIPlus.GdipFillPolygon2I (nativeObject, brush.nativeObject, points, points.Length);
1163 GDIPlus.CheckStatus (status);
1166 public void FillPolygon (Brush brush, Point [] points, FillMode fillMode)
1168 Status status = GDIPlus.GdipFillPolygonI (nativeObject, brush.nativeObject, points, points.Length, fillMode);
1169 GDIPlus.CheckStatus (status);
1172 public void FillPolygon (Brush brush, PointF [] points, FillMode fillMode)
1174 Status status = GDIPlus.GdipFillPolygon (nativeObject, brush.nativeObject, points, points.Length, fillMode);
1175 GDIPlus.CheckStatus (status);
1178 public void FillRectangle (Brush brush, RectangleF rect)
1180 FillRectangle (brush, rect.Left, rect.Top, rect.Width, rect.Height);
1183 public void FillRectangle (Brush brush, Rectangle rect)
1185 FillRectangle (brush, rect.Left, rect.Top, rect.Width, rect.Height);
1188 public void FillRectangle (Brush brush, int x, int y, int width, int height)
1190 Status status = GDIPlus.GdipFillRectangleI (nativeObject, brush.nativeObject, x, y, width, height);
1191 GDIPlus.CheckStatus (status);
1194 public void FillRectangle (Brush brush, float x, float y, float width, float height)
1196 Status status = GDIPlus.GdipFillRectangle (nativeObject, brush.nativeObject, x, y, width, height);
1197 GDIPlus.CheckStatus (status);
1200 public void FillRectangles (Brush brush, Rectangle [] rects)
1202 Status status = GDIPlus.GdipFillRectanglesI (nativeObject, brush.nativeObject, rects, rects.Length);
1203 GDIPlus.CheckStatus (status);
1206 public void FillRectangles (Brush brush, RectangleF [] rects)
1208 Status status = GDIPlus.GdipFillRectangles (nativeObject, brush.nativeObject, rects, rects.Length);
1209 GDIPlus.CheckStatus (status);
1213 public void FillRegion (Brush brush, Region region)
1215 Status status = GDIPlus.GdipFillRegion (nativeObject, brush.NativeObject, region.NativeObject);
1216 GDIPlus.CheckStatus(status);
1220 public void Flush ()
1222 Flush (FlushIntention.Flush);
1226 public void Flush (FlushIntention intention)
1228 Status status = GDIPlus.GdipFlush (nativeObject, intention);
1229 GDIPlus.CheckStatus (status);
1232 [EditorBrowsable (EditorBrowsableState.Advanced)]
1233 public static Graphics FromHdc (IntPtr hdc)
1236 Status status = GDIPlus.GdipCreateFromHDC (hdc, out graphics);
1237 GDIPlus.CheckStatus (status);
1238 return new Graphics (graphics);
1242 [EditorBrowsable (EditorBrowsableState.Advanced)]
1243 public static Graphics FromHdc (IntPtr hdc, IntPtr hdevice)
1245 throw new NotImplementedException ();
1248 [EditorBrowsable (EditorBrowsableState.Advanced)]
1249 public static Graphics FromHdcInternal (IntPtr hdc)
1255 [EditorBrowsable (EditorBrowsableState.Advanced)]
1256 public static Graphics FromHwnd (IntPtr hwnd)
1260 if (use_x_drawable) {
1261 if (display == IntPtr.Zero) {
1262 display = GDIPlus.XOpenDisplay (IntPtr.Zero);
1265 return FromXDrawable (hwnd, display);
1268 Status status = GDIPlus.GdipCreateFromHWND (hwnd, out graphics);
1269 GDIPlus.CheckStatus (status);
1271 return new Graphics (graphics);
1275 [EditorBrowsable (EditorBrowsableState.Advanced)]
1276 public static Graphics FromHwndInternal (IntPtr hwnd)
1278 throw new NotImplementedException ();
1281 public static Graphics FromImage (Image image)
1283 if (image == null) throw new ArgumentException ();
1286 Status status = GDIPlus.GdipGetImageGraphicsContext (image.nativeObject, out graphics);
1287 GDIPlus.CheckStatus (status);
1288 Graphics result = new Graphics ((IntPtr) graphics);
1290 if (Environment.OSVersion.Platform == (PlatformID) 128) {
1291 Rectangle rect = new Rectangle (0,0, image.Width, image.Height);
1292 GDIPlus.GdipSetVisibleClip_linux (result.NativeObject, ref rect);
1298 internal static Graphics FromXDrawable (IntPtr drawable, IntPtr display)
1301 Status s = GDIPlus.GdipCreateFromXDrawable_linux (drawable, display, out graphics);
1302 GDIPlus.CheckStatus (s);
1303 return new Graphics (graphics);
1307 public static IntPtr GetHalftonePalette ()
1309 throw new NotImplementedException ();
1313 [EditorBrowsable (EditorBrowsableState.Advanced)]
1314 public IntPtr GetHdc ()
1317 Status status = GDIPlus.GdipGetDC (nativeObject, out hdc);
1318 GDIPlus.CheckStatus (status);
1320 return (IntPtr) hdc;
1324 public Color GetNearestColor (Color color)
1328 Status status = GDIPlus.GdipGetNearestColor (nativeObject, out argb);
1329 GDIPlus.CheckStatus (status);
1331 return Color.FromArgb (argb);
1335 public void IntersectClip (Region region)
1337 Status status = GDIPlus.GdipSetClipRegion (nativeObject, region.NativeObject, CombineMode.Intersect);
1338 GDIPlus.CheckStatus (status);
1341 public void IntersectClip (RectangleF rect)
1343 Status status = GDIPlus.GdipSetClipRect (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, CombineMode.Intersect);
1344 GDIPlus.CheckStatus (status);
1347 public void IntersectClip (Rectangle rect)
1349 Status status = GDIPlus.GdipSetClipRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, CombineMode.Intersect);
1350 GDIPlus.CheckStatus (status);
1353 public bool IsVisible (Point point)
1355 bool isVisible = false;
1357 Status status = GDIPlus.GdipIsVisiblePointI (nativeObject, point.X, point.Y, out isVisible);
1358 GDIPlus.CheckStatus (status);
1364 public bool IsVisible (RectangleF rect)
1366 bool isVisible = false;
1368 Status status = GDIPlus.GdipIsVisibleRect (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, out isVisible);
1369 GDIPlus.CheckStatus (status);
1374 public bool IsVisible (PointF point)
1376 bool isVisible = false;
1378 Status status = GDIPlus.GdipIsVisiblePoint (nativeObject, point.X, point.Y, out isVisible);
1379 GDIPlus.CheckStatus (status);
1384 public bool IsVisible (Rectangle rect)
1386 bool isVisible = false;
1388 Status status = GDIPlus.GdipIsVisibleRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, out isVisible);
1389 GDIPlus.CheckStatus (status);
1394 public bool IsVisible (float x, float y)
1396 return IsVisible (new PointF (x, y));
1399 public bool IsVisible (int x, int y)
1401 return IsVisible (new Point (x, y));
1404 public bool IsVisible (float x, float y, float width, float height)
1406 return IsVisible (new RectangleF (x, y, width, height));
1410 public bool IsVisible (int x, int y, int width, int height)
1412 return IsVisible (new Rectangle (x, y, width, height));
1416 public Region [] MeasureCharacterRanges (string text, Font font, RectangleF layoutRect, StringFormat stringFormat)
1419 int regcount = stringFormat.GetMeasurableCharacterRangeCount ();
1420 IntPtr[] native_regions = new IntPtr [regcount];
1421 Region[] regions = new Region [regcount];
1423 for (int i = 0; i < regcount; i++) {
1424 regions[i] = new Region ();
1425 native_regions[i] = regions[i].NativeObject;
1428 status = GDIPlus.GdipMeasureCharacterRanges (nativeObject, text, text.Length,
1429 font.NativeObject, ref layoutRect, stringFormat.NativeObject,
1430 regcount, out native_regions[0]);
1432 GDIPlus.CheckStatus (status);
1438 public SizeF MeasureString (string text, Font font)
1440 return MeasureString (text, font, new Size(0,0));
1444 public SizeF MeasureString (string text, Font font, SizeF layoutArea)
1446 int charactersFitted, linesFilled;
1447 RectangleF boundingBox = new RectangleF ();
1448 RectangleF rect = new RectangleF (0,0,layoutArea.Width, layoutArea.Height);
1450 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1451 font.NativeObject, ref rect, IntPtr.Zero, out boundingBox,
1452 out charactersFitted, out linesFilled);
1453 GDIPlus.CheckStatus (status);
1455 return new SizeF(boundingBox.Width, boundingBox.Height);
1459 public SizeF MeasureString (string text, Font font, int width)
1461 RectangleF boundingBox = new RectangleF ();
1462 RectangleF rect = new RectangleF (0, 0, width, 999999);
1463 int charactersFitted, linesFilled;
1465 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1466 font.NativeObject, ref rect, IntPtr.Zero,
1467 out boundingBox, out charactersFitted, out linesFilled);
1468 GDIPlus.CheckStatus (status);
1470 return new SizeF (boundingBox.Width, boundingBox.Height);
1474 public SizeF MeasureString (string text, Font font, SizeF layoutArea, StringFormat stringFormat)
1476 int charactersFitted, linesFilled;
1477 return MeasureString (text, font, layoutArea, stringFormat, out charactersFitted, out linesFilled);
1481 public SizeF MeasureString (string text, Font font, int width, StringFormat format)
1483 int charactersFitted, linesFilled;
1484 return MeasureString (text, font, new SizeF (width, 999999),
1485 format, out charactersFitted, out linesFilled);
1489 public SizeF MeasureString (string text, Font font, PointF origin, StringFormat stringFormat)
1491 RectangleF boundingBox = new RectangleF ();
1492 RectangleF rect = new RectangleF (origin.X, origin.Y, 0,0);
1493 int charactersFitted, linesFilled;
1495 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1496 font.NativeObject, ref rect, stringFormat.NativeObject,
1497 out boundingBox, out charactersFitted, out linesFilled);
1498 GDIPlus.CheckStatus (status);
1500 return new SizeF (boundingBox.Width, boundingBox.Height);
1504 public SizeF MeasureString (string text, Font font, SizeF layoutArea, StringFormat stringFormat, out int charactersFitted, out int linesFilled)
1506 RectangleF boundingBox = new RectangleF ();
1507 RectangleF rect = new RectangleF (0,0,layoutArea.Width, layoutArea.Height);
1508 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1509 font.NativeObject, ref rect, stringFormat.NativeObject,
1510 out boundingBox, out charactersFitted, out linesFilled);
1511 GDIPlus.CheckStatus (status);
1513 return new SizeF (boundingBox.Width, boundingBox.Height);
1516 public void MultiplyTransform (Matrix matrix)
1518 MultiplyTransform (matrix, MatrixOrder.Prepend);
1521 public void MultiplyTransform (Matrix matrix, MatrixOrder order)
1523 Status status = GDIPlus.GdipMultiplyWorldTransform (nativeObject, matrix.nativeMatrix, order);
1524 GDIPlus.CheckStatus (status);
1527 [EditorBrowsable (EditorBrowsableState.Advanced)]
1528 public void ReleaseHdc (IntPtr hdc)
1530 Status status = GDIPlus.GdipReleaseDC (nativeObject, hdc);
1531 GDIPlus.CheckStatus (status);
1535 [EditorBrowsable (EditorBrowsableState.Advanced)]
1536 public void ReleaseHdcInternal (IntPtr hdc)
1538 throw new NotImplementedException ();
1542 public void ResetClip ()
1544 Status status = GDIPlus.GdipResetClip (nativeObject);
1545 GDIPlus.CheckStatus (status);
1548 public void ResetTransform ()
1550 Status status = GDIPlus.GdipResetWorldTransform (nativeObject);
1551 GDIPlus.CheckStatus (status);
1554 public void Restore (GraphicsState gstate)
1556 Transform = gstate.matrix.Clone ();
1557 Status status = GDIPlus.GdipRestoreGraphics (nativeObject, gstate.nativeState);
1558 GDIPlus.CheckStatus (status);
1562 public void RotateTransform (float angle)
1564 RotateTransform (angle, MatrixOrder.Prepend);
1567 public void RotateTransform (float angle, MatrixOrder order)
1570 Status status = GDIPlus.GdipRotateWorldTransform (nativeObject, angle, order);
1571 GDIPlus.CheckStatus (status);
1574 public GraphicsState Save ()
1576 GraphicsState state = new GraphicsState ();
1577 state.matrix = Transform.Clone ();
1579 Status status = GDIPlus.GdipSaveGraphics (nativeObject, out saveState);
1580 GDIPlus.CheckStatus (status);
1582 state.nativeState = saveState;
1586 public void ScaleTransform (float sx, float sy)
1588 ScaleTransform (sx, sy, MatrixOrder.Prepend);
1591 public void ScaleTransform (float sx, float sy, MatrixOrder order)
1593 Status status = GDIPlus.GdipScaleWorldTransform (nativeObject, sx, sy, order);
1594 GDIPlus.CheckStatus (status);
1598 public void SetClip (RectangleF rect)
1600 SetClip (rect, CombineMode.Replace);
1604 public void SetClip (GraphicsPath path)
1606 SetClip (path, CombineMode.Replace);
1610 public void SetClip (Rectangle rect)
1612 SetClip (rect, CombineMode.Replace);
1616 public void SetClip (Graphics g)
1618 SetClip (g, CombineMode.Replace);
1622 public void SetClip (Graphics g, CombineMode combineMode)
1624 Status status = GDIPlus.GdipSetClipGraphics (nativeObject, g.NativeObject, combineMode);
1625 GDIPlus.CheckStatus (status);
1629 public void SetClip (Rectangle rect, CombineMode combineMode)
1631 Status status = GDIPlus.GdipSetClipRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, combineMode);
1632 GDIPlus.CheckStatus (status);
1636 public void SetClip (RectangleF rect, CombineMode combineMode)
1638 Status status = GDIPlus.GdipSetClipRect (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, combineMode);
1639 GDIPlus.CheckStatus (status);
1643 public void SetClip (Region region, CombineMode combineMode)
1645 Status status = GDIPlus.GdipSetClipRegion(nativeObject, region.NativeObject, combineMode);
1646 GDIPlus.CheckStatus (status);
1650 public void SetClip (GraphicsPath path, CombineMode combineMode)
1652 Status status = GDIPlus.GdipSetClipPath (nativeObject, path.NativeObject, combineMode);
1653 GDIPlus.CheckStatus (status);
1657 public void TransformPoints (CoordinateSpace destSpace, CoordinateSpace srcSpace, PointF [] pts)
1659 IntPtr ptrPt = GDIPlus.FromPointToUnManagedMemory (pts);
1661 Status status = GDIPlus.GdipTransformPoints (nativeObject, destSpace, srcSpace, ptrPt, pts.Length);
1662 GDIPlus.CheckStatus (status);
1664 GDIPlus.FromUnManagedMemoryToPoint (ptrPt, pts);
1668 public void TransformPoints (CoordinateSpace destSpace, CoordinateSpace srcSpace, Point [] pts)
1670 IntPtr ptrPt = GDIPlus.FromPointToUnManagedMemoryI (pts);
1672 Status status = GDIPlus.GdipTransformPointsI (nativeObject, destSpace, srcSpace, ptrPt, pts.Length);
1673 GDIPlus.CheckStatus (status);
1675 GDIPlus.FromUnManagedMemoryToPointI (ptrPt, pts);
1679 public void TranslateClip (int dx, int dy)
1681 Status status = GDIPlus.GdipTranslateClipI (nativeObject, dx, dy);
1682 GDIPlus.CheckStatus (status);
1686 public void TranslateClip (float dx, float dy)
1688 Status status = GDIPlus.GdipTranslateClip (nativeObject, dx, dy);
1689 GDIPlus.CheckStatus (status);
1692 public void TranslateTransform (float dx, float dy)
1694 TranslateTransform (dx, dy, MatrixOrder.Prepend);
1698 public void TranslateTransform (float dx, float dy, MatrixOrder order)
1700 Status status = GDIPlus.GdipTranslateWorldTransform (nativeObject, dx, dy, order);
1701 GDIPlus.CheckStatus (status);
1704 public Region Clip {
1706 Region reg = new Region();
1707 Status status = GDIPlus.GdipGetClip (nativeObject, reg.NativeObject);
1708 GDIPlus.CheckStatus (status);
1712 SetClip (value, CombineMode.Replace);
1716 public RectangleF ClipBounds {
1718 RectangleF rect = new RectangleF ();
1719 Status status = GDIPlus.GdipGetClipBounds (nativeObject, out rect);
1720 GDIPlus.CheckStatus (status);
1725 public CompositingMode CompositingMode {
1727 CompositingMode mode;
1728 Status status = GDIPlus.GdipGetCompositingMode (nativeObject, out mode);
1729 GDIPlus.CheckStatus (status);
1734 Status status = GDIPlus.GdipSetCompositingMode (nativeObject, value);
1735 GDIPlus.CheckStatus (status);
1740 public CompositingQuality CompositingQuality {
1742 CompositingQuality quality;
1744 Status status = GDIPlus.GdipGetCompositingQuality (nativeObject, out quality);
1745 GDIPlus.CheckStatus (status);
1749 Status status = GDIPlus.GdipSetCompositingQuality (nativeObject, value);
1750 GDIPlus.CheckStatus (status);
1758 Status status = GDIPlus.GdipGetDpiX (nativeObject, out x);
1759 GDIPlus.CheckStatus (status);
1768 Status status = GDIPlus.GdipGetDpiY (nativeObject, out y);
1769 GDIPlus.CheckStatus (status);
1774 public InterpolationMode InterpolationMode {
1776 InterpolationMode imode = InterpolationMode.Invalid;
1777 Status status = GDIPlus.GdipGetInterpolationMode (nativeObject, out imode);
1778 GDIPlus.CheckStatus (status);
1782 Status status = GDIPlus.GdipSetInterpolationMode (nativeObject, value);
1783 GDIPlus.CheckStatus (status);
1787 public bool IsClipEmpty {
1789 bool isEmpty = false;
1791 Status status = GDIPlus.GdipIsClipEmpty (nativeObject, out isEmpty);
1792 GDIPlus.CheckStatus (status);
1797 public bool IsVisibleClipEmpty {
1799 bool isEmpty = false;
1801 Status status = GDIPlus.GdipIsVisibleClipEmpty (nativeObject, out isEmpty);
1802 GDIPlus.CheckStatus (status);
1807 public float PageScale {
1811 Status status = GDIPlus.GdipGetPageScale (nativeObject, out scale);
1812 GDIPlus.CheckStatus (status);
1816 Status status = GDIPlus.GdipSetPageScale (nativeObject, value);
1817 GDIPlus.CheckStatus (status);
1821 public GraphicsUnit PageUnit {
1825 Status status = GDIPlus.GdipGetPageUnit (nativeObject, out unit);
1826 GDIPlus.CheckStatus (status);
1830 Status status = GDIPlus.GdipSetPageUnit (nativeObject, value);
1831 GDIPlus.CheckStatus (status);
1835 public PixelOffsetMode PixelOffsetMode {
1837 PixelOffsetMode pixelOffset = PixelOffsetMode.Invalid;
1839 Status status = GDIPlus.GdipGetPixelOffsetMode (nativeObject, out pixelOffset);
1840 GDIPlus.CheckStatus (status);
1844 Status status = GDIPlus.GdipSetPixelOffsetMode (nativeObject, value);
1845 GDIPlus.CheckStatus (status);
1849 public Point RenderingOrigin {
1852 Status status = GDIPlus.GdipGetRenderingOrigin (nativeObject, out x, out y);
1853 GDIPlus.CheckStatus (status);
1854 return new Point (x, y);
1858 Status status = GDIPlus.GdipSetRenderingOrigin (nativeObject, value.X, value.Y);
1859 GDIPlus.CheckStatus (status);
1863 public SmoothingMode SmoothingMode {
1865 SmoothingMode mode = SmoothingMode.Invalid;
1867 Status status = GDIPlus.GdipGetSmoothingMode (nativeObject, out mode);
1868 GDIPlus.CheckStatus (status);
1873 Status status = GDIPlus.GdipSetSmoothingMode (nativeObject, value);
1874 GDIPlus.CheckStatus (status);
1878 public int TextContrast {
1882 Status status = GDIPlus.GdipGetTextContrast (nativeObject, out contrast);
1883 GDIPlus.CheckStatus (status);
1888 Status status = GDIPlus.GdipSetTextContrast (nativeObject, value);
1889 GDIPlus.CheckStatus (status);
1893 public TextRenderingHint TextRenderingHint {
1895 TextRenderingHint hint;
1897 Status status = GDIPlus.GdipGetTextRenderingHint (nativeObject, out hint);
1898 GDIPlus.CheckStatus (status);
1903 Status status = GDIPlus.GdipSetTextRenderingHint (nativeObject, value);
1904 GDIPlus.CheckStatus (status);
1908 public Matrix Transform {
1910 Matrix matrix = new Matrix ();
1911 Status status = GDIPlus.GdipGetWorldTransform (nativeObject, matrix.nativeMatrix);
1912 GDIPlus.CheckStatus (status);
1916 Status status = GDIPlus.GdipSetWorldTransform (nativeObject, value.nativeMatrix);
1917 GDIPlus.CheckStatus (status);
1921 public RectangleF VisibleClipBounds {
1925 Status status = GDIPlus.GdipGetVisibleClipBounds (nativeObject, out rect);
1926 GDIPlus.CheckStatus (status);