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;
51 public delegate bool EnumerateMetafileProc (EmfPlusRecordType recordType,
55 PlayRecordCallback callbackData);
58 public delegate bool DrawImageAbort (IntPtr callbackData);
60 private Graphics (IntPtr nativeGraphics)
62 nativeObject = nativeGraphics;
70 static internal float systemDpiX {
73 Bitmap bmp = new Bitmap (1, 1);
74 Graphics g = Graphics.FromImage (bmp);
81 static internal float systemDpiY {
84 Bitmap bmp = new Bitmap (1, 1);
85 Graphics g = Graphics.FromImage (bmp);
92 internal IntPtr NativeObject {
103 public void AddMetafileComment (byte [] data)
105 throw new NotImplementedException ();
109 public GraphicsContainer BeginContainer ()
113 status = GDIPlus.GdipBeginContainer2 (nativeObject, out state);
114 GDIPlus.CheckStatus (status);
116 return new GraphicsContainer(state);
119 public GraphicsContainer BeginContainer (Rectangle dstrect, Rectangle srcrect, GraphicsUnit unit)
123 status = GDIPlus.GdipBeginContainerI (nativeObject, dstrect, srcrect, unit, out state);
124 GDIPlus.CheckStatus (status);
126 return new GraphicsContainer (state);
130 public GraphicsContainer BeginContainer (RectangleF dstrect, RectangleF srcrect, GraphicsUnit unit)
134 status = GDIPlus.GdipBeginContainer (nativeObject, dstrect, srcrect, unit, out state);
135 GDIPlus.CheckStatus (status);
137 return new GraphicsContainer (state);
141 public void Clear (Color color)
144 status = GDIPlus.GdipGraphicsClear (nativeObject, color.ToArgb ());
145 GDIPlus.CheckStatus (status);
148 public void Dispose ()
152 status = GDIPlus.GdipDeleteGraphics (nativeObject);
153 nativeObject = IntPtr.Zero;
154 GDIPlus.CheckStatus (status);
160 public void DrawArc (Pen pen, Rectangle rect, float startAngle, float sweepAngle)
162 DrawArc (pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
166 public void DrawArc (Pen pen, RectangleF rect, float startAngle, float sweepAngle)
168 DrawArc (pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
172 public void DrawArc (Pen pen, float x, float y, float width, float height, float startAngle, float sweepAngle)
175 status = GDIPlus.GdipDrawArc (nativeObject, pen.nativeObject,
176 x, y, width, height, startAngle, sweepAngle);
177 GDIPlus.CheckStatus (status);
180 // Microsoft documentation states that the signature for this member should be
181 // public void DrawArc( Pen pen, int x, int y, int width, int height, int startAngle,
182 // int sweepAngle. However, GdipDrawArcI uses also float for the startAngle and sweepAngle params
183 public void DrawArc (Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle)
186 status = GDIPlus.GdipDrawArcI (nativeObject, pen.nativeObject,
187 x, y, width, height, startAngle, sweepAngle);
188 GDIPlus.CheckStatus (status);
191 public void DrawBezier (Pen pen, PointF pt1, PointF pt2, PointF pt3, PointF pt4)
194 status = GDIPlus.GdipDrawBezier (nativeObject, pen.nativeObject,
195 pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X,
196 pt3.Y, pt4.X, pt4.Y);
197 GDIPlus.CheckStatus (status);
200 public void DrawBezier (Pen pen, Point pt1, Point pt2, Point pt3, Point pt4)
203 status = GDIPlus.GdipDrawBezierI (nativeObject, pen.nativeObject,
204 pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X,
205 pt3.Y, pt4.X, pt4.Y);
206 GDIPlus.CheckStatus (status);
209 public void DrawBezier (Pen pen, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4)
212 status = GDIPlus.GdipDrawBezier (nativeObject, pen.nativeObject, x1,
213 y1, x2, y2, x3, y3, x4, y4);
214 GDIPlus.CheckStatus (status);
217 public void DrawBeziers (Pen pen, Point [] points)
219 int length = points.Length;
225 for (int i = 0; i < length; i += 3) {
226 Point p1 = points [i];
227 Point p2 = points [i + 1];
228 Point p3 = points [i + 2];
229 Point p4 = points [i + 3];
231 status = GDIPlus.GdipDrawBezier (nativeObject,
233 p1.X, p1.Y, p2.X, p2.Y,
234 p3.X, p3.Y, p4.X, p4.Y);
235 GDIPlus.CheckStatus (status);
239 public void DrawBeziers (Pen pen, PointF [] points)
241 int length = points.Length;
247 for (int i = 0; i < length; i += 3) {
248 PointF p1 = points [i];
249 PointF p2 = points [i + 1];
250 PointF p3 = points [i + 2];
251 PointF p4 = points [i + 3];
253 status = GDIPlus.GdipDrawBezier (nativeObject,
255 p1.X, p1.Y, p2.X, p2.Y,
256 p3.X, p3.Y, p4.X, p4.Y);
257 GDIPlus.CheckStatus (status);
262 public void DrawClosedCurve (Pen pen, PointF [] points)
265 status = GDIPlus.GdipDrawClosedCurve (nativeObject, pen.nativeObject, points, points.Length);
266 GDIPlus.CheckStatus (status);
269 public void DrawClosedCurve (Pen pen, Point [] points)
272 status = GDIPlus.GdipDrawClosedCurveI (nativeObject, pen.nativeObject, points, points.Length);
273 GDIPlus.CheckStatus (status);
276 public void DrawClosedCurve (Pen pen, Point [] points, float tension, FillMode fillmode)
279 status = GDIPlus.GdipDrawClosedCurve2I (nativeObject, pen.nativeObject, points, points.Length, tension);
280 GDIPlus.CheckStatus (status);
283 public void DrawClosedCurve (Pen pen, PointF [] points, float tension, FillMode fillmode)
286 status = GDIPlus.GdipDrawClosedCurve2 (nativeObject, pen.nativeObject, points, points.Length, tension);
287 GDIPlus.CheckStatus (status);
290 public void DrawCurve (Pen pen, Point [] points)
293 status = GDIPlus.GdipDrawCurveI (nativeObject, pen.nativeObject, points, points.Length);
294 GDIPlus.CheckStatus (status);
297 public void DrawCurve (Pen pen, PointF [] points)
300 status = GDIPlus.GdipDrawCurve (nativeObject, pen.nativeObject, points, points.Length);
301 GDIPlus.CheckStatus (status);
304 public void DrawCurve (Pen pen, PointF [] points, float tension)
307 status = GDIPlus.GdipDrawCurve2 (nativeObject, pen.nativeObject, points, points.Length, tension);
308 GDIPlus.CheckStatus (status);
311 public void DrawCurve (Pen pen, Point [] points, float tension)
314 status = GDIPlus.GdipDrawCurve2I (nativeObject, pen.nativeObject, points, points.Length, tension);
315 GDIPlus.CheckStatus (status);
319 public void DrawCurve (Pen pen, PointF [] points, int offset, int numberOfSegments)
322 status = GDIPlus.GdipDrawCurve3 (nativeObject, pen.nativeObject,
323 points, points.Length, offset,
324 numberOfSegments, 0.5f);
325 GDIPlus.CheckStatus (status);
328 public void DrawCurve (Pen pen, Point [] points, int offset, int numberOfSegments, float tension)
331 status = GDIPlus.GdipDrawCurve3I (nativeObject, pen.nativeObject,
332 points, points.Length, offset,
333 numberOfSegments, tension);
334 GDIPlus.CheckStatus (status);
338 public void DrawCurve (Pen pen, PointF [] points, int offset, int numberOfSegments, float tension)
341 status = GDIPlus.GdipDrawCurve3 (nativeObject, pen.nativeObject,
342 points, points.Length, offset,
343 numberOfSegments, tension);
344 GDIPlus.CheckStatus (status);
347 public void DrawEllipse (Pen pen, Rectangle rect)
349 DrawEllipse (pen, rect.X, rect.Y, rect.Width, rect.Height);
352 public void DrawEllipse (Pen pen, RectangleF rect)
354 DrawEllipse (pen, rect.X, rect.Y, rect.Width, rect.Height);
357 public void DrawEllipse (Pen pen, int x, int y, int width, int height)
360 status = GDIPlus.GdipDrawEllipseI (nativeObject, pen.nativeObject, x, y, width, height);
361 GDIPlus.CheckStatus (status);
364 public void DrawEllipse (Pen pen, float x, float y, float width, float height)
366 Status status = GDIPlus.GdipDrawEllipse (nativeObject, pen.nativeObject, x, y, width, height);
367 GDIPlus.CheckStatus (status);
370 public void DrawIcon (Icon icon, Rectangle targetRect)
372 Image img = icon.ToBitmap ();
373 DrawImage (img, targetRect);
376 public void DrawIcon (Icon icon, int x, int y)
378 Image img = icon.ToBitmap ();
379 DrawImage (img, x, y);
382 public void DrawIconUnstretched (Icon icon, Rectangle targetRect)
384 Image img = icon.ToBitmap ();
385 DrawImageUnscaled (img, targetRect);
388 public void DrawImage (Image image, RectangleF rect)
390 Status status = GDIPlus.GdipDrawImageRect(nativeObject, image.NativeObject, rect.X, rect.Y, rect.Width, rect.Height);
391 GDIPlus.CheckStatus (status);
395 public void DrawImage (Image image, PointF point)
397 Status status = GDIPlus.GdipDrawImage (nativeObject, image.NativeObject, point.X, point.Y);
398 GDIPlus.CheckStatus (status);
402 public void DrawImage (Image image, Point [] destPoints)
404 Status status = GDIPlus.GdipDrawImagePointsI (nativeObject, image.NativeObject, destPoints, destPoints.Length);
405 GDIPlus.CheckStatus (status);
409 public void DrawImage (Image image, Point point)
411 DrawImage (image, point.X, point.Y);
415 public void DrawImage (Image image, Rectangle rect)
417 DrawImage (image, rect.X, rect.Y, rect.Width, rect.Height);
421 public void DrawImage (Image image, PointF [] destPoints)
423 Status status = GDIPlus.GdipDrawImagePoints (nativeObject, image.NativeObject, destPoints, destPoints.Length);
424 GDIPlus.CheckStatus (status);
428 public void DrawImage (Image image, int x, int y)
430 Status status = GDIPlus.GdipDrawImageI (nativeObject, image.NativeObject, x, y);
431 GDIPlus.CheckStatus (status);
435 public void DrawImage (Image image, float x, float y)
437 Status status = GDIPlus.GdipDrawImage (nativeObject, image.NativeObject, x, y);
438 GDIPlus.CheckStatus (status);
442 public void DrawImage (Image image, Rectangle destRect, Rectangle srcRect, GraphicsUnit srcUnit)
444 Status status = GDIPlus.GdipDrawImageRectRectI (nativeObject, image.NativeObject,
445 destRect.X, destRect.Y, destRect.Width, destRect.Height,
446 srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height,
447 srcUnit, IntPtr.Zero, null, IntPtr.Zero);
448 GDIPlus.CheckStatus (status);
451 public void DrawImage (Image image, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit)
453 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
454 destRect.X, destRect.Y, destRect.Width, destRect.Height,
455 srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height,
456 srcUnit, IntPtr.Zero, null, IntPtr.Zero);
457 GDIPlus.CheckStatus (status);
461 public void DrawImage (Image image, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit)
463 Status status = GDIPlus.GdipDrawImagePointsRectI (nativeObject, image.NativeObject,
464 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
465 srcRect.Width, srcRect.Height, srcUnit, IntPtr.Zero,
467 GDIPlus.CheckStatus (status);
471 public void DrawImage (Image image, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit)
474 Status status = GDIPlus.GdipDrawImagePointsRect (nativeObject, image.NativeObject,
475 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
476 srcRect.Width, srcRect.Height, srcUnit, IntPtr.Zero,
478 GDIPlus.CheckStatus (status);
482 public void DrawImage (Image image, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit,
483 ImageAttributes imageAttr)
485 Status status = GDIPlus.GdipDrawImagePointsRectI (nativeObject, image.NativeObject,
486 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
487 srcRect.Width, srcRect.Height, srcUnit,
488 imageAttr.NativeObject, null, IntPtr.Zero);
489 GDIPlus.CheckStatus (status);
492 public void DrawImage (Image image, float x, float y, float width, float height)
494 Status status = GDIPlus.GdipDrawImageRect(nativeObject, image.NativeObject, x, y,
496 GDIPlus.CheckStatus (status);
500 public void DrawImage (Image image, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit,
501 ImageAttributes imageAttr)
503 Status status = GDIPlus.GdipDrawImagePointsRect (nativeObject, image.NativeObject,
504 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
505 srcRect.Width, srcRect.Height, srcUnit,
506 imageAttr.NativeObject, null, IntPtr.Zero);
507 GDIPlus.CheckStatus (status);
511 public void DrawImage (Image image, int x, int y, Rectangle srcRect, GraphicsUnit srcUnit)
513 Status status = GDIPlus.GdipDrawImagePointRectI(nativeObject, image.NativeObject, x, y, srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit);
514 GDIPlus.CheckStatus (status);
517 public void DrawImage (Image image, int x, int y, int width, int height)
519 Status status = GDIPlus.GdipDrawImageRectI (nativeObject, image.nativeObject, x, y, width, height);
520 GDIPlus.CheckStatus (status);
523 public void DrawImage (Image image, float x, float y, RectangleF srcRect, GraphicsUnit srcUnit)
525 Status status = GDIPlus.GdipDrawImagePointRect (nativeObject, image.nativeObject, x, y, srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit);
526 GDIPlus.CheckStatus (status);
530 public void DrawImage (Image image, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)
532 Status status = GDIPlus.GdipDrawImagePointsRect (nativeObject, image.NativeObject,
533 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
534 srcRect.Width, srcRect.Height, srcUnit,
535 imageAttr.NativeObject, callback, IntPtr.Zero);
536 GDIPlus.CheckStatus (status);
540 public void DrawImage (Image image, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)
543 Status status = GDIPlus.GdipDrawImagePointsRectI (nativeObject, image.NativeObject,
544 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
545 srcRect.Width, srcRect.Height, srcUnit,
546 imageAttr.NativeObject, callback, IntPtr.Zero);
547 GDIPlus.CheckStatus (status);
551 public void DrawImage (Image image, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, int callbackData)
554 Status status = GDIPlus.GdipDrawImagePointsRectI (nativeObject, image.NativeObject,
555 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
556 srcRect.Width, srcRect.Height, srcUnit,
557 imageAttr.NativeObject, callback, (IntPtr) callbackData);
558 GDIPlus.CheckStatus (status);
562 public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit)
564 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
565 destRect.X, destRect.Y, destRect.Width, destRect.Height,
566 srcX, srcY, srcWidth, srcHeight, srcUnit, IntPtr.Zero,
568 GDIPlus.CheckStatus (status);
571 public void DrawImage (Image image, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, int callbackData)
573 Status status = GDIPlus.GdipDrawImagePointsRect (nativeObject, image.NativeObject,
574 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
575 srcRect.Width, srcRect.Height, srcUnit,
576 imageAttr.NativeObject, callback, (IntPtr) callbackData);
577 GDIPlus.CheckStatus (status);
581 public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit)
583 Status status = GDIPlus.GdipDrawImageRectRectI (nativeObject, image.NativeObject,
584 destRect.X, destRect.Y, destRect.Width, destRect.Height,
585 srcX, srcY, srcWidth, srcHeight, srcUnit, IntPtr.Zero,
587 GDIPlus.CheckStatus (status);
591 public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttrs)
593 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
594 destRect.X, destRect.Y, destRect.Width, destRect.Height,
595 srcX, srcY, srcWidth, srcHeight, srcUnit,
596 imageAttrs.NativeObject, null, IntPtr.Zero);
597 GDIPlus.CheckStatus (status);
600 public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr)
602 Status status = GDIPlus.GdipDrawImageRectRectI (nativeObject, image.NativeObject,
603 destRect.X, destRect.Y, destRect.Width,
604 destRect.Height, srcX, srcY, srcWidth, srcHeight,
605 srcUnit, imageAttr.NativeObject, null, IntPtr.Zero);
606 GDIPlus.CheckStatus (status);
609 public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)
611 Status status = GDIPlus.GdipDrawImageRectRectI (nativeObject, image.NativeObject,
612 destRect.X, destRect.Y, destRect.Width,
613 destRect.Height, srcX, srcY, srcWidth, srcHeight,
614 srcUnit, imageAttr.NativeObject, callback,
616 GDIPlus.CheckStatus (status);
619 public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)
621 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
622 destRect.X, destRect.Y, destRect.Width,
623 destRect.Height, srcX, srcY, srcWidth, srcHeight,
624 srcUnit, imageAttr.NativeObject,
625 callback, IntPtr.Zero);
626 GDIPlus.CheckStatus (status);
630 public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, IntPtr callbackData)
632 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
633 destRect.X, destRect.Y, destRect.Width, destRect.Height,
634 srcX, srcY, srcWidth, srcHeight, srcUnit,
635 imageAttr.NativeObject, callback, callbackData);
636 GDIPlus.CheckStatus (status);
640 public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, IntPtr callbackData)
642 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
643 destRect.X, destRect.Y, destRect.Width, destRect.Height,
644 srcX, srcY, srcWidth, srcHeight, srcUnit,
645 imageAttr.NativeObject, callback, callbackData);
646 GDIPlus.CheckStatus (status);
649 public void DrawImageUnscaled (Image image, Point point)
651 DrawImageUnscaled (image, point.X, point.Y);
654 public void DrawImageUnscaled (Image image, Rectangle rect)
656 DrawImageUnscaled (image, rect.X, rect.Y, rect.Width, rect.Height);
659 public void DrawImageUnscaled (Image image, int x, int y)
661 DrawImage (image, x, y, image.Width, image.Height);
664 public void DrawImageUnscaled (Image image, int x, int y, int width, int height)
666 Image tmpImg = new Bitmap (width, height);
667 Graphics g = FromImage (tmpImg);
668 g.DrawImage (image, 0, 0, image.Width, image.Height);
669 this.DrawImage (tmpImg, x, y, width, height);
674 public void DrawLine (Pen pen, PointF pt1, PointF pt2)
676 Status status = GDIPlus.GdipDrawLine (nativeObject, pen.nativeObject,
677 pt1.X, pt1.Y, pt2.X, pt2.Y);
678 GDIPlus.CheckStatus (status);
681 public void DrawLine (Pen pen, Point pt1, Point pt2)
683 Status status = GDIPlus.GdipDrawLineI (nativeObject, pen.nativeObject,
684 pt1.X, pt1.Y, pt2.X, pt2.Y);
685 GDIPlus.CheckStatus (status);
688 public void DrawLine (Pen pen, int x1, int y1, int x2, int y2)
690 Status status = GDIPlus.GdipDrawLineI (nativeObject, pen.nativeObject, x1, y1, x2, y2);
691 GDIPlus.CheckStatus (status);
694 public void DrawLine (Pen pen, float x1, float y1, float x2, float y2)
696 Status status = GDIPlus.GdipDrawLine (nativeObject, pen.nativeObject, x1, y1, x2, y2);
697 GDIPlus.CheckStatus (status);
700 public void DrawLines (Pen pen, PointF [] points)
702 Status status = GDIPlus.GdipDrawLines (nativeObject, pen.nativeObject, points, points.Length);
703 GDIPlus.CheckStatus (status);
706 public void DrawLines (Pen pen, Point [] points)
708 Status status = GDIPlus.GdipDrawLinesI (nativeObject, pen.nativeObject, points, points.Length);
709 GDIPlus.CheckStatus (status);
712 public void DrawPath (Pen pen, GraphicsPath path)
714 Status status = GDIPlus.GdipDrawPath (nativeObject, pen.nativeObject, path.nativePath);
715 GDIPlus.CheckStatus (status);
718 public void DrawPie (Pen pen, Rectangle rect, float startAngle, float sweepAngle)
720 DrawPie (pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
723 public void DrawPie (Pen pen, RectangleF rect, float startAngle, float sweepAngle)
725 DrawPie (pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
728 public void DrawPie (Pen pen, float x, float y, float width, float height, float startAngle, float sweepAngle)
730 Status status = GDIPlus.GdipDrawPie (nativeObject, pen.nativeObject, x, y, width, height, startAngle, sweepAngle);
731 GDIPlus.CheckStatus (status);
734 // Microsoft documentation states that the signature for this member should be
735 // public void DrawPie(Pen pen, int x, int y, int width, int height, int startAngle
736 // int sweepAngle. However, GdipDrawPieI uses also float for the startAngle and sweepAngle params
737 public void DrawPie (Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle)
739 Status status = GDIPlus.GdipDrawPieI (nativeObject, pen.nativeObject, x, y, width, height, startAngle, sweepAngle);
740 GDIPlus.CheckStatus (status);
743 public void DrawPolygon (Pen pen, Point [] points)
745 Status status = GDIPlus.GdipDrawPolygonI (nativeObject, pen.nativeObject, points, points.Length);
746 GDIPlus.CheckStatus (status);
749 public void DrawPolygon (Pen pen, PointF [] points)
751 Status status = GDIPlus.GdipDrawPolygon (nativeObject, pen.nativeObject, points, points.Length);
752 GDIPlus.CheckStatus (status);
755 internal void DrawRectangle (Pen pen, RectangleF rect)
757 DrawRectangle (pen, rect.Left, rect.Top, rect.Width, rect.Height);
760 public void DrawRectangle (Pen pen, Rectangle rect)
762 DrawRectangle (pen, rect.Left, rect.Top, rect.Width, rect.Height);
765 public void DrawRectangle (Pen pen, float x, float y, float width, float height)
767 Status status = GDIPlus.GdipDrawRectangle (nativeObject, pen.nativeObject, x, y, width, height);
768 GDIPlus.CheckStatus (status);
771 public void DrawRectangle (Pen pen, int x, int y, int width, int height)
773 Status status = GDIPlus.GdipDrawRectangleI (nativeObject, pen.nativeObject, x, y, width, height);
774 GDIPlus.CheckStatus (status);
777 public void DrawRectangles (Pen pen, RectangleF [] rects)
779 Status status = GDIPlus.GdipDrawRectangles (nativeObject, pen.nativeObject, rects, rects.Length);
780 GDIPlus.CheckStatus (status);
783 public void DrawRectangles (Pen pen, Rectangle [] rects)
785 Status status = GDIPlus.GdipDrawRectanglesI (nativeObject, pen.nativeObject, rects, rects.Length);
786 GDIPlus.CheckStatus (status);
789 public void DrawString (string s, Font font, Brush brush, RectangleF layoutRectangle)
791 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject, ref layoutRectangle, IntPtr.Zero, brush.nativeObject);
792 GDIPlus.CheckStatus (status);
795 public void DrawString (string s, Font font, Brush brush, PointF point)
797 RectangleF rc = new RectangleF (point.X, point.Y, 0, 0);
798 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject, ref rc, IntPtr.Zero, brush.nativeObject);
799 GDIPlus.CheckStatus (status);
802 public void DrawString (string s, Font font, Brush brush, PointF point, StringFormat format)
804 RectangleF rc = new RectangleF (point.X, point.Y, 0, 0);
805 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject, ref rc, format.NativeObject, brush.nativeObject);
806 GDIPlus.CheckStatus (status);
809 public void DrawString (string s, Font font, Brush brush, RectangleF layoutRectangle, StringFormat format)
811 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject, ref layoutRectangle, format.NativeObject, brush.nativeObject);
812 GDIPlus.CheckStatus (status);
815 public void DrawString (string s, Font font, Brush brush, float x, float y)
817 RectangleF rc = new RectangleF (x, y, 0, 0);
819 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject,
820 ref rc, IntPtr.Zero, brush.nativeObject);
821 GDIPlus.CheckStatus (status);
824 public void DrawString (string s, Font font, Brush brush, float x, float y, StringFormat format)
826 RectangleF rc = new RectangleF (x, y, 0, 0);
828 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject,
829 ref rc, format.NativeObject, brush.nativeObject);
830 GDIPlus.CheckStatus (status);
834 public void EndContainer (GraphicsContainer container)
836 Status status = GDIPlus.GdipEndContainer(nativeObject, container.NativeObject);
837 GDIPlus.CheckStatus (status);
841 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, EnumerateMetafileProc callback)
843 throw new NotImplementedException ();
847 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, EnumerateMetafileProc callback)
849 throw new NotImplementedException ();
853 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, EnumerateMetafileProc callback)
855 throw new NotImplementedException ();
859 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, EnumerateMetafileProc callback)
861 throw new NotImplementedException ();
865 public void EnumerateMetafile (Metafile metafile, Point destPoint, EnumerateMetafileProc callback)
867 throw new NotImplementedException ();
871 public void EnumerateMetafile (Metafile metafile, PointF destPoint, EnumerateMetafileProc callback)
873 throw new NotImplementedException ();
877 public void EnumerateMetafile (Metafile metafile, PointF destPoint, EnumerateMetafileProc callback, IntPtr callbackData)
879 throw new NotImplementedException ();
883 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, EnumerateMetafileProc callback, IntPtr callbackData)
885 throw new NotImplementedException ();
889 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData)
891 throw new NotImplementedException ();
895 public void EnumerateMetafile (Metafile metafile, Point destPoint, EnumerateMetafileProc callback, IntPtr callbackData)
897 throw new NotImplementedException ();
901 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData)
903 throw new NotImplementedException ();
907 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, EnumerateMetafileProc callback, IntPtr callbackData)
909 throw new NotImplementedException ();
913 public void EnumerateMetafile (Metafile metafile, PointF destPoint, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
915 throw new NotImplementedException ();
919 public void EnumerateMetafile (Metafile metafile, Point destPoint, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
921 throw new NotImplementedException ();
925 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
927 throw new NotImplementedException ();
931 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
933 throw new NotImplementedException ();
937 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
939 throw new NotImplementedException ();
943 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
945 throw new NotImplementedException ();
949 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
951 throw new NotImplementedException ();
955 public void EnumerateMetafile (Metafile metafile, Point destPoint, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
957 throw new NotImplementedException ();
961 public void EnumerateMetafile (Metafile metafile, PointF destPoint, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
963 throw new NotImplementedException ();
967 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
969 throw new NotImplementedException ();
973 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
975 throw new NotImplementedException ();
979 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
981 throw new NotImplementedException ();
985 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
987 throw new NotImplementedException ();
991 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
993 throw new NotImplementedException ();
997 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
999 throw new NotImplementedException ();
1003 public void EnumerateMetafile (Metafile metafile, PointF destPoint, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
1005 throw new NotImplementedException ();
1009 public void EnumerateMetafile (Metafile metafile, Point destPoint, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
1011 throw new NotImplementedException ();
1015 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
1017 throw new NotImplementedException ();
1021 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, Rectangle srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1023 throw new NotImplementedException ();
1027 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, Rectangle srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1029 throw new NotImplementedException ();
1033 public void EnumerateMetafile (Metafile metafile, Point destPoint, Rectangle srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1035 throw new NotImplementedException ();
1039 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, RectangleF srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1041 throw new NotImplementedException ();
1045 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, RectangleF srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1047 throw new NotImplementedException ();
1051 public void EnumerateMetafile (Metafile metafile, PointF destPoint, RectangleF srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1053 throw new NotImplementedException ();
1056 public void ExcludeClip (Rectangle rect)
1058 Status status = GDIPlus.GdipSetClipRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, CombineMode.Exclude);
1059 GDIPlus.CheckStatus (status);
1062 public void ExcludeClip (Region region)
1064 Status status = GDIPlus.GdipSetClipRegion (nativeObject, region.NativeObject, CombineMode.Exclude);
1065 GDIPlus.CheckStatus (status);
1069 public void FillClosedCurve (Brush brush, PointF [] points)
1071 Status status = GDIPlus.GdipFillClosedCurve (nativeObject, brush.NativeObject, points, points.Length);
1072 GDIPlus.CheckStatus (status);
1076 public void FillClosedCurve (Brush brush, Point [] points)
1078 Status status = GDIPlus.GdipFillClosedCurveI (nativeObject, brush.NativeObject, points, points.Length);
1079 GDIPlus.CheckStatus (status);
1083 public void FillClosedCurve (Brush brush, PointF [] points, FillMode fillmode)
1085 FillClosedCurve (brush, points, fillmode, 0.5f);
1088 public void FillClosedCurve (Brush brush, Point [] points, FillMode fillmode)
1090 FillClosedCurve (brush, points, fillmode, 0.5f);
1093 public void FillClosedCurve (Brush brush, PointF [] points, FillMode fillmode, float tension)
1095 Status status = GDIPlus.GdipFillClosedCurve2 (nativeObject, brush.NativeObject, points, points.Length, tension, fillmode);
1096 GDIPlus.CheckStatus (status);
1099 public void FillClosedCurve (Brush brush, Point [] points, FillMode fillmode, float tension)
1101 Status status = GDIPlus.GdipFillClosedCurve2I (nativeObject, brush.NativeObject, points, points.Length, tension, fillmode);
1102 GDIPlus.CheckStatus (status);
1105 public void FillEllipse (Brush brush, Rectangle rect)
1107 FillEllipse (brush, rect.X, rect.Y, rect.Width, rect.Height);
1110 public void FillEllipse (Brush brush, RectangleF rect)
1112 FillEllipse (brush, rect.X, rect.Y, rect.Width, rect.Height);
1115 public void FillEllipse (Brush brush, float x, float y, float width, float height)
1117 Status status = GDIPlus.GdipFillEllipse (nativeObject, brush.nativeObject, x, y, width, height);
1118 GDIPlus.CheckStatus (status);
1121 public void FillEllipse (Brush brush, int x, int y, int width, int height)
1123 Status status = GDIPlus.GdipFillEllipseI (nativeObject, brush.nativeObject, x, y, width, height);
1124 GDIPlus.CheckStatus (status);
1127 public void FillPath (Brush brush, GraphicsPath path)
1129 Status status = GDIPlus.GdipFillPath (nativeObject, brush.NativeObject, path.NativeObject);
1130 GDIPlus.CheckStatus (status);
1133 public void FillPie (Brush brush, Rectangle rect, float startAngle, float sweepAngle)
1135 Status status = GDIPlus.GdipFillPie (nativeObject, brush.NativeObject, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
1136 GDIPlus.CheckStatus (status);
1139 public void FillPie (Brush brush, int x, int y, int width, int height, int startAngle, int sweepAngle)
1141 Status status = GDIPlus.GdipFillPieI (nativeObject, brush.NativeObject, x, y, width, height, startAngle, sweepAngle);
1142 GDIPlus.CheckStatus (status);
1145 public void FillPie (Brush brush, float x, float y, float width, float height, float startAngle, float sweepAngle)
1147 Status status = GDIPlus.GdipFillPie (nativeObject, brush.NativeObject, x, y, width, height, startAngle, sweepAngle);
1148 GDIPlus.CheckStatus (status);
1151 public void FillPolygon (Brush brush, PointF [] points)
1153 Status status = GDIPlus.GdipFillPolygon2 (nativeObject, brush.nativeObject, points, points.Length);
1154 GDIPlus.CheckStatus (status);
1157 public void FillPolygon (Brush brush, Point [] points)
1159 Status status = GDIPlus.GdipFillPolygon2I (nativeObject, brush.nativeObject, points, points.Length);
1160 GDIPlus.CheckStatus (status);
1163 public void FillPolygon (Brush brush, Point [] points, FillMode fillMode)
1165 Status status = GDIPlus.GdipFillPolygonI (nativeObject, brush.nativeObject, points, points.Length, fillMode);
1166 GDIPlus.CheckStatus (status);
1169 public void FillPolygon (Brush brush, PointF [] points, FillMode fillMode)
1171 Status status = GDIPlus.GdipFillPolygon (nativeObject, brush.nativeObject, points, points.Length, fillMode);
1172 GDIPlus.CheckStatus (status);
1175 public void FillRectangle (Brush brush, RectangleF rect)
1177 FillRectangle (brush, rect.Left, rect.Top, rect.Width, rect.Height);
1180 public void FillRectangle (Brush brush, Rectangle rect)
1182 FillRectangle (brush, rect.Left, rect.Top, rect.Width, rect.Height);
1185 public void FillRectangle (Brush brush, int x, int y, int width, int height)
1187 Status status = GDIPlus.GdipFillRectangleI (nativeObject, brush.nativeObject, x, y, width, height);
1188 GDIPlus.CheckStatus (status);
1191 public void FillRectangle (Brush brush, float x, float y, float width, float height)
1193 Status status = GDIPlus.GdipFillRectangle (nativeObject, brush.nativeObject, x, y, width, height);
1194 GDIPlus.CheckStatus (status);
1197 public void FillRectangles (Brush brush, Rectangle [] rects)
1199 Status status = GDIPlus.GdipFillRectanglesI (nativeObject, brush.nativeObject, rects, rects.Length);
1200 GDIPlus.CheckStatus (status);
1203 public void FillRectangles (Brush brush, RectangleF [] rects)
1205 Status status = GDIPlus.GdipFillRectangles (nativeObject, brush.nativeObject, rects, rects.Length);
1206 GDIPlus.CheckStatus (status);
1210 public void FillRegion (Brush brush, Region region)
1212 Status status = GDIPlus.GdipFillRegion (nativeObject, brush.NativeObject, region.NativeObject);
1213 GDIPlus.CheckStatus(status);
1217 public void Flush ()
1219 Flush (FlushIntention.Flush);
1223 public void Flush (FlushIntention intention)
1225 Status status = GDIPlus.GdipFlush (nativeObject, intention);
1226 GDIPlus.CheckStatus (status);
1227 if (GDIPlus.UseQuartzDrawable)
1228 Carbon.CGContextSynchronize (GDIPlus.Display);
1231 [EditorBrowsable (EditorBrowsableState.Advanced)]
1232 public static Graphics FromHdc (IntPtr hdc)
1235 Status status = GDIPlus.GdipCreateFromHDC (hdc, out graphics);
1236 GDIPlus.CheckStatus (status);
1237 return new Graphics (graphics);
1241 [EditorBrowsable (EditorBrowsableState.Advanced)]
1242 public static Graphics FromHdc (IntPtr hdc, IntPtr hdevice)
1244 throw new NotImplementedException ();
1247 [EditorBrowsable (EditorBrowsableState.Advanced)]
1248 public static Graphics FromHdcInternal (IntPtr hdc)
1250 GDIPlus.Display = hdc;
1254 [EditorBrowsable (EditorBrowsableState.Advanced)]
1255 public static Graphics FromHwnd (IntPtr hwnd)
1259 if (GDIPlus.UseQuartzDrawable) {
1260 CarbonContext cgContext = Carbon.GetCGContextForView (hwnd);
1261 GDIPlus.GdipCreateFromQuartz_macosx (cgContext.ctx, cgContext.width, cgContext.height, out graphics);
1263 GDIPlus.Display = cgContext.ctx;
1264 return new Graphics (graphics);
1266 if (GDIPlus.UseX11Drawable) {
1267 if (GDIPlus.Display == IntPtr.Zero) {
1268 GDIPlus.Display = GDIPlus.XOpenDisplay (IntPtr.Zero);
1271 return FromXDrawable (hwnd, GDIPlus.Display);
1275 Status status = GDIPlus.GdipCreateFromHWND (hwnd, out graphics);
1276 GDIPlus.CheckStatus (status);
1278 return new Graphics (graphics);
1282 [EditorBrowsable (EditorBrowsableState.Advanced)]
1283 public static Graphics FromHwndInternal (IntPtr hwnd)
1285 throw new NotImplementedException ();
1288 public static Graphics FromImage (Image image)
1292 if (image == null) throw new ArgumentException ();
1294 Status status = GDIPlus.GdipGetImageGraphicsContext (image.nativeObject, out graphics);
1295 GDIPlus.CheckStatus (status);
1296 Graphics result = new Graphics (graphics);
1298 // check for Unix platforms - see FAQ for more details
1299 // http://www.mono-project.com/FAQ:_Technical#How_to_detect_the_execution_platform_.3F
1300 int platform = (int) Environment.OSVersion.Platform;
1301 if ((platform == 4) || (platform == 128)) {
1302 Rectangle rect = new Rectangle (0,0, image.Width, image.Height);
1303 GDIPlus.GdipSetVisibleClip_linux (result.NativeObject, ref rect);
1309 internal static Graphics FromXDrawable (IntPtr drawable, IntPtr display)
1313 Status s = GDIPlus.GdipCreateFromXDrawable_linux (drawable, display, out graphics);
1314 GDIPlus.CheckStatus (s);
1315 return new Graphics (graphics);
1319 public static IntPtr GetHalftonePalette ()
1321 throw new NotImplementedException ();
1325 [EditorBrowsable (EditorBrowsableState.Advanced)]
1326 public IntPtr GetHdc ()
1328 return nativeObject;
1332 public Color GetNearestColor (Color color)
1336 Status status = GDIPlus.GdipGetNearestColor (nativeObject, out argb);
1337 GDIPlus.CheckStatus (status);
1339 return Color.FromArgb (argb);
1343 public void IntersectClip (Region region)
1345 Status status = GDIPlus.GdipSetClipRegion (nativeObject, region.NativeObject, CombineMode.Intersect);
1346 GDIPlus.CheckStatus (status);
1349 public void IntersectClip (RectangleF rect)
1351 Status status = GDIPlus.GdipSetClipRect (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, CombineMode.Intersect);
1352 GDIPlus.CheckStatus (status);
1355 public void IntersectClip (Rectangle rect)
1357 Status status = GDIPlus.GdipSetClipRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, CombineMode.Intersect);
1358 GDIPlus.CheckStatus (status);
1361 public bool IsVisible (Point point)
1363 bool isVisible = false;
1365 Status status = GDIPlus.GdipIsVisiblePointI (nativeObject, point.X, point.Y, out isVisible);
1366 GDIPlus.CheckStatus (status);
1372 public bool IsVisible (RectangleF rect)
1374 bool isVisible = false;
1376 Status status = GDIPlus.GdipIsVisibleRect (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, out isVisible);
1377 GDIPlus.CheckStatus (status);
1382 public bool IsVisible (PointF point)
1384 bool isVisible = false;
1386 Status status = GDIPlus.GdipIsVisiblePoint (nativeObject, point.X, point.Y, out isVisible);
1387 GDIPlus.CheckStatus (status);
1392 public bool IsVisible (Rectangle rect)
1394 bool isVisible = false;
1396 Status status = GDIPlus.GdipIsVisibleRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, out isVisible);
1397 GDIPlus.CheckStatus (status);
1402 public bool IsVisible (float x, float y)
1404 return IsVisible (new PointF (x, y));
1407 public bool IsVisible (int x, int y)
1409 return IsVisible (new Point (x, y));
1412 public bool IsVisible (float x, float y, float width, float height)
1414 return IsVisible (new RectangleF (x, y, width, height));
1418 public bool IsVisible (int x, int y, int width, int height)
1420 return IsVisible (new Rectangle (x, y, width, height));
1424 public Region [] MeasureCharacterRanges (string text, Font font, RectangleF layoutRect, StringFormat stringFormat)
1427 int regcount = stringFormat.GetMeasurableCharacterRangeCount ();
1428 IntPtr[] native_regions = new IntPtr [regcount];
1429 Region[] regions = new Region [regcount];
1431 for (int i = 0; i < regcount; i++) {
1432 regions[i] = new Region ();
1433 native_regions[i] = regions[i].NativeObject;
1436 status = GDIPlus.GdipMeasureCharacterRanges (nativeObject, text, text.Length,
1437 font.NativeObject, ref layoutRect, stringFormat.NativeObject,
1438 regcount, out native_regions[0]);
1440 GDIPlus.CheckStatus (status);
1446 public SizeF MeasureString (string text, Font font)
1448 return MeasureString (text, font, new Size (0, 0));
1452 public SizeF MeasureString (string text, Font font, SizeF layoutArea)
1454 int charactersFitted, linesFilled;
1455 RectangleF boundingBox = new RectangleF ();
1456 RectangleF rect = new RectangleF (0, 0, layoutArea.Width,
1459 if (text == null || text.Length == 0)
1463 throw new ArgumentNullException ("font");
1465 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1466 font.NativeObject, ref rect,
1467 IntPtr.Zero, out boundingBox,
1468 out charactersFitted, out linesFilled);
1469 GDIPlus.CheckStatus (status);
1471 return new SizeF (boundingBox.Width, boundingBox.Height);
1475 public SizeF MeasureString (string text, Font font, int width)
1477 RectangleF boundingBox = new RectangleF ();
1478 RectangleF rect = new RectangleF (0, 0, width, 999999);
1479 int charactersFitted, linesFilled;
1481 if (text == null || text.Length == 0)
1485 throw new ArgumentNullException ("font");
1487 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1488 font.NativeObject, ref rect,
1489 IntPtr.Zero, out boundingBox,
1490 out charactersFitted, out linesFilled);
1491 GDIPlus.CheckStatus (status);
1493 return new SizeF (boundingBox.Width, boundingBox.Height);
1497 public SizeF MeasureString (string text, Font font, SizeF layoutArea,
1498 StringFormat stringFormat)
1500 int charactersFitted, linesFilled;
1501 return MeasureString (text, font, layoutArea, stringFormat,
1502 out charactersFitted, out linesFilled);
1506 public SizeF MeasureString (string text, Font font, int width, StringFormat format)
1508 int charactersFitted, linesFilled;
1509 return MeasureString (text, font, new SizeF (width, 999999),
1510 format, out charactersFitted, out linesFilled);
1514 public SizeF MeasureString (string text, Font font, PointF origin,
1515 StringFormat stringFormat)
1517 RectangleF boundingBox = new RectangleF ();
1518 RectangleF rect = new RectangleF (origin.X, origin.Y, 0, 0);
1519 int charactersFitted, linesFilled;
1521 if (text == null || text.Length == 0)
1525 throw new ArgumentNullException ("font");
1527 if (stringFormat == null)
1528 stringFormat = new StringFormat ();
1530 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1531 font.NativeObject, ref rect,
1532 stringFormat.NativeObject,
1534 out charactersFitted,
1536 GDIPlus.CheckStatus (status);
1538 return new SizeF (boundingBox.Width, boundingBox.Height);
1542 public SizeF MeasureString (string text, Font font, SizeF layoutArea,
1543 StringFormat stringFormat, out int charactersFitted,
1544 out int linesFilled)
1546 RectangleF boundingBox = new RectangleF ();
1547 RectangleF rect = new RectangleF (0, 0, layoutArea.Width, layoutArea.Height);
1548 charactersFitted = 0;
1551 if (text == null || text.Length == 0)
1555 throw new ArgumentNullException ("font");
1557 if (stringFormat == null)
1558 stringFormat = new StringFormat ();
1560 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1561 font.NativeObject, ref rect,
1562 stringFormat.NativeObject,
1564 out charactersFitted,
1566 GDIPlus.CheckStatus (status);
1568 return new SizeF (boundingBox.Width, boundingBox.Height);
1571 public void MultiplyTransform (Matrix matrix)
1573 MultiplyTransform (matrix, MatrixOrder.Prepend);
1576 public void MultiplyTransform (Matrix matrix, MatrixOrder order)
1578 Status status = GDIPlus.GdipMultiplyWorldTransform (nativeObject,
1579 matrix.nativeMatrix,
1581 GDIPlus.CheckStatus (status);
1584 [EditorBrowsable (EditorBrowsableState.Advanced)]
1585 public void ReleaseHdc (IntPtr hdc)
1587 Status status = GDIPlus.GdipReleaseDC (nativeObject, hdc);
1588 GDIPlus.CheckStatus (status);
1592 [EditorBrowsable (EditorBrowsableState.Advanced)]
1593 public void ReleaseHdcInternal (IntPtr hdc)
1595 throw new NotImplementedException ();
1599 public void ResetClip ()
1601 Status status = GDIPlus.GdipResetClip (nativeObject);
1602 GDIPlus.CheckStatus (status);
1605 public void ResetTransform ()
1607 Status status = GDIPlus.GdipResetWorldTransform (nativeObject);
1608 GDIPlus.CheckStatus (status);
1611 public void Restore (GraphicsState gstate)
1613 Status status = GDIPlus.GdipRestoreGraphics (nativeObject, gstate.nativeState);
1614 GDIPlus.CheckStatus (status);
1618 public void RotateTransform (float angle)
1620 RotateTransform (angle, MatrixOrder.Prepend);
1623 public void RotateTransform (float angle, MatrixOrder order)
1626 Status status = GDIPlus.GdipRotateWorldTransform (nativeObject, angle, order);
1627 GDIPlus.CheckStatus (status);
1630 public GraphicsState Save ()
1633 Status status = GDIPlus.GdipSaveGraphics (nativeObject, out saveState);
1634 GDIPlus.CheckStatus (status);
1636 GraphicsState state = new GraphicsState ();
1637 state.nativeState = saveState;
1641 public void ScaleTransform (float sx, float sy)
1643 ScaleTransform (sx, sy, MatrixOrder.Prepend);
1646 public void ScaleTransform (float sx, float sy, MatrixOrder order)
1648 Status status = GDIPlus.GdipScaleWorldTransform (nativeObject, sx, sy, order);
1649 GDIPlus.CheckStatus (status);
1653 public void SetClip (RectangleF rect)
1655 SetClip (rect, CombineMode.Replace);
1659 public void SetClip (GraphicsPath path)
1661 SetClip (path, CombineMode.Replace);
1665 public void SetClip (Rectangle rect)
1667 SetClip (rect, CombineMode.Replace);
1671 public void SetClip (Graphics g)
1673 SetClip (g, CombineMode.Replace);
1677 public void SetClip (Graphics g, CombineMode combineMode)
1679 Status status = GDIPlus.GdipSetClipGraphics (nativeObject, g.NativeObject, combineMode);
1680 GDIPlus.CheckStatus (status);
1684 public void SetClip (Rectangle rect, CombineMode combineMode)
1686 Status status = GDIPlus.GdipSetClipRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, combineMode);
1687 GDIPlus.CheckStatus (status);
1691 public void SetClip (RectangleF rect, CombineMode combineMode)
1693 Status status = GDIPlus.GdipSetClipRect (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, combineMode);
1694 GDIPlus.CheckStatus (status);
1698 public void SetClip (Region region, CombineMode combineMode)
1700 Status status = GDIPlus.GdipSetClipRegion(nativeObject, region.NativeObject, combineMode);
1701 GDIPlus.CheckStatus (status);
1705 public void SetClip (GraphicsPath path, CombineMode combineMode)
1707 Status status = GDIPlus.GdipSetClipPath (nativeObject, path.NativeObject, combineMode);
1708 GDIPlus.CheckStatus (status);
1712 public void TransformPoints (CoordinateSpace destSpace, CoordinateSpace srcSpace, PointF [] pts)
1714 IntPtr ptrPt = GDIPlus.FromPointToUnManagedMemory (pts);
1716 Status status = GDIPlus.GdipTransformPoints (nativeObject, destSpace, srcSpace, ptrPt, pts.Length);
1717 GDIPlus.CheckStatus (status);
1719 GDIPlus.FromUnManagedMemoryToPoint (ptrPt, pts);
1723 public void TransformPoints (CoordinateSpace destSpace, CoordinateSpace srcSpace, Point [] pts)
1725 IntPtr ptrPt = GDIPlus.FromPointToUnManagedMemoryI (pts);
1727 Status status = GDIPlus.GdipTransformPointsI (nativeObject, destSpace, srcSpace, ptrPt, pts.Length);
1728 GDIPlus.CheckStatus (status);
1730 GDIPlus.FromUnManagedMemoryToPointI (ptrPt, pts);
1734 public void TranslateClip (int dx, int dy)
1736 Status status = GDIPlus.GdipTranslateClipI (nativeObject, dx, dy);
1737 GDIPlus.CheckStatus (status);
1741 public void TranslateClip (float dx, float dy)
1743 Status status = GDIPlus.GdipTranslateClip (nativeObject, dx, dy);
1744 GDIPlus.CheckStatus (status);
1747 public void TranslateTransform (float dx, float dy)
1749 TranslateTransform (dx, dy, MatrixOrder.Prepend);
1753 public void TranslateTransform (float dx, float dy, MatrixOrder order)
1755 Status status = GDIPlus.GdipTranslateWorldTransform (nativeObject, dx, dy, order);
1756 GDIPlus.CheckStatus (status);
1759 public Region Clip {
1761 Region reg = new Region();
1762 Status status = GDIPlus.GdipGetClip (nativeObject, reg.NativeObject);
1763 GDIPlus.CheckStatus (status);
1767 SetClip (value, CombineMode.Replace);
1771 public RectangleF ClipBounds {
1773 RectangleF rect = new RectangleF ();
1774 Status status = GDIPlus.GdipGetClipBounds (nativeObject, out rect);
1775 GDIPlus.CheckStatus (status);
1780 public CompositingMode CompositingMode {
1782 CompositingMode mode;
1783 Status status = GDIPlus.GdipGetCompositingMode (nativeObject, out mode);
1784 GDIPlus.CheckStatus (status);
1789 Status status = GDIPlus.GdipSetCompositingMode (nativeObject, value);
1790 GDIPlus.CheckStatus (status);
1795 public CompositingQuality CompositingQuality {
1797 CompositingQuality quality;
1799 Status status = GDIPlus.GdipGetCompositingQuality (nativeObject, out quality);
1800 GDIPlus.CheckStatus (status);
1804 Status status = GDIPlus.GdipSetCompositingQuality (nativeObject, value);
1805 GDIPlus.CheckStatus (status);
1813 Status status = GDIPlus.GdipGetDpiX (nativeObject, out x);
1814 GDIPlus.CheckStatus (status);
1823 Status status = GDIPlus.GdipGetDpiY (nativeObject, out y);
1824 GDIPlus.CheckStatus (status);
1829 public InterpolationMode InterpolationMode {
1831 InterpolationMode imode = InterpolationMode.Invalid;
1832 Status status = GDIPlus.GdipGetInterpolationMode (nativeObject, out imode);
1833 GDIPlus.CheckStatus (status);
1837 Status status = GDIPlus.GdipSetInterpolationMode (nativeObject, value);
1838 GDIPlus.CheckStatus (status);
1842 public bool IsClipEmpty {
1844 bool isEmpty = false;
1846 Status status = GDIPlus.GdipIsClipEmpty (nativeObject, out isEmpty);
1847 GDIPlus.CheckStatus (status);
1852 public bool IsVisibleClipEmpty {
1854 bool isEmpty = false;
1856 Status status = GDIPlus.GdipIsVisibleClipEmpty (nativeObject, out isEmpty);
1857 GDIPlus.CheckStatus (status);
1862 public float PageScale {
1866 Status status = GDIPlus.GdipGetPageScale (nativeObject, out scale);
1867 GDIPlus.CheckStatus (status);
1871 Status status = GDIPlus.GdipSetPageScale (nativeObject, value);
1872 GDIPlus.CheckStatus (status);
1876 public GraphicsUnit PageUnit {
1880 Status status = GDIPlus.GdipGetPageUnit (nativeObject, out unit);
1881 GDIPlus.CheckStatus (status);
1885 Status status = GDIPlus.GdipSetPageUnit (nativeObject, value);
1886 GDIPlus.CheckStatus (status);
1890 public PixelOffsetMode PixelOffsetMode {
1892 PixelOffsetMode pixelOffset = PixelOffsetMode.Invalid;
1894 Status status = GDIPlus.GdipGetPixelOffsetMode (nativeObject, out pixelOffset);
1895 GDIPlus.CheckStatus (status);
1899 Status status = GDIPlus.GdipSetPixelOffsetMode (nativeObject, value);
1900 GDIPlus.CheckStatus (status);
1904 public Point RenderingOrigin {
1907 Status status = GDIPlus.GdipGetRenderingOrigin (nativeObject, out x, out y);
1908 GDIPlus.CheckStatus (status);
1909 return new Point (x, y);
1913 Status status = GDIPlus.GdipSetRenderingOrigin (nativeObject, value.X, value.Y);
1914 GDIPlus.CheckStatus (status);
1918 public SmoothingMode SmoothingMode {
1920 SmoothingMode mode = SmoothingMode.Invalid;
1922 Status status = GDIPlus.GdipGetSmoothingMode (nativeObject, out mode);
1923 GDIPlus.CheckStatus (status);
1928 Status status = GDIPlus.GdipSetSmoothingMode (nativeObject, value);
1929 GDIPlus.CheckStatus (status);
1933 public int TextContrast {
1937 Status status = GDIPlus.GdipGetTextContrast (nativeObject, out contrast);
1938 GDIPlus.CheckStatus (status);
1943 Status status = GDIPlus.GdipSetTextContrast (nativeObject, value);
1944 GDIPlus.CheckStatus (status);
1948 public TextRenderingHint TextRenderingHint {
1950 TextRenderingHint hint;
1952 Status status = GDIPlus.GdipGetTextRenderingHint (nativeObject, out hint);
1953 GDIPlus.CheckStatus (status);
1958 Status status = GDIPlus.GdipSetTextRenderingHint (nativeObject, value);
1959 GDIPlus.CheckStatus (status);
1963 public Matrix Transform {
1965 Matrix matrix = new Matrix ();
1966 Status status = GDIPlus.GdipGetWorldTransform (nativeObject, matrix.nativeMatrix);
1967 GDIPlus.CheckStatus (status);
1971 Status status = GDIPlus.GdipSetWorldTransform (nativeObject, value.nativeMatrix);
1972 GDIPlus.CheckStatus (status);
1976 public RectangleF VisibleClipBounds {
1980 Status status = GDIPlus.GdipGetVisibleClipBounds (nativeObject, out rect);
1981 GDIPlus.CheckStatus (status);