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 DrawString (s, font, brush, layoutRectangle, null);
794 public void DrawString (string s, Font font, Brush brush, PointF point)
796 DrawString (s, font, brush, new RectangleF (point.X, point.Y, 0, 0), null);
799 public void DrawString (string s, Font font, Brush brush, PointF point, StringFormat format)
801 DrawString(s, font, brush, new RectangleF(point.X, point.Y, 0, 0), format);
804 public void DrawString (string s, Font font, Brush brush, float x, float y)
806 DrawString (s, font, brush, new RectangleF (x, y, 0, 0), null);
809 public void DrawString (string s, Font font, Brush brush, float x, float y, StringFormat format)
811 DrawString (s, font, brush, new RectangleF(x, y, 0, 0), format);
814 public void DrawString (string s, Font font, Brush brush, RectangleF layoutRectangle, StringFormat format)
817 throw new ArgumentNullException ("font");
819 throw new ArgumentNullException ("brush");
820 if (s == null || s.Length == 0)
823 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject, ref layoutRectangle, format != null ? format.NativeObject : IntPtr.Zero, brush.nativeObject);
824 GDIPlus.CheckStatus (status);
827 public void EndContainer (GraphicsContainer container)
829 Status status = GDIPlus.GdipEndContainer(nativeObject, container.NativeObject);
830 GDIPlus.CheckStatus (status);
834 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, EnumerateMetafileProc callback)
836 throw new NotImplementedException ();
840 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, EnumerateMetafileProc callback)
842 throw new NotImplementedException ();
846 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, EnumerateMetafileProc callback)
848 throw new NotImplementedException ();
852 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, EnumerateMetafileProc callback)
854 throw new NotImplementedException ();
858 public void EnumerateMetafile (Metafile metafile, Point destPoint, EnumerateMetafileProc callback)
860 throw new NotImplementedException ();
864 public void EnumerateMetafile (Metafile metafile, PointF destPoint, EnumerateMetafileProc callback)
866 throw new NotImplementedException ();
870 public void EnumerateMetafile (Metafile metafile, PointF destPoint, EnumerateMetafileProc callback, IntPtr callbackData)
872 throw new NotImplementedException ();
876 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, EnumerateMetafileProc callback, IntPtr callbackData)
878 throw new NotImplementedException ();
882 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData)
884 throw new NotImplementedException ();
888 public void EnumerateMetafile (Metafile metafile, Point destPoint, EnumerateMetafileProc callback, IntPtr callbackData)
890 throw new NotImplementedException ();
894 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData)
896 throw new NotImplementedException ();
900 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, EnumerateMetafileProc callback, IntPtr callbackData)
902 throw new NotImplementedException ();
906 public void EnumerateMetafile (Metafile metafile, PointF destPoint, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
908 throw new NotImplementedException ();
912 public void EnumerateMetafile (Metafile metafile, Point destPoint, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
914 throw new NotImplementedException ();
918 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
920 throw new NotImplementedException ();
924 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
926 throw new NotImplementedException ();
930 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
932 throw new NotImplementedException ();
936 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
938 throw new NotImplementedException ();
942 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
944 throw new NotImplementedException ();
948 public void EnumerateMetafile (Metafile metafile, Point destPoint, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
950 throw new NotImplementedException ();
954 public void EnumerateMetafile (Metafile metafile, PointF destPoint, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
956 throw new NotImplementedException ();
960 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
962 throw new NotImplementedException ();
966 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
968 throw new NotImplementedException ();
972 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
974 throw new NotImplementedException ();
978 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
980 throw new NotImplementedException ();
984 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
986 throw new NotImplementedException ();
990 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
992 throw new NotImplementedException ();
996 public void EnumerateMetafile (Metafile metafile, PointF destPoint, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
998 throw new NotImplementedException ();
1002 public void EnumerateMetafile (Metafile metafile, Point destPoint, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
1004 throw new NotImplementedException ();
1008 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
1010 throw new NotImplementedException ();
1014 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, Rectangle srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1016 throw new NotImplementedException ();
1020 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, Rectangle srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1022 throw new NotImplementedException ();
1026 public void EnumerateMetafile (Metafile metafile, Point destPoint, Rectangle srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1028 throw new NotImplementedException ();
1032 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, RectangleF srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1034 throw new NotImplementedException ();
1038 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, RectangleF srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1040 throw new NotImplementedException ();
1044 public void EnumerateMetafile (Metafile metafile, PointF destPoint, RectangleF srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1046 throw new NotImplementedException ();
1049 public void ExcludeClip (Rectangle rect)
1051 Status status = GDIPlus.GdipSetClipRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, CombineMode.Exclude);
1052 GDIPlus.CheckStatus (status);
1055 public void ExcludeClip (Region region)
1057 Status status = GDIPlus.GdipSetClipRegion (nativeObject, region.NativeObject, CombineMode.Exclude);
1058 GDIPlus.CheckStatus (status);
1062 public void FillClosedCurve (Brush brush, PointF [] points)
1064 Status status = GDIPlus.GdipFillClosedCurve (nativeObject, brush.NativeObject, points, points.Length);
1065 GDIPlus.CheckStatus (status);
1069 public void FillClosedCurve (Brush brush, Point [] points)
1071 Status status = GDIPlus.GdipFillClosedCurveI (nativeObject, brush.NativeObject, points, points.Length);
1072 GDIPlus.CheckStatus (status);
1076 public void FillClosedCurve (Brush brush, PointF [] points, FillMode fillmode)
1078 FillClosedCurve (brush, points, fillmode, 0.5f);
1081 public void FillClosedCurve (Brush brush, Point [] points, FillMode fillmode)
1083 FillClosedCurve (brush, points, fillmode, 0.5f);
1086 public void FillClosedCurve (Brush brush, PointF [] points, FillMode fillmode, float tension)
1088 Status status = GDIPlus.GdipFillClosedCurve2 (nativeObject, brush.NativeObject, points, points.Length, tension, fillmode);
1089 GDIPlus.CheckStatus (status);
1092 public void FillClosedCurve (Brush brush, Point [] points, FillMode fillmode, float tension)
1094 Status status = GDIPlus.GdipFillClosedCurve2I (nativeObject, brush.NativeObject, points, points.Length, tension, fillmode);
1095 GDIPlus.CheckStatus (status);
1098 public void FillEllipse (Brush brush, Rectangle rect)
1100 FillEllipse (brush, rect.X, rect.Y, rect.Width, rect.Height);
1103 public void FillEllipse (Brush brush, RectangleF rect)
1105 FillEllipse (brush, rect.X, rect.Y, rect.Width, rect.Height);
1108 public void FillEllipse (Brush brush, float x, float y, float width, float height)
1110 Status status = GDIPlus.GdipFillEllipse (nativeObject, brush.nativeObject, x, y, width, height);
1111 GDIPlus.CheckStatus (status);
1114 public void FillEllipse (Brush brush, int x, int y, int width, int height)
1116 Status status = GDIPlus.GdipFillEllipseI (nativeObject, brush.nativeObject, x, y, width, height);
1117 GDIPlus.CheckStatus (status);
1120 public void FillPath (Brush brush, GraphicsPath path)
1122 Status status = GDIPlus.GdipFillPath (nativeObject, brush.NativeObject, path.NativeObject);
1123 GDIPlus.CheckStatus (status);
1126 public void FillPie (Brush brush, Rectangle rect, float startAngle, float sweepAngle)
1128 Status status = GDIPlus.GdipFillPie (nativeObject, brush.NativeObject, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
1129 GDIPlus.CheckStatus (status);
1132 public void FillPie (Brush brush, int x, int y, int width, int height, int startAngle, int sweepAngle)
1134 Status status = GDIPlus.GdipFillPieI (nativeObject, brush.NativeObject, x, y, width, height, startAngle, sweepAngle);
1135 GDIPlus.CheckStatus (status);
1138 public void FillPie (Brush brush, float x, float y, float width, float height, float startAngle, float sweepAngle)
1140 Status status = GDIPlus.GdipFillPie (nativeObject, brush.NativeObject, x, y, width, height, startAngle, sweepAngle);
1141 GDIPlus.CheckStatus (status);
1144 public void FillPolygon (Brush brush, PointF [] points)
1146 Status status = GDIPlus.GdipFillPolygon2 (nativeObject, brush.nativeObject, points, points.Length);
1147 GDIPlus.CheckStatus (status);
1150 public void FillPolygon (Brush brush, Point [] points)
1152 Status status = GDIPlus.GdipFillPolygon2I (nativeObject, brush.nativeObject, points, points.Length);
1153 GDIPlus.CheckStatus (status);
1156 public void FillPolygon (Brush brush, Point [] points, FillMode fillMode)
1158 Status status = GDIPlus.GdipFillPolygonI (nativeObject, brush.nativeObject, points, points.Length, fillMode);
1159 GDIPlus.CheckStatus (status);
1162 public void FillPolygon (Brush brush, PointF [] points, FillMode fillMode)
1164 Status status = GDIPlus.GdipFillPolygon (nativeObject, brush.nativeObject, points, points.Length, fillMode);
1165 GDIPlus.CheckStatus (status);
1168 public void FillRectangle (Brush brush, RectangleF rect)
1170 FillRectangle (brush, rect.Left, rect.Top, rect.Width, rect.Height);
1173 public void FillRectangle (Brush brush, Rectangle rect)
1175 FillRectangle (brush, rect.Left, rect.Top, rect.Width, rect.Height);
1178 public void FillRectangle (Brush brush, int x, int y, int width, int height)
1180 Status status = GDIPlus.GdipFillRectangleI (nativeObject, brush.nativeObject, x, y, width, height);
1181 GDIPlus.CheckStatus (status);
1184 public void FillRectangle (Brush brush, float x, float y, float width, float height)
1186 Status status = GDIPlus.GdipFillRectangle (nativeObject, brush.nativeObject, x, y, width, height);
1187 GDIPlus.CheckStatus (status);
1190 public void FillRectangles (Brush brush, Rectangle [] rects)
1192 Status status = GDIPlus.GdipFillRectanglesI (nativeObject, brush.nativeObject, rects, rects.Length);
1193 GDIPlus.CheckStatus (status);
1196 public void FillRectangles (Brush brush, RectangleF [] rects)
1198 Status status = GDIPlus.GdipFillRectangles (nativeObject, brush.nativeObject, rects, rects.Length);
1199 GDIPlus.CheckStatus (status);
1203 public void FillRegion (Brush brush, Region region)
1205 Status status = GDIPlus.GdipFillRegion (nativeObject, brush.NativeObject, region.NativeObject);
1206 GDIPlus.CheckStatus(status);
1210 public void Flush ()
1212 Flush (FlushIntention.Flush);
1216 public void Flush (FlushIntention intention)
1218 Status status = GDIPlus.GdipFlush (nativeObject, intention);
1219 GDIPlus.CheckStatus (status);
1220 if (GDIPlus.UseQuartzDrawable)
1221 Carbon.CGContextSynchronize (GDIPlus.Display);
1224 [EditorBrowsable (EditorBrowsableState.Advanced)]
1225 public static Graphics FromHdc (IntPtr hdc)
1228 Status status = GDIPlus.GdipCreateFromHDC (hdc, out graphics);
1229 GDIPlus.CheckStatus (status);
1230 return new Graphics (graphics);
1234 [EditorBrowsable (EditorBrowsableState.Advanced)]
1235 public static Graphics FromHdc (IntPtr hdc, IntPtr hdevice)
1237 throw new NotImplementedException ();
1240 [EditorBrowsable (EditorBrowsableState.Advanced)]
1241 public static Graphics FromHdcInternal (IntPtr hdc)
1243 GDIPlus.Display = hdc;
1247 [EditorBrowsable (EditorBrowsableState.Advanced)]
1248 public static Graphics FromHwnd (IntPtr hwnd)
1252 if (GDIPlus.UseQuartzDrawable) {
1253 CarbonContext cgContext = Carbon.GetCGContextForView (hwnd);
1254 GDIPlus.GdipCreateFromQuartz_macosx (cgContext.ctx, cgContext.width, cgContext.height, out graphics);
1256 GDIPlus.Display = cgContext.ctx;
1257 return new Graphics (graphics);
1259 if (GDIPlus.UseX11Drawable) {
1260 if (GDIPlus.Display == IntPtr.Zero) {
1261 GDIPlus.Display = GDIPlus.XOpenDisplay (IntPtr.Zero);
1264 return FromXDrawable (hwnd, GDIPlus.Display);
1268 Status status = GDIPlus.GdipCreateFromHWND (hwnd, out graphics);
1269 GDIPlus.CheckStatus (status);
1271 return new Graphics (graphics);
1274 [EditorBrowsable (EditorBrowsableState.Advanced)]
1275 public static Graphics FromHwndInternal (IntPtr hwnd)
1277 return FromHwnd (hwnd);
1280 public static Graphics FromImage (Image image)
1284 if (image == null) throw new ArgumentException ();
1286 if ((image.PixelFormat & PixelFormat.Indexed) != PixelFormat.Undefined) {
\r
1287 // And MS ignores its own rules again
\r
1288 throw new Exception ("A Graphics object cannot be created from an image that has an indexed pixel format");
\r
1291 Status status = GDIPlus.GdipGetImageGraphicsContext (image.nativeObject, out graphics);
1292 GDIPlus.CheckStatus (status);
1293 Graphics result = new Graphics (graphics);
1295 // check for Unix platforms - see FAQ for more details
1296 // http://www.mono-project.com/FAQ:_Technical#How_to_detect_the_execution_platform_.3F
1297 int platform = (int) Environment.OSVersion.Platform;
1298 if ((platform == 4) || (platform == 128)) {
1299 Rectangle rect = new Rectangle (0,0, image.Width, image.Height);
1300 GDIPlus.GdipSetVisibleClip_linux (result.NativeObject, ref rect);
1306 internal static Graphics FromXDrawable (IntPtr drawable, IntPtr display)
1310 Status s = GDIPlus.GdipCreateFromXDrawable_linux (drawable, display, out graphics);
1311 GDIPlus.CheckStatus (s);
1312 return new Graphics (graphics);
1316 public static IntPtr GetHalftonePalette ()
1318 throw new NotImplementedException ();
1321 [EditorBrowsable (EditorBrowsableState.Advanced)]
1322 public IntPtr GetHdc ()
1325 GDIPlus.CheckStatus (GDIPlus.GdipGetDC (this.nativeObject, out hdc));
1330 public Color GetNearestColor (Color color)
1334 Status status = GDIPlus.GdipGetNearestColor (nativeObject, out argb);
1335 GDIPlus.CheckStatus (status);
1337 return Color.FromArgb (argb);
1341 public void IntersectClip (Region region)
1343 Status status = GDIPlus.GdipSetClipRegion (nativeObject, region.NativeObject, CombineMode.Intersect);
1344 GDIPlus.CheckStatus (status);
1347 public void IntersectClip (RectangleF rect)
1349 Status status = GDIPlus.GdipSetClipRect (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, CombineMode.Intersect);
1350 GDIPlus.CheckStatus (status);
1353 public void IntersectClip (Rectangle rect)
1355 Status status = GDIPlus.GdipSetClipRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, CombineMode.Intersect);
1356 GDIPlus.CheckStatus (status);
1359 public bool IsVisible (Point point)
1361 bool isVisible = false;
1363 Status status = GDIPlus.GdipIsVisiblePointI (nativeObject, point.X, point.Y, out isVisible);
1364 GDIPlus.CheckStatus (status);
1370 public bool IsVisible (RectangleF rect)
1372 bool isVisible = false;
1374 Status status = GDIPlus.GdipIsVisibleRect (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, out isVisible);
1375 GDIPlus.CheckStatus (status);
1380 public bool IsVisible (PointF point)
1382 bool isVisible = false;
1384 Status status = GDIPlus.GdipIsVisiblePoint (nativeObject, point.X, point.Y, out isVisible);
1385 GDIPlus.CheckStatus (status);
1390 public bool IsVisible (Rectangle rect)
1392 bool isVisible = false;
1394 Status status = GDIPlus.GdipIsVisibleRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, out isVisible);
1395 GDIPlus.CheckStatus (status);
1400 public bool IsVisible (float x, float y)
1402 return IsVisible (new PointF (x, y));
1405 public bool IsVisible (int x, int y)
1407 return IsVisible (new Point (x, y));
1410 public bool IsVisible (float x, float y, float width, float height)
1412 return IsVisible (new RectangleF (x, y, width, height));
1416 public bool IsVisible (int x, int y, int width, int height)
1418 return IsVisible (new Rectangle (x, y, width, height));
1422 public Region [] MeasureCharacterRanges (string text, Font font, RectangleF layoutRect, StringFormat stringFormat)
1425 int regcount = stringFormat.GetMeasurableCharacterRangeCount ();
1426 IntPtr[] native_regions = new IntPtr [regcount];
1427 Region[] regions = new Region [regcount];
1429 for (int i = 0; i < regcount; i++) {
1430 regions[i] = new Region ();
1431 native_regions[i] = regions[i].NativeObject;
1434 status = GDIPlus.GdipMeasureCharacterRanges (nativeObject, text, text.Length,
1435 font.NativeObject, ref layoutRect, stringFormat.NativeObject,
1436 regcount, out native_regions[0]);
1438 GDIPlus.CheckStatus (status);
1444 public SizeF MeasureString (string text, Font font)
1446 return MeasureString (text, font, new Size (0, 0));
1450 public SizeF MeasureString (string text, Font font, SizeF layoutArea)
1452 int charactersFitted, linesFilled;
1453 RectangleF boundingBox = new RectangleF ();
1454 RectangleF rect = new RectangleF (0, 0, layoutArea.Width,
1457 if (text == null || text.Length == 0)
1461 throw new ArgumentNullException ("font");
1463 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1464 font.NativeObject, ref rect,
1465 IntPtr.Zero, out boundingBox,
1466 out charactersFitted, out linesFilled);
1467 GDIPlus.CheckStatus (status);
1469 return new SizeF (boundingBox.Width, boundingBox.Height);
1473 public SizeF MeasureString (string text, Font font, int width)
1475 RectangleF boundingBox = new RectangleF ();
1476 RectangleF rect = new RectangleF (0, 0, width, 999999);
1477 int charactersFitted, linesFilled;
1479 if (text == null || text.Length == 0)
1483 throw new ArgumentNullException ("font");
1485 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1486 font.NativeObject, ref rect,
1487 IntPtr.Zero, out boundingBox,
1488 out charactersFitted, out linesFilled);
1489 GDIPlus.CheckStatus (status);
1491 return new SizeF (boundingBox.Width, boundingBox.Height);
1495 public SizeF MeasureString (string text, Font font, SizeF layoutArea,
1496 StringFormat stringFormat)
1498 int charactersFitted, linesFilled;
1499 return MeasureString (text, font, layoutArea, stringFormat,
1500 out charactersFitted, out linesFilled);
1504 public SizeF MeasureString (string text, Font font, int width, StringFormat format)
1506 int charactersFitted, linesFilled;
1507 return MeasureString (text, font, new SizeF (width, 999999),
1508 format, out charactersFitted, out linesFilled);
1512 public SizeF MeasureString (string text, Font font, PointF origin,
1513 StringFormat stringFormat)
1515 RectangleF boundingBox = new RectangleF ();
1516 RectangleF rect = new RectangleF (origin.X, origin.Y, 0, 0);
1517 int charactersFitted, linesFilled;
1519 if (text == null || text.Length == 0)
1523 throw new ArgumentNullException ("font");
1525 if (stringFormat == null)
1526 stringFormat = new StringFormat ();
1528 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1529 font.NativeObject, ref rect,
1530 stringFormat.NativeObject,
1532 out charactersFitted,
1534 GDIPlus.CheckStatus (status);
1536 return new SizeF (boundingBox.Width, boundingBox.Height);
1540 public SizeF MeasureString (string text, Font font, SizeF layoutArea,
1541 StringFormat stringFormat, out int charactersFitted,
1542 out int linesFilled)
1544 RectangleF boundingBox = new RectangleF ();
1545 RectangleF rect = new RectangleF (0, 0, layoutArea.Width, layoutArea.Height);
1546 charactersFitted = 0;
1549 if (text == null || text.Length == 0)
1553 throw new ArgumentNullException ("font");
1555 if (stringFormat == null)
1556 stringFormat = new StringFormat ();
1558 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1559 font.NativeObject, ref rect,
1560 stringFormat.NativeObject,
1562 out charactersFitted,
1564 GDIPlus.CheckStatus (status);
1566 return new SizeF (boundingBox.Width, boundingBox.Height);
1569 public void MultiplyTransform (Matrix matrix)
1571 MultiplyTransform (matrix, MatrixOrder.Prepend);
1574 public void MultiplyTransform (Matrix matrix, MatrixOrder order)
1576 Status status = GDIPlus.GdipMultiplyWorldTransform (nativeObject,
1577 matrix.nativeMatrix,
1579 GDIPlus.CheckStatus (status);
1582 [EditorBrowsable (EditorBrowsableState.Advanced)]
1583 public void ReleaseHdc (IntPtr hdc)
1585 Status status = GDIPlus.GdipReleaseDC (nativeObject, hdc);
1586 GDIPlus.CheckStatus (status);
1590 [EditorBrowsable (EditorBrowsableState.Advanced)]
1591 public void ReleaseHdcInternal (IntPtr hdc)
1593 throw new NotImplementedException ();
1597 public void ResetClip ()
1599 Status status = GDIPlus.GdipResetClip (nativeObject);
1600 GDIPlus.CheckStatus (status);
1603 public void ResetTransform ()
1605 Status status = GDIPlus.GdipResetWorldTransform (nativeObject);
1606 GDIPlus.CheckStatus (status);
1609 public void Restore (GraphicsState gstate)
1611 Status status = GDIPlus.GdipRestoreGraphics (nativeObject, gstate.nativeState);
1612 GDIPlus.CheckStatus (status);
1616 public void RotateTransform (float angle)
1618 RotateTransform (angle, MatrixOrder.Prepend);
1621 public void RotateTransform (float angle, MatrixOrder order)
1624 Status status = GDIPlus.GdipRotateWorldTransform (nativeObject, angle, order);
1625 GDIPlus.CheckStatus (status);
1628 public GraphicsState Save ()
1631 Status status = GDIPlus.GdipSaveGraphics (nativeObject, out saveState);
1632 GDIPlus.CheckStatus (status);
1634 GraphicsState state = new GraphicsState ();
1635 state.nativeState = saveState;
1639 public void ScaleTransform (float sx, float sy)
1641 ScaleTransform (sx, sy, MatrixOrder.Prepend);
1644 public void ScaleTransform (float sx, float sy, MatrixOrder order)
1646 Status status = GDIPlus.GdipScaleWorldTransform (nativeObject, sx, sy, order);
1647 GDIPlus.CheckStatus (status);
1651 public void SetClip (RectangleF rect)
1653 SetClip (rect, CombineMode.Replace);
1657 public void SetClip (GraphicsPath path)
1659 SetClip (path, CombineMode.Replace);
1663 public void SetClip (Rectangle rect)
1665 SetClip (rect, CombineMode.Replace);
1669 public void SetClip (Graphics g)
1671 SetClip (g, CombineMode.Replace);
1675 public void SetClip (Graphics g, CombineMode combineMode)
1677 Status status = GDIPlus.GdipSetClipGraphics (nativeObject, g.NativeObject, combineMode);
1678 GDIPlus.CheckStatus (status);
1682 public void SetClip (Rectangle rect, CombineMode combineMode)
1684 Status status = GDIPlus.GdipSetClipRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, combineMode);
1685 GDIPlus.CheckStatus (status);
1689 public void SetClip (RectangleF rect, CombineMode combineMode)
1691 Status status = GDIPlus.GdipSetClipRect (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, combineMode);
1692 GDIPlus.CheckStatus (status);
1696 public void SetClip (Region region, CombineMode combineMode)
1698 Status status = GDIPlus.GdipSetClipRegion(nativeObject, region.NativeObject, combineMode);
1699 GDIPlus.CheckStatus (status);
1703 public void SetClip (GraphicsPath path, CombineMode combineMode)
1705 Status status = GDIPlus.GdipSetClipPath (nativeObject, path.NativeObject, combineMode);
1706 GDIPlus.CheckStatus (status);
1710 public void TransformPoints (CoordinateSpace destSpace, CoordinateSpace srcSpace, PointF [] pts)
1712 IntPtr ptrPt = GDIPlus.FromPointToUnManagedMemory (pts);
1714 Status status = GDIPlus.GdipTransformPoints (nativeObject, destSpace, srcSpace, ptrPt, pts.Length);
1715 GDIPlus.CheckStatus (status);
1717 GDIPlus.FromUnManagedMemoryToPoint (ptrPt, pts);
1721 public void TransformPoints (CoordinateSpace destSpace, CoordinateSpace srcSpace, Point [] pts)
1723 IntPtr ptrPt = GDIPlus.FromPointToUnManagedMemoryI (pts);
1725 Status status = GDIPlus.GdipTransformPointsI (nativeObject, destSpace, srcSpace, ptrPt, pts.Length);
1726 GDIPlus.CheckStatus (status);
1728 GDIPlus.FromUnManagedMemoryToPointI (ptrPt, pts);
1732 public void TranslateClip (int dx, int dy)
1734 Status status = GDIPlus.GdipTranslateClipI (nativeObject, dx, dy);
1735 GDIPlus.CheckStatus (status);
1739 public void TranslateClip (float dx, float dy)
1741 Status status = GDIPlus.GdipTranslateClip (nativeObject, dx, dy);
1742 GDIPlus.CheckStatus (status);
1745 public void TranslateTransform (float dx, float dy)
1747 TranslateTransform (dx, dy, MatrixOrder.Prepend);
1751 public void TranslateTransform (float dx, float dy, MatrixOrder order)
1753 Status status = GDIPlus.GdipTranslateWorldTransform (nativeObject, dx, dy, order);
1754 GDIPlus.CheckStatus (status);
1757 public Region Clip {
1759 Region reg = new Region();
1760 Status status = GDIPlus.GdipGetClip (nativeObject, reg.NativeObject);
1761 GDIPlus.CheckStatus (status);
1765 SetClip (value, CombineMode.Replace);
1769 public RectangleF ClipBounds {
1771 RectangleF rect = new RectangleF ();
1772 Status status = GDIPlus.GdipGetClipBounds (nativeObject, out rect);
1773 GDIPlus.CheckStatus (status);
1778 public CompositingMode CompositingMode {
1780 CompositingMode mode;
1781 Status status = GDIPlus.GdipGetCompositingMode (nativeObject, out mode);
1782 GDIPlus.CheckStatus (status);
1787 Status status = GDIPlus.GdipSetCompositingMode (nativeObject, value);
1788 GDIPlus.CheckStatus (status);
1793 public CompositingQuality CompositingQuality {
1795 CompositingQuality quality;
1797 Status status = GDIPlus.GdipGetCompositingQuality (nativeObject, out quality);
1798 GDIPlus.CheckStatus (status);
1802 Status status = GDIPlus.GdipSetCompositingQuality (nativeObject, value);
1803 GDIPlus.CheckStatus (status);
1811 Status status = GDIPlus.GdipGetDpiX (nativeObject, out x);
1812 GDIPlus.CheckStatus (status);
1821 Status status = GDIPlus.GdipGetDpiY (nativeObject, out y);
1822 GDIPlus.CheckStatus (status);
1827 public InterpolationMode InterpolationMode {
1829 InterpolationMode imode = InterpolationMode.Invalid;
1830 Status status = GDIPlus.GdipGetInterpolationMode (nativeObject, out imode);
1831 GDIPlus.CheckStatus (status);
1835 Status status = GDIPlus.GdipSetInterpolationMode (nativeObject, value);
1836 GDIPlus.CheckStatus (status);
1840 public bool IsClipEmpty {
1842 bool isEmpty = false;
1844 Status status = GDIPlus.GdipIsClipEmpty (nativeObject, out isEmpty);
1845 GDIPlus.CheckStatus (status);
1850 public bool IsVisibleClipEmpty {
1852 bool isEmpty = false;
1854 Status status = GDIPlus.GdipIsVisibleClipEmpty (nativeObject, out isEmpty);
1855 GDIPlus.CheckStatus (status);
1860 public float PageScale {
1864 Status status = GDIPlus.GdipGetPageScale (nativeObject, out scale);
1865 GDIPlus.CheckStatus (status);
1869 Status status = GDIPlus.GdipSetPageScale (nativeObject, value);
1870 GDIPlus.CheckStatus (status);
1874 public GraphicsUnit PageUnit {
1878 Status status = GDIPlus.GdipGetPageUnit (nativeObject, out unit);
1879 GDIPlus.CheckStatus (status);
1883 Status status = GDIPlus.GdipSetPageUnit (nativeObject, value);
1884 GDIPlus.CheckStatus (status);
1888 public PixelOffsetMode PixelOffsetMode {
1890 PixelOffsetMode pixelOffset = PixelOffsetMode.Invalid;
1892 Status status = GDIPlus.GdipGetPixelOffsetMode (nativeObject, out pixelOffset);
1893 GDIPlus.CheckStatus (status);
1897 Status status = GDIPlus.GdipSetPixelOffsetMode (nativeObject, value);
1898 GDIPlus.CheckStatus (status);
1902 public Point RenderingOrigin {
1905 Status status = GDIPlus.GdipGetRenderingOrigin (nativeObject, out x, out y);
1906 GDIPlus.CheckStatus (status);
1907 return new Point (x, y);
1911 Status status = GDIPlus.GdipSetRenderingOrigin (nativeObject, value.X, value.Y);
1912 GDIPlus.CheckStatus (status);
1916 public SmoothingMode SmoothingMode {
1918 SmoothingMode mode = SmoothingMode.Invalid;
1920 Status status = GDIPlus.GdipGetSmoothingMode (nativeObject, out mode);
1921 GDIPlus.CheckStatus (status);
1926 Status status = GDIPlus.GdipSetSmoothingMode (nativeObject, value);
1927 GDIPlus.CheckStatus (status);
1931 public int TextContrast {
1935 Status status = GDIPlus.GdipGetTextContrast (nativeObject, out contrast);
1936 GDIPlus.CheckStatus (status);
1941 Status status = GDIPlus.GdipSetTextContrast (nativeObject, value);
1942 GDIPlus.CheckStatus (status);
1946 public TextRenderingHint TextRenderingHint {
1948 TextRenderingHint hint;
1950 Status status = GDIPlus.GdipGetTextRenderingHint (nativeObject, out hint);
1951 GDIPlus.CheckStatus (status);
1956 Status status = GDIPlus.GdipSetTextRenderingHint (nativeObject, value);
1957 GDIPlus.CheckStatus (status);
1961 public Matrix Transform {
1963 Matrix matrix = new Matrix ();
1964 Status status = GDIPlus.GdipGetWorldTransform (nativeObject, matrix.nativeMatrix);
1965 GDIPlus.CheckStatus (status);
1969 Status status = GDIPlus.GdipSetWorldTransform (nativeObject, value.nativeMatrix);
1970 GDIPlus.CheckStatus (status);
1974 public RectangleF VisibleClipBounds {
1978 Status status = GDIPlus.GdipGetVisibleClipBounds (nativeObject, out rect);
1979 GDIPlus.CheckStatus (status);