2 // System.Drawing.Graphics.cs
4 // (C) 2003 Ximian, Inc. http://www.ximian.com
7 // Gonzalo Paniagua Javier (gonzalo@ximian.com) (stubbed out)
8 // Alexandre Pigolkine(pigolkine@gmx.de)
9 // Jordi Mas i Hernandez (jordi@ximian.com)
13 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
15 // Permission is hereby granted, free of charge, to any person obtaining
16 // a copy of this software and associated documentation files (the
17 // "Software"), to deal in the Software without restriction, including
18 // without limitation the rights to use, copy, modify, merge, publish,
19 // distribute, sublicense, and/or sell copies of the Software, and to
20 // permit persons to whom the Software is furnished to do so, subject to
21 // the following conditions:
23 // The above copyright notice and this permission notice shall be
24 // included in all copies or substantial portions of the Software.
26 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
27 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
29 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
30 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
31 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
32 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35 using System.Drawing.Drawing2D;
36 using System.Drawing.Imaging;
37 using System.Drawing.Text;
38 using System.ComponentModel;
39 using System.Runtime.InteropServices;
42 namespace System.Drawing
45 public sealed class Graphics : MarshalByRefObject, IDisposable
47 internal IntPtr nativeObject = IntPtr.Zero;
48 private bool disposed = false;
49 private static float defDpiX = 0;
50 private static float defDpiY = 0;
53 public delegate bool EnumerateMetafileProc (EmfPlusRecordType recordType,
57 PlayRecordCallback callbackData);
60 public delegate bool DrawImageAbort (IntPtr callbackData);
62 private Graphics (IntPtr nativeGraphics)
64 nativeObject = nativeGraphics;
72 static internal float systemDpiX {
75 Bitmap bmp = new Bitmap(1,1);
76 Graphics g = Graphics.FromImage(bmp);
83 static internal float systemDpiY {
86 Bitmap bmp = new Bitmap(1,1);
87 Graphics g = Graphics.FromImage(bmp);
94 internal IntPtr NativeObject {
100 nativeObject = value;
105 public void AddMetafileComment (byte [] data)
107 throw new NotImplementedException ();
111 public GraphicsContainer BeginContainer ()
115 status = GDIPlus.GdipBeginContainer2 (nativeObject, out state);
116 GDIPlus.CheckStatus (status);
118 return new GraphicsContainer(state);
121 public GraphicsContainer BeginContainer (Rectangle dstrect, Rectangle srcrect, GraphicsUnit unit)
125 status = GDIPlus.GdipBeginContainerI (nativeObject, dstrect, srcrect, unit, out state);
126 GDIPlus.CheckStatus (status);
128 return new GraphicsContainer (state);
132 public GraphicsContainer BeginContainer (RectangleF dstrect, RectangleF srcrect, GraphicsUnit unit)
136 status = GDIPlus.GdipBeginContainer (nativeObject, dstrect, srcrect, unit, out state);
137 GDIPlus.CheckStatus (status);
139 return new GraphicsContainer (state);
143 public void Clear (Color color)
146 status = GDIPlus.GdipGraphicsClear (nativeObject, color.ToArgb ()); GDIPlus.CheckStatus (status);
149 public void Dispose ()
155 status = GDIPlus.GdipDeleteGraphics (nativeObject);
156 GDIPlus.CheckStatus (status);
163 public void DrawArc (Pen pen, Rectangle rect, float startAngle, float sweepAngle)
165 DrawArc (pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
169 public void DrawArc (Pen pen, RectangleF rect, float startAngle, float sweepAngle)
171 DrawArc (pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
175 public void DrawArc (Pen pen, float x, float y, float width, float height, float startAngle, float sweepAngle)
178 status = GDIPlus.GdipDrawArc (nativeObject, pen.nativeObject,
179 x, y, width, height, startAngle, sweepAngle);
180 GDIPlus.CheckStatus (status);
183 // Microsoft documentation states that the signature for this member should be
184 // public void DrawArc( Pen pen, int x, int y, int width, int height, int startAngle,
185 // int sweepAngle. However, GdipDrawArcI uses also float for the startAngle and sweepAngle params
186 public void DrawArc (Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle)
189 status = GDIPlus.GdipDrawArcI (nativeObject, pen.nativeObject,
190 x, y, width, height, startAngle, sweepAngle);
191 GDIPlus.CheckStatus (status);
194 public void DrawBezier (Pen pen, PointF pt1, PointF pt2, PointF pt3, PointF pt4)
197 status = GDIPlus.GdipDrawBezier (nativeObject, pen.nativeObject,
198 pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X,
199 pt3.Y, pt4.X, pt4.Y);
200 GDIPlus.CheckStatus (status);
203 public void DrawBezier (Pen pen, Point pt1, Point pt2, Point pt3, Point pt4)
206 status = GDIPlus.GdipDrawBezierI (nativeObject, pen.nativeObject,
207 pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X,
208 pt3.Y, pt4.X, pt4.Y);
209 GDIPlus.CheckStatus (status);
212 public void DrawBezier (Pen pen, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4)
215 status = GDIPlus.GdipDrawBezier (nativeObject, pen.nativeObject, x1,
216 y1, x2, y2, x3, y3, x4, y4);
217 GDIPlus.CheckStatus (status);
220 public void DrawBeziers (Pen pen, Point [] points)
222 int length = points.Length;
228 for (int i = 0; i < length; i += 3) {
229 Point p1 = points [i];
230 Point p2 = points [i + 1];
231 Point p3 = points [i + 2];
232 Point p4 = points [i + 3];
234 status = GDIPlus.GdipDrawBezier (nativeObject,
236 p1.X, p1.Y, p2.X, p2.Y,
237 p3.X, p3.Y, p4.X, p4.Y);
238 GDIPlus.CheckStatus (status);
242 public void DrawBeziers (Pen pen, PointF [] points)
244 int length = points.Length;
250 for (int i = 0; i < length; i += 3) {
251 PointF p1 = points [i];
252 PointF p2 = points [i + 1];
253 PointF p3 = points [i + 2];
254 PointF p4 = points [i + 3];
256 status = GDIPlus.GdipDrawBezier (nativeObject,
258 p1.X, p1.Y, p2.X, p2.Y,
259 p3.X, p3.Y, p4.X, p4.Y);
260 GDIPlus.CheckStatus (status);
265 public void DrawClosedCurve (Pen pen, PointF [] points)
268 status = GDIPlus.GdipDrawClosedCurve (nativeObject, pen.nativeObject, points, points.Length);
269 GDIPlus.CheckStatus (status);
272 public void DrawClosedCurve (Pen pen, Point [] points)
275 status = GDIPlus.GdipDrawClosedCurveI (nativeObject, pen.nativeObject, points, points.Length);
276 GDIPlus.CheckStatus (status);
279 public void DrawClosedCurve (Pen pen, Point [] points, float tension, FillMode fillmode)
282 status = GDIPlus.GdipDrawClosedCurve2I (nativeObject, pen.nativeObject, points, points.Length, tension);
283 GDIPlus.CheckStatus (status);
286 public void DrawClosedCurve (Pen pen, PointF [] points, float tension, FillMode fillmode)
289 status = GDIPlus.GdipDrawClosedCurve2 (nativeObject, pen.nativeObject, points, points.Length, tension);
290 GDIPlus.CheckStatus (status);
293 public void DrawCurve (Pen pen, Point [] points)
296 status = GDIPlus.GdipDrawCurveI (nativeObject, pen.nativeObject, points, points.Length);
297 GDIPlus.CheckStatus (status);
300 public void DrawCurve (Pen pen, PointF [] points)
303 status = GDIPlus.GdipDrawCurve (nativeObject, pen.nativeObject, points, points.Length);
304 GDIPlus.CheckStatus (status);
307 public void DrawCurve (Pen pen, PointF [] points, float tension)
310 status = GDIPlus.GdipDrawCurve2 (nativeObject, pen.nativeObject, points, points.Length, tension);
311 GDIPlus.CheckStatus (status);
314 public void DrawCurve (Pen pen, Point [] points, float tension)
317 status = GDIPlus.GdipDrawCurve2I (nativeObject, pen.nativeObject, points, points.Length, tension);
318 GDIPlus.CheckStatus (status);
322 public void DrawCurve (Pen pen, PointF [] points, int offset, int numberOfSegments)
325 status = GDIPlus.GdipDrawCurve3 (nativeObject, pen.nativeObject,
326 points, points.Length, offset,
327 numberOfSegments, 0.5f);
328 GDIPlus.CheckStatus (status);
331 public void DrawCurve (Pen pen, Point [] points, int offset, int numberOfSegments, float tension)
334 status = GDIPlus.GdipDrawCurve3I (nativeObject, pen.nativeObject,
335 points, points.Length, offset,
336 numberOfSegments, tension);
337 GDIPlus.CheckStatus (status);
341 public void DrawCurve (Pen pen, PointF [] points, int offset, int numberOfSegments, float tension)
344 status = GDIPlus.GdipDrawCurve3 (nativeObject, pen.nativeObject,
345 points, points.Length, offset,
346 numberOfSegments, tension);
347 GDIPlus.CheckStatus (status);
350 public void DrawEllipse (Pen pen, Rectangle rect)
352 DrawEllipse (pen, rect.X, rect.Y, rect.Width, rect.Height);
355 public void DrawEllipse (Pen pen, RectangleF rect)
357 DrawEllipse (pen, rect.X, rect.Y, rect.Width, rect.Height);
360 public void DrawEllipse (Pen pen, int x, int y, int width, int height)
363 status = GDIPlus.GdipDrawEllipseI (nativeObject, pen.nativeObject, x, y, width, height);
364 GDIPlus.CheckStatus (status);
367 public void DrawEllipse (Pen pen, float x, float y, float width, float height)
369 Status status = GDIPlus.GdipDrawEllipse (nativeObject, pen.nativeObject, x, y, width, height);
370 GDIPlus.CheckStatus (status);
374 public void DrawIcon (Icon icon, Rectangle targetRect)
376 throw new NotImplementedException ();
380 public void DrawIcon (Icon icon, int x, int y)
382 throw new NotImplementedException ();
386 public void DrawIconUnstretched (Icon icon, Rectangle targetRect)
388 throw new NotImplementedException ();
391 public void DrawImage (Image image, RectangleF rect)
393 Status status = GDIPlus.GdipDrawImageRect(nativeObject, image.NativeObject, rect.X, rect.Y, rect.Width, rect.Height);
394 GDIPlus.CheckStatus (status);
398 public void DrawImage (Image image, PointF point)
400 Status status = GDIPlus.GdipDrawImage (nativeObject, image.NativeObject, point.X, point.Y);
401 GDIPlus.CheckStatus (status);
405 public void DrawImage (Image image, Point [] destPoints)
407 Status status = GDIPlus.GdipDrawImagePointsI (nativeObject, image.NativeObject, destPoints, destPoints.Length);
408 GDIPlus.CheckStatus (status);
412 public void DrawImage (Image image, Point point)
414 DrawImage (image, point.X, point.Y);
418 public void DrawImage (Image image, Rectangle rect)
420 DrawImage(image, rect.X, rect.Y, rect.Width, rect.Height);
424 public void DrawImage (Image image, PointF [] destPoints)
426 Status status = GDIPlus.GdipDrawImagePoints (nativeObject, image.NativeObject, destPoints, destPoints.Length);
427 GDIPlus.CheckStatus (status);
431 public void DrawImage (Image image, int x, int y)
433 Status status = GDIPlus.GdipDrawImageI (nativeObject, image.NativeObject, x, y);
434 GDIPlus.CheckStatus (status);
438 public void DrawImage (Image image, float x, float y)
440 Status status = GDIPlus.GdipDrawImage (nativeObject, image.NativeObject, x, y);
441 GDIPlus.CheckStatus (status);
445 public void DrawImage (Image image, Rectangle destRect, Rectangle srcRect, GraphicsUnit srcUnit)
447 Status status = GDIPlus.GdipDrawImageRectRectI (nativeObject, image.NativeObject,
448 destRect.X, destRect.Y, destRect.Width, destRect.Height,
449 srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height,
450 srcUnit, IntPtr.Zero, null, IntPtr.Zero);
451 GDIPlus.CheckStatus (status);
454 public void DrawImage (Image image, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit)
456 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
457 destRect.X, destRect.Y, destRect.Width, destRect.Height,
458 srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height,
459 srcUnit, IntPtr.Zero, null, IntPtr.Zero);
460 GDIPlus.CheckStatus (status);
464 public void DrawImage (Image image, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit)
466 Status status = GDIPlus.GdipDrawImagePointsRectI (nativeObject, image.NativeObject,
467 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
468 srcRect.Width, srcRect.Height, srcUnit, IntPtr.Zero,
470 GDIPlus.CheckStatus (status);
474 public void DrawImage (Image image, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit)
477 Status status = GDIPlus.GdipDrawImagePointsRect (nativeObject, image.NativeObject,
478 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
479 srcRect.Width, srcRect.Height, srcUnit, IntPtr.Zero,
481 GDIPlus.CheckStatus (status);
485 public void DrawImage (Image image, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit,
486 ImageAttributes imageAttr)
488 Status status = GDIPlus.GdipDrawImagePointsRectI (nativeObject, image.NativeObject,
489 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
490 srcRect.Width, srcRect.Height, srcUnit,
491 imageAttr.NativeObject, null, IntPtr.Zero);
492 GDIPlus.CheckStatus (status);
495 public void DrawImage (Image image, float x, float y, float width, float height)
497 Status status = GDIPlus.GdipDrawImageRect(nativeObject, image.NativeObject, x, y,
499 GDIPlus.CheckStatus (status);
503 public void DrawImage (Image image, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit,
504 ImageAttributes imageAttr)
506 Status status = GDIPlus.GdipDrawImagePointsRect (nativeObject, image.NativeObject,
507 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
508 srcRect.Width, srcRect.Height, srcUnit,
509 imageAttr.NativeObject, null, IntPtr.Zero);
510 GDIPlus.CheckStatus (status);
514 public void DrawImage (Image image, int x, int y, Rectangle srcRect, GraphicsUnit srcUnit)
516 Status status = GDIPlus.GdipDrawImagePointRectI(nativeObject, image.NativeObject, x, y, srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit);
517 GDIPlus.CheckStatus (status);
520 public void DrawImage (Image image, int x, int y, int width, int height)
522 Status status = GDIPlus.GdipDrawImageRectI (nativeObject, image.nativeObject, x, y, width, height);
523 GDIPlus.CheckStatus (status);
526 public void DrawImage (Image image, float x, float y, RectangleF srcRect, GraphicsUnit srcUnit)
528 Status status = GDIPlus.GdipDrawImagePointRect (nativeObject, image.nativeObject, x, y, srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit);
529 GDIPlus.CheckStatus (status);
533 public void DrawImage (Image image, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)
535 Status status = GDIPlus.GdipDrawImagePointsRect (nativeObject, image.NativeObject,
536 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
537 srcRect.Width, srcRect.Height, srcUnit,
538 imageAttr.NativeObject, callback, IntPtr.Zero);
539 GDIPlus.CheckStatus (status);
543 public void DrawImage (Image image, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)
546 Status status = GDIPlus.GdipDrawImagePointsRectI (nativeObject, image.NativeObject,
547 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
548 srcRect.Width, srcRect.Height, srcUnit,
549 imageAttr.NativeObject, callback, IntPtr.Zero);
550 GDIPlus.CheckStatus (status);
554 public void DrawImage (Image image, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, int callbackData)
557 Status status = GDIPlus.GdipDrawImagePointsRectI (nativeObject, image.NativeObject,
558 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
559 srcRect.Width, srcRect.Height, srcUnit,
560 imageAttr.NativeObject, callback, (IntPtr) callbackData);
561 GDIPlus.CheckStatus (status);
565 public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit)
567 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
568 destRect.X, destRect.Y, destRect.Width, destRect.Height,
569 srcX, srcY, srcWidth, srcHeight, srcUnit, IntPtr.Zero,
571 GDIPlus.CheckStatus (status);
574 public void DrawImage (Image image, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, int callbackData)
576 Status status = GDIPlus.GdipDrawImagePointsRect (nativeObject, image.NativeObject,
577 destPoints, destPoints.Length , srcRect.X, srcRect.Y,
578 srcRect.Width, srcRect.Height, srcUnit,
579 imageAttr.NativeObject, callback, (IntPtr) callbackData);
580 GDIPlus.CheckStatus (status);
584 public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit)
586 Status status = GDIPlus.GdipDrawImageRectRectI (nativeObject, image.NativeObject,
587 destRect.X, destRect.Y, destRect.Width, destRect.Height,
588 srcX, srcY, srcWidth, srcHeight, srcUnit, IntPtr.Zero,
590 GDIPlus.CheckStatus (status);
594 public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttrs)
596 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
597 destRect.X, destRect.Y, destRect.Width, destRect.Height,
598 srcX, srcY, srcWidth, srcHeight, srcUnit,
599 imageAttrs.NativeObject, null, IntPtr.Zero);
600 GDIPlus.CheckStatus (status);
603 public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr)
605 Status status = GDIPlus.GdipDrawImageRectRectI (nativeObject, image.NativeObject,
606 destRect.X, destRect.Y, destRect.Width,
607 destRect.Height, srcX, srcY, srcWidth, srcHeight,
608 srcUnit, imageAttr.NativeObject, null, IntPtr.Zero);
609 GDIPlus.CheckStatus (status);
612 public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)
614 Status status = GDIPlus.GdipDrawImageRectRectI (nativeObject, image.NativeObject,
615 destRect.X, destRect.Y, destRect.Width,
616 destRect.Height, srcX, srcY, srcWidth, srcHeight,
617 srcUnit, imageAttr.NativeObject, callback,
619 GDIPlus.CheckStatus (status);
622 public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)
624 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
625 destRect.X, destRect.Y, destRect.Width,
626 destRect.Height, srcX, srcY, srcWidth, srcHeight,
627 srcUnit, imageAttr.NativeObject,
628 callback, IntPtr.Zero);
629 GDIPlus.CheckStatus (status);
633 public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, IntPtr callbackData)
635 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
636 destRect.X, destRect.Y, destRect.Width, destRect.Height,
637 srcX, srcY, srcWidth, srcHeight, srcUnit,
638 imageAttr.NativeObject, callback, callbackData);
639 GDIPlus.CheckStatus (status);
643 public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, IntPtr callbackData)
645 Status status = GDIPlus.GdipDrawImageRectRect (nativeObject, image.NativeObject,
646 destRect.X, destRect.Y, destRect.Width, destRect.Height,
647 srcX, srcY, srcWidth, srcHeight, srcUnit,
648 imageAttr.NativeObject, callback, callbackData);
649 GDIPlus.CheckStatus (status);
652 public void DrawImageUnscaled (Image image, Point point)
654 DrawImageUnscaled (image, point.X, point.Y);
657 public void DrawImageUnscaled (Image image, Rectangle rect)
659 DrawImageUnscaled (image, rect.X, rect.Y, rect.Width, rect.Height);
662 public void DrawImageUnscaled (Image image, int x, int y)
664 DrawImage (image, x, y, image.Width, image.Height);
667 public void DrawImageUnscaled (Image image, int x, int y, int width, int height)
669 Image tmpImg = new Bitmap (width, height);
670 Graphics g = FromImage (tmpImg);
671 g.DrawImage (image, 0, 0, image.Width, image.Height);
672 this.DrawImage (tmpImg, x, y, width, height);
677 public void DrawLine (Pen pen, PointF pt1, PointF pt2)
679 Status status = GDIPlus.GdipDrawLine (nativeObject, pen.nativeObject,
680 pt1.X, pt1.Y, pt2.X, pt2.Y);
681 GDIPlus.CheckStatus (status);
684 public void DrawLine (Pen pen, Point pt1, Point pt2)
686 Status status = GDIPlus.GdipDrawLineI (nativeObject, pen.nativeObject,
687 pt1.X, pt1.Y, pt2.X, pt2.Y);
688 GDIPlus.CheckStatus (status);
691 public void DrawLine (Pen pen, int x1, int y1, int x2, int y2)
693 Status status = GDIPlus.GdipDrawLineI (nativeObject, pen.nativeObject, x1, y1, x2, y2);
694 GDIPlus.CheckStatus (status);
697 public void DrawLine (Pen pen, float x1, float y1, float x2, float y2)
699 Status status = GDIPlus.GdipDrawLine (nativeObject, pen.nativeObject, x1, y1, x2, y2);
700 GDIPlus.CheckStatus (status);
703 public void DrawLines (Pen pen, PointF [] points)
705 Status status = GDIPlus.GdipDrawLines (nativeObject, pen.nativeObject, points, points.Length);
706 GDIPlus.CheckStatus (status);
709 public void DrawLines (Pen pen, Point [] points)
711 Status status = GDIPlus.GdipDrawLinesI (nativeObject, pen.nativeObject, points, points.Length);
712 GDIPlus.CheckStatus (status);
715 public void DrawPath (Pen pen, GraphicsPath path)
717 Status status = GDIPlus.GdipDrawPath (nativeObject, pen.nativeObject, path.nativePath);
718 GDIPlus.CheckStatus (status);
721 public void DrawPie (Pen pen, Rectangle rect, float startAngle, float sweepAngle)
723 DrawPie (pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
726 public void DrawPie (Pen pen, RectangleF rect, float startAngle, float sweepAngle)
728 DrawPie (pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
731 public void DrawPie (Pen pen, float x, float y, float width, float height, float startAngle, float sweepAngle)
733 Status status = GDIPlus.GdipDrawPie (nativeObject, pen.nativeObject, x, y, width, height, startAngle, sweepAngle);
734 GDIPlus.CheckStatus (status);
737 // Microsoft documentation states that the signature for this member should be
738 // public void DrawPie(Pen pen, int x, int y, int width, int height, int startAngle
739 // int sweepAngle. However, GdipDrawPieI uses also float for the startAngle and sweepAngle params
740 public void DrawPie (Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle)
742 Status status = GDIPlus.GdipDrawPieI (nativeObject, pen.nativeObject, x, y, width, height, startAngle, sweepAngle);
743 GDIPlus.CheckStatus (status);
746 public void DrawPolygon (Pen pen, Point [] points)
748 Status status = GDIPlus.GdipDrawPolygonI (nativeObject, pen.nativeObject, points, points.Length);
749 GDIPlus.CheckStatus (status);
752 public void DrawPolygon (Pen pen, PointF [] points)
754 Status status = GDIPlus.GdipDrawPolygon (nativeObject, pen.nativeObject, points, points.Length);
755 GDIPlus.CheckStatus (status);
758 internal void DrawRectangle (Pen pen, RectangleF rect)
760 DrawRectangle (pen, rect.Left, rect.Top, rect.Width, rect.Height);
763 public void DrawRectangle (Pen pen, Rectangle rect)
765 DrawRectangle (pen, rect.Left, rect.Top, rect.Width, rect.Height);
768 public void DrawRectangle (Pen pen, float x, float y, float width, float height)
770 Status status = GDIPlus.GdipDrawRectangle (nativeObject, pen.nativeObject, x, y, width, height);
771 GDIPlus.CheckStatus (status);
774 public void DrawRectangle (Pen pen, int x, int y, int width, int height)
776 Status status = GDIPlus.GdipDrawRectangleI (nativeObject, pen.nativeObject, x, y, width, height);
777 GDIPlus.CheckStatus (status);
780 public void DrawRectangles (Pen pen, RectangleF [] rects)
782 Status status = GDIPlus.GdipDrawRectangles (nativeObject, pen.nativeObject, rects, rects.Length);
783 GDIPlus.CheckStatus (status);
786 public void DrawRectangles (Pen pen, Rectangle [] rects)
788 Status status = GDIPlus.GdipDrawRectanglesI (nativeObject, pen.nativeObject, rects, rects.Length);
789 GDIPlus.CheckStatus (status);
792 public void DrawString (string s, Font font, Brush brush, RectangleF layoutRectangle)
794 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject, ref layoutRectangle, IntPtr.Zero, brush.nativeObject);
795 GDIPlus.CheckStatus (status);
798 public void DrawString (string s, Font font, Brush brush, PointF point)
800 RectangleF rc = new RectangleF (point.X, point.Y, 0, 0);
801 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject, ref rc, IntPtr.Zero, brush.nativeObject);
802 GDIPlus.CheckStatus (status);
805 public void DrawString (string s, Font font, Brush brush, PointF point, StringFormat format)
807 RectangleF rc = new RectangleF (point.X, point.Y, 0, 0);
808 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject, ref rc, format.NativeObject, brush.nativeObject);
809 GDIPlus.CheckStatus (status);
812 public void DrawString (string s, Font font, Brush brush, RectangleF layoutRectangle, StringFormat format)
814 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject, ref layoutRectangle, format.NativeObject, brush.nativeObject);
815 GDIPlus.CheckStatus (status);
818 public void DrawString (string s, Font font, Brush brush, float x, float y)
820 RectangleF rc = new RectangleF (x, y, 0, 0);
822 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject,
823 ref rc, IntPtr.Zero, brush.nativeObject);
824 GDIPlus.CheckStatus (status);
827 public void DrawString (string s, Font font, Brush brush, float x, float y, StringFormat format)
829 RectangleF rc = new RectangleF (x, y, 0, 0);
831 Status status = GDIPlus.GdipDrawString (nativeObject, s, s.Length, font.NativeObject,
832 ref rc, format.NativeObject, brush.nativeObject);
833 GDIPlus.CheckStatus (status);
837 public void EndContainer (GraphicsContainer container)
839 Status status = GDIPlus.GdipEndContainer(nativeObject, container.NativeObject);
840 GDIPlus.CheckStatus (status);
844 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, EnumerateMetafileProc callback)
846 throw new NotImplementedException ();
850 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, EnumerateMetafileProc callback)
852 throw new NotImplementedException ();
856 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, EnumerateMetafileProc callback)
858 throw new NotImplementedException ();
862 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, EnumerateMetafileProc callback)
864 throw new NotImplementedException ();
868 public void EnumerateMetafile (Metafile metafile, Point destPoint, EnumerateMetafileProc callback)
870 throw new NotImplementedException ();
874 public void EnumerateMetafile (Metafile metafile, PointF destPoint, EnumerateMetafileProc callback)
876 throw new NotImplementedException ();
880 public void EnumerateMetafile (Metafile metafile, PointF destPoint, EnumerateMetafileProc callback, IntPtr callbackData)
882 throw new NotImplementedException ();
886 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, EnumerateMetafileProc callback, IntPtr callbackData)
888 throw new NotImplementedException ();
892 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData)
894 throw new NotImplementedException ();
898 public void EnumerateMetafile (Metafile metafile, Point destPoint, EnumerateMetafileProc callback, IntPtr callbackData)
900 throw new NotImplementedException ();
904 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData)
906 throw new NotImplementedException ();
910 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, EnumerateMetafileProc callback, IntPtr callbackData)
912 throw new NotImplementedException ();
916 public void EnumerateMetafile (Metafile metafile, PointF destPoint, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
918 throw new NotImplementedException ();
922 public void EnumerateMetafile (Metafile metafile, Point destPoint, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
924 throw new NotImplementedException ();
928 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
930 throw new NotImplementedException ();
934 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
936 throw new NotImplementedException ();
940 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
942 throw new NotImplementedException ();
946 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback)
948 throw new NotImplementedException ();
952 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
954 throw new NotImplementedException ();
958 public void EnumerateMetafile (Metafile metafile, Point destPoint, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
960 throw new NotImplementedException ();
964 public void EnumerateMetafile (Metafile metafile, PointF destPoint, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
966 throw new NotImplementedException ();
970 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
972 throw new NotImplementedException ();
976 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
978 throw new NotImplementedException ();
982 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
984 throw new NotImplementedException ();
988 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
990 throw new NotImplementedException ();
994 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
996 throw new NotImplementedException ();
1000 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
1002 throw new NotImplementedException ();
1006 public void EnumerateMetafile (Metafile metafile, PointF destPoint, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
1008 throw new NotImplementedException ();
1012 public void EnumerateMetafile (Metafile metafile, Point destPoint, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
1014 throw new NotImplementedException ();
1018 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData)
1020 throw new NotImplementedException ();
1024 public void EnumerateMetafile (Metafile metafile, Point [] destPoints, Rectangle srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1026 throw new NotImplementedException ();
1030 public void EnumerateMetafile (Metafile metafile, Rectangle destRect, Rectangle srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1032 throw new NotImplementedException ();
1036 public void EnumerateMetafile (Metafile metafile, Point destPoint, Rectangle srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1038 throw new NotImplementedException ();
1042 public void EnumerateMetafile (Metafile metafile, RectangleF destRect, RectangleF srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1044 throw new NotImplementedException ();
1048 public void EnumerateMetafile (Metafile metafile, PointF [] destPoints, RectangleF srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1050 throw new NotImplementedException ();
1054 public void EnumerateMetafile (Metafile metafile, PointF destPoint, RectangleF srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr)
1056 throw new NotImplementedException ();
1059 public void ExcludeClip (Rectangle rect)
1061 Status status = GDIPlus.GdipSetClipRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, CombineMode.Exclude);
1062 GDIPlus.CheckStatus (status);
1065 public void ExcludeClip (Region region)
1067 Status status = GDIPlus.GdipSetClipRegion (nativeObject, region.NativeObject, CombineMode.Exclude);
1068 GDIPlus.CheckStatus (status);
1072 public void FillClosedCurve (Brush brush, PointF [] points)
1074 Status status = GDIPlus.GdipFillClosedCurve (nativeObject, brush.NativeObject, points, points.Length);
1075 GDIPlus.CheckStatus (status);
1079 public void FillClosedCurve (Brush brush, Point [] points)
1081 Status status = GDIPlus.GdipFillClosedCurveI (nativeObject, brush.NativeObject, points, points.Length);
1082 GDIPlus.CheckStatus (status);
1086 public void FillClosedCurve (Brush brush, PointF [] points, FillMode fillmode)
1088 FillClosedCurve (brush, points, fillmode, 0.5f);
1091 public void FillClosedCurve (Brush brush, Point [] points, FillMode fillmode)
1093 FillClosedCurve (brush, points, fillmode, 0.5f);
1096 public void FillClosedCurve (Brush brush, PointF [] points, FillMode fillmode, float tension)
1098 Status status = GDIPlus.GdipFillClosedCurve2 (nativeObject, brush.NativeObject, points, points.Length, tension, fillmode);
1099 GDIPlus.CheckStatus (status);
1102 public void FillClosedCurve (Brush brush, Point [] points, FillMode fillmode, float tension)
1104 Status status = GDIPlus.GdipFillClosedCurve2I (nativeObject, brush.NativeObject, points, points.Length, tension, fillmode);
1105 GDIPlus.CheckStatus (status);
1108 public void FillEllipse (Brush brush, Rectangle rect)
1110 FillEllipse (brush, rect.X, rect.Y, rect.Width, rect.Height);
1113 public void FillEllipse (Brush brush, RectangleF rect)
1115 FillEllipse (brush, rect.X, rect.Y, rect.Width, rect.Height);
1118 public void FillEllipse (Brush brush, float x, float y, float width, float height)
1120 Status status = GDIPlus.GdipFillEllipse (nativeObject, brush.nativeObject, x, y, width, height);
1121 GDIPlus.CheckStatus (status);
1124 public void FillEllipse (Brush brush, int x, int y, int width, int height)
1126 Status status = GDIPlus.GdipFillEllipseI (nativeObject, brush.nativeObject, x, y, width, height);
1127 GDIPlus.CheckStatus (status);
1130 public void FillPath (Brush brush, GraphicsPath path)
1132 Status status = GDIPlus.GdipFillPath (nativeObject, brush.NativeObject, path.NativeObject);
1133 GDIPlus.CheckStatus (status);
1136 public void FillPie (Brush brush, Rectangle rect, float startAngle, float sweepAngle)
1138 Status status = GDIPlus.GdipFillPie (nativeObject, brush.NativeObject, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
1139 GDIPlus.CheckStatus (status);
1142 public void FillPie (Brush brush, int x, int y, int width, int height, int startAngle, int sweepAngle)
1144 Status status = GDIPlus.GdipFillPieI (nativeObject, brush.NativeObject, x, y, width, height, startAngle, sweepAngle);
1145 GDIPlus.CheckStatus (status);
1148 public void FillPie (Brush brush, float x, float y, float width, float height, float startAngle, float sweepAngle)
1150 Status status = GDIPlus.GdipFillPie (nativeObject, brush.NativeObject, x, y, width, height, startAngle, sweepAngle);
1151 GDIPlus.CheckStatus (status);
1154 public void FillPolygon (Brush brush, PointF [] points)
1156 Status status = GDIPlus.GdipFillPolygon2 (nativeObject, brush.nativeObject, points, points.Length);
1157 GDIPlus.CheckStatus (status);
1160 public void FillPolygon (Brush brush, Point [] points)
1162 Status status = GDIPlus.GdipFillPolygon2I (nativeObject, brush.nativeObject, points, points.Length);
1163 GDIPlus.CheckStatus (status);
1166 public void FillPolygon (Brush brush, Point [] points, FillMode fillMode)
1168 Status status = GDIPlus.GdipFillPolygonI (nativeObject, brush.nativeObject, points, points.Length, fillMode);
1169 GDIPlus.CheckStatus (status);
1172 public void FillPolygon (Brush brush, PointF [] points, FillMode fillMode)
1174 Status status = GDIPlus.GdipFillPolygon (nativeObject, brush.nativeObject, points, points.Length, fillMode);
1175 GDIPlus.CheckStatus (status);
1178 public void FillRectangle (Brush brush, RectangleF rect)
1180 FillRectangle (brush, rect.Left, rect.Top, rect.Width, rect.Height);
1183 public void FillRectangle (Brush brush, Rectangle rect)
1185 FillRectangle (brush, rect.Left, rect.Top, rect.Width, rect.Height);
1188 public void FillRectangle (Brush brush, int x, int y, int width, int height)
1190 Status status = GDIPlus.GdipFillRectangleI (nativeObject, brush.nativeObject, x, y, width, height);
1191 GDIPlus.CheckStatus (status);
1194 public void FillRectangle (Brush brush, float x, float y, float width, float height)
1196 Status status = GDIPlus.GdipFillRectangle (nativeObject, brush.nativeObject, x, y, width, height);
1197 GDIPlus.CheckStatus (status);
1200 public void FillRectangles (Brush brush, Rectangle [] rects)
1202 Status status = GDIPlus.GdipFillRectanglesI (nativeObject, brush.nativeObject, rects, rects.Length);
1203 GDIPlus.CheckStatus (status);
1206 public void FillRectangles (Brush brush, RectangleF [] rects)
1208 Status status = GDIPlus.GdipFillRectangles (nativeObject, brush.nativeObject, rects, rects.Length);
1209 GDIPlus.CheckStatus (status);
1213 public void FillRegion (Brush brush, Region region)
1215 Status status = GDIPlus.GdipFillRegion (nativeObject, brush.NativeObject, region.NativeObject);
1216 GDIPlus.CheckStatus(status);
1220 public void Flush ()
1222 Flush (FlushIntention.Flush);
1226 public void Flush (FlushIntention intention)
1228 Status status = GDIPlus.GdipFlush (nativeObject, intention);
1229 GDIPlus.CheckStatus (status);
1232 [EditorBrowsable (EditorBrowsableState.Advanced)]
1233 public static Graphics FromHdc (IntPtr hdc)
1236 Status status = GDIPlus.GdipCreateFromHDC (hdc, out graphics); GDIPlus.CheckStatus (status);
1238 Graphics result = new Graphics ((IntPtr) graphics);
1243 [EditorBrowsable (EditorBrowsableState.Advanced)]
1244 public static Graphics FromHdc (IntPtr hdc, IntPtr hdevice)
1246 throw new NotImplementedException ();
1250 [EditorBrowsable (EditorBrowsableState.Advanced)]
1251 public static Graphics FromHdcInternal (IntPtr hdc)
1253 throw new NotImplementedException ();
1256 [EditorBrowsable (EditorBrowsableState.Advanced)]
1257 public static Graphics FromHwnd (IntPtr hwnd)
1261 Status status = GDIPlus.GdipCreateFromHWND (hwnd, out graphics); GDIPlus.CheckStatus (status);
1263 return new Graphics (graphics);
1267 [EditorBrowsable (EditorBrowsableState.Advanced)]
1268 public static Graphics FromHwndInternal (IntPtr hwnd)
1270 throw new NotImplementedException ();
1273 public static Graphics FromImage (Image image)
1275 lock (typeof (Graphics))
1277 if (image == null) throw new ArgumentException ();
1279 Status status = GDIPlus.GdipGetImageGraphicsContext (image.nativeObject, out graphics);
1280 GDIPlus.CheckStatus (status);
1281 Graphics result = new Graphics ((IntPtr) graphics);
1283 if (Environment.OSVersion.Platform == (PlatformID) 128) {
1284 Rectangle rect = new Rectangle (0,0, image.Width, image.Height);
1285 GDIPlus.GdipSetVisibleClip_linux (result.NativeObject, ref rect);
1292 internal static Graphics FromXDrawable (IntPtr drawable, IntPtr display)
1294 lock (typeof (Graphics))
1297 Status s = GDIPlus.GdipCreateFromXDrawable_linux (drawable, display, out graphics);
1298 GDIPlus.CheckStatus (s);
1299 return new Graphics (graphics);
1304 public static IntPtr GetHalftonePalette ()
1306 throw new NotImplementedException ();
1310 [EditorBrowsable (EditorBrowsableState.Advanced)]
1311 public IntPtr GetHdc ()
1314 Status status = GDIPlus.GdipGetDC (nativeObject, out hdc);
1315 GDIPlus.CheckStatus (status);
1317 return (IntPtr) hdc;
1321 public Color GetNearestColor (Color color)
1325 Status status = GDIPlus.GdipGetNearestColor (nativeObject, out argb);
1326 GDIPlus.CheckStatus (status);
1328 return Color.FromArgb (argb);
1332 public void IntersectClip (Region region)
1334 Status status = GDIPlus.GdipSetClipRegion (nativeObject, region.NativeObject, CombineMode.Intersect);
1335 GDIPlus.CheckStatus (status);
1338 public void IntersectClip (RectangleF rect)
1340 Status status = GDIPlus.GdipSetClipRect (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, CombineMode.Intersect);
1341 GDIPlus.CheckStatus (status);
1344 public void IntersectClip (Rectangle rect)
1346 Status status = GDIPlus.GdipSetClipRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, CombineMode.Intersect);
1347 GDIPlus.CheckStatus (status);
1350 public bool IsVisible (Point point)
1352 bool isVisible = false;
1354 Status status = GDIPlus.GdipIsVisiblePointI (nativeObject, point.X, point.Y, out isVisible);
1355 GDIPlus.CheckStatus (status);
1361 public bool IsVisible (RectangleF rect)
1363 bool isVisible = false;
1365 Status status = GDIPlus.GdipIsVisibleRect (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, out isVisible);
1366 GDIPlus.CheckStatus (status);
1371 public bool IsVisible (PointF point)
1373 bool isVisible = false;
1375 Status status = GDIPlus.GdipIsVisiblePoint (nativeObject, point.X, point.Y, out isVisible);
1376 GDIPlus.CheckStatus (status);
1381 public bool IsVisible (Rectangle rect)
1383 bool isVisible = false;
1385 Status status = GDIPlus.GdipIsVisibleRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, out isVisible);
1386 GDIPlus.CheckStatus (status);
1391 public bool IsVisible (float x, float y)
1393 return IsVisible (new PointF (x, y));
1396 public bool IsVisible (int x, int y)
1398 return IsVisible (new Point (x, y));
1401 public bool IsVisible (float x, float y, float width, float height)
1403 return IsVisible (new RectangleF (x, y, width, height));
1407 public bool IsVisible (int x, int y, int width, int height)
1409 return IsVisible (new Rectangle (x, y, width, height));
1413 public Region [] MeasureCharacterRanges (string text, Font font, RectangleF layoutRect, StringFormat stringFormat)
1415 Region [] result=new Region[stringFormat.GetCharRanges.Length];
1416 string textFragment;
1419 for (int i=0; i<stringFormat.GetCharRanges.Length; i++) {
1420 textFragment=text.Substring(stringFormat.GetCharRanges[i].First, stringFormat.GetCharRanges[i].Length);
1421 fragmentSize=MeasureString(textFragment, font, new SizeF(layoutRect.Width, layoutRect.Height), stringFormat);
1422 result[i]=new Region(new RectangleF(layoutRect.X, layoutRect.Y, layoutRect.X+fragmentSize.Width, layoutRect.Y+fragmentSize.Height));
1429 public SizeF MeasureString (string text, Font font)
1431 return MeasureString (text, font, new Size(0,0));
1435 public SizeF MeasureString (string text, Font font, SizeF layoutArea)
1437 int charactersFitted, linesFilled;
1438 RectangleF boundingBox = new RectangleF ();
1439 RectangleF rect = new RectangleF (0,0,layoutArea.Width, layoutArea.Height);
1441 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1442 font.NativeObject, ref rect, IntPtr.Zero, out boundingBox,
1443 out charactersFitted, out linesFilled);
1444 GDIPlus.CheckStatus (status);
1446 return new SizeF(boundingBox.Width, boundingBox.Height);
1450 public SizeF MeasureString (string text, Font font, int width)
1452 RectangleF boundingBox = new RectangleF ();
1453 RectangleF rect = new RectangleF (0, 0, width, 999999);
1454 int charactersFitted, linesFilled;
1456 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1457 font.NativeObject, ref rect, IntPtr.Zero,
1458 out boundingBox, out charactersFitted, out linesFilled);
1459 GDIPlus.CheckStatus (status);
1461 return new SizeF (boundingBox.Width, boundingBox.Height);
1465 public SizeF MeasureString (string text, Font font, SizeF layoutArea, StringFormat stringFormat)
1467 int charactersFitted, linesFilled;
1468 return MeasureString (text, font, layoutArea, stringFormat, out charactersFitted, out linesFilled);
1472 public SizeF MeasureString (string text, Font font, int width, StringFormat format)
1474 int charactersFitted, linesFilled;
1475 return MeasureString (text, font, new SizeF (width, 999999),
1476 format, out charactersFitted, out linesFilled);
1480 public SizeF MeasureString (string text, Font font, PointF origin, StringFormat stringFormat)
1482 RectangleF boundingBox = new RectangleF ();
1483 RectangleF rect = new RectangleF (origin.X, origin.Y, 0,0);
1484 int charactersFitted, linesFilled;
1486 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1487 font.NativeObject, ref rect, stringFormat.NativeObject,
1488 out boundingBox, 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, StringFormat stringFormat, out int charactersFitted, out int linesFilled)
1497 RectangleF boundingBox = new RectangleF ();
1498 RectangleF rect = new RectangleF (0,0,layoutArea.Width, layoutArea.Height);
1499 Status status = GDIPlus.GdipMeasureString (nativeObject, text, text.Length,
1500 font.NativeObject, ref rect, stringFormat.NativeObject,
1501 out boundingBox, out charactersFitted, out linesFilled);
1502 GDIPlus.CheckStatus (status);
1504 return new SizeF (boundingBox.Width, boundingBox.Height);
1507 public void MultiplyTransform (Matrix matrix)
1509 MultiplyTransform (matrix, MatrixOrder.Prepend);
1512 public void MultiplyTransform (Matrix matrix, MatrixOrder order)
1514 Status status = GDIPlus.GdipMultiplyWorldTransform (nativeObject, matrix.nativeMatrix, order);
1515 GDIPlus.CheckStatus (status);
1518 [EditorBrowsable (EditorBrowsableState.Advanced)]
1519 public void ReleaseHdc (IntPtr hdc)
1521 Status status = GDIPlus.GdipReleaseDC (nativeObject, hdc);
1522 GDIPlus.CheckStatus (status);
1526 [EditorBrowsable (EditorBrowsableState.Advanced)]
1527 public void ReleaseHdcInternal (IntPtr hdc)
1529 throw new NotImplementedException ();
1533 public void ResetClip ()
1535 Status status = GDIPlus.GdipResetClip (nativeObject);
1536 GDIPlus.CheckStatus (status);
1539 public void ResetTransform ()
1541 Status status = GDIPlus.GdipResetWorldTransform (nativeObject);
1542 GDIPlus.CheckStatus (status);
1545 public void Restore (GraphicsState gstate)
1547 Transform = gstate.matrix.Clone ();
1548 Status status = GDIPlus.GdipRestoreGraphics (nativeObject, gstate.nativeState);
1549 GDIPlus.CheckStatus (status);
1553 public void RotateTransform (float angle)
1555 RotateTransform (angle, MatrixOrder.Prepend);
1558 public void RotateTransform (float angle, MatrixOrder order)
1561 Status status = GDIPlus.GdipRotateWorldTransform (nativeObject, angle, order);
1562 GDIPlus.CheckStatus (status);
1565 public GraphicsState Save ()
1567 GraphicsState state = new GraphicsState ();
1568 state.matrix = Transform.Clone ();
1570 Status status = GDIPlus.GdipSaveGraphics (nativeObject, out saveState);
1571 GDIPlus.CheckStatus (status);
1573 state.nativeState = saveState;
1577 public void ScaleTransform (float sx, float sy)
1579 ScaleTransform (sx, sy, MatrixOrder.Prepend);
1582 public void ScaleTransform (float sx, float sy, MatrixOrder order)
1584 Status status = GDIPlus.GdipScaleWorldTransform (nativeObject, sx, sy, order);
1585 GDIPlus.CheckStatus (status);
1589 public void SetClip (RectangleF rect)
1591 SetClip (rect, CombineMode.Replace);
1595 public void SetClip (GraphicsPath path)
1597 SetClip (path, CombineMode.Replace);
1601 public void SetClip (Rectangle rect)
1603 SetClip (rect, CombineMode.Replace);
1607 public void SetClip (Graphics g)
1609 SetClip (g, CombineMode.Replace);
1613 public void SetClip (Graphics g, CombineMode combineMode)
1615 Status status = GDIPlus.GdipSetClipGraphics (nativeObject, g.NativeObject, combineMode);
1616 GDIPlus.CheckStatus (status);
1620 public void SetClip (Rectangle rect, CombineMode combineMode)
1622 Status status = GDIPlus.GdipSetClipRectI (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, combineMode);
1623 GDIPlus.CheckStatus (status);
1627 public void SetClip (RectangleF rect, CombineMode combineMode)
1629 Status status = GDIPlus.GdipSetClipRect (nativeObject, rect.X, rect.Y, rect.Width, rect.Height, combineMode);
1630 GDIPlus.CheckStatus (status);
1634 public void SetClip (Region region, CombineMode combineMode)
1636 Status status = GDIPlus.GdipSetClipRegion(nativeObject, region.NativeObject, combineMode);
1637 GDIPlus.CheckStatus (status);
1641 public void SetClip (GraphicsPath path, CombineMode combineMode)
1643 Status status = GDIPlus.GdipSetClipPath (nativeObject, path.NativeObject, combineMode);
1644 GDIPlus.CheckStatus (status);
1648 public void TransformPoints (CoordinateSpace destSpace, CoordinateSpace srcSpace, PointF [] pts)
1650 IntPtr ptrPt = GDIPlus.FromPointToUnManagedMemory (pts);
1652 Status status = GDIPlus.GdipTransformPoints (nativeObject, destSpace, srcSpace, ptrPt, pts.Length);
1653 GDIPlus.CheckStatus (status);
1655 GDIPlus.FromUnManagedMemoryToPoint (ptrPt, pts);
1659 public void TransformPoints (CoordinateSpace destSpace, CoordinateSpace srcSpace, Point [] pts)
1661 IntPtr ptrPt = GDIPlus.FromPointToUnManagedMemoryI (pts);
1663 Status status = GDIPlus.GdipTransformPointsI (nativeObject, destSpace, srcSpace, ptrPt, pts.Length);
1664 GDIPlus.CheckStatus (status);
1666 GDIPlus.FromUnManagedMemoryToPointI (ptrPt, pts);
1670 public void TranslateClip (int dx, int dy)
1672 Status status = GDIPlus.GdipTranslateClipI (nativeObject, dx, dy);
1673 GDIPlus.CheckStatus (status);
1677 public void TranslateClip (float dx, float dy)
1679 Status status = GDIPlus.GdipTranslateClip (nativeObject, dx, dy);
1680 GDIPlus.CheckStatus (status);
1683 public void TranslateTransform (float dx, float dy)
1685 TranslateTransform (dx, dy, MatrixOrder.Prepend);
1689 public void TranslateTransform (float dx, float dy, MatrixOrder order)
1691 Status status = GDIPlus.GdipTranslateWorldTransform (nativeObject, dx, dy, order);
1692 GDIPlus.CheckStatus (status);
1695 public Region Clip {
1697 Region reg = new Region();
1698 Status status = GDIPlus.GdipGetClip (nativeObject, reg.NativeObject);
1699 GDIPlus.CheckStatus (status);
1703 SetClip (value, CombineMode.Replace);
1707 public RectangleF ClipBounds {
1709 RectangleF rect = new RectangleF ();
1710 Status status = GDIPlus.GdipGetClipBounds (nativeObject, out rect);
1711 GDIPlus.CheckStatus (status);
1716 public CompositingMode CompositingMode {
1718 CompositingMode mode;
1719 Status status = GDIPlus.GdipGetCompositingMode (nativeObject, out mode);
1720 GDIPlus.CheckStatus (status);
1725 Status status = GDIPlus.GdipSetCompositingMode (nativeObject, value);
1726 GDIPlus.CheckStatus (status);
1731 public CompositingQuality CompositingQuality {
1733 CompositingQuality quality;
1735 Status status = GDIPlus.GdipGetCompositingQuality (nativeObject, out quality);
1736 GDIPlus.CheckStatus (status);
1740 Status status = GDIPlus.GdipSetCompositingQuality (nativeObject, value);
1741 GDIPlus.CheckStatus (status);
1749 Status status = GDIPlus.GdipGetDpiX (nativeObject, out x);
1750 GDIPlus.CheckStatus (status);
1759 Status status = GDIPlus.GdipGetDpiY (nativeObject, out y);
1760 GDIPlus.CheckStatus (status);
1765 public InterpolationMode InterpolationMode {
1767 InterpolationMode imode = InterpolationMode.Invalid;
1768 Status status = GDIPlus.GdipGetInterpolationMode (nativeObject, out imode);
1769 GDIPlus.CheckStatus (status);
1773 Status status = GDIPlus.GdipSetInterpolationMode (nativeObject, value);
1774 GDIPlus.CheckStatus (status);
1778 public bool IsClipEmpty {
1780 bool isEmpty = false;
1782 Status status = GDIPlus.GdipIsClipEmpty (nativeObject, out isEmpty);
1783 GDIPlus.CheckStatus (status);
1788 public bool IsVisibleClipEmpty {
1790 bool isEmpty = false;
1792 Status status = GDIPlus.GdipIsVisibleClipEmpty (nativeObject, out isEmpty);
1793 GDIPlus.CheckStatus (status);
1798 public float PageScale {
1802 Status status = GDIPlus.GdipGetPageScale (nativeObject, out scale);
1803 GDIPlus.CheckStatus (status);
1807 Status status = GDIPlus.GdipSetPageScale (nativeObject, value);
1808 GDIPlus.CheckStatus (status);
1812 public GraphicsUnit PageUnit {
1816 Status status = GDIPlus.GdipGetPageUnit (nativeObject, out unit);
1817 GDIPlus.CheckStatus (status);
1821 Status status = GDIPlus.GdipSetPageUnit (nativeObject, value);
1822 GDIPlus.CheckStatus (status);
1826 public PixelOffsetMode PixelOffsetMode {
1828 PixelOffsetMode pixelOffset = PixelOffsetMode.Invalid;
1830 Status status = GDIPlus.GdipGetPixelOffsetMode (nativeObject, out pixelOffset);
1831 GDIPlus.CheckStatus (status);
1835 Status status = GDIPlus.GdipSetPixelOffsetMode (nativeObject, value);
1836 GDIPlus.CheckStatus (status);
1840 public Point RenderingOrigin {
1843 Status status = GDIPlus.GdipGetRenderingOrigin (nativeObject, out x, out y);
1844 GDIPlus.CheckStatus (status);
1845 return new Point (x, y);
1849 Status status = GDIPlus.GdipSetRenderingOrigin (nativeObject, value.X, value.Y);
1850 GDIPlus.CheckStatus (status);
1854 public SmoothingMode SmoothingMode {
1856 SmoothingMode mode = SmoothingMode.Invalid;
1858 Status status = GDIPlus.GdipGetSmoothingMode (nativeObject, out mode);
1859 GDIPlus.CheckStatus (status);
1864 Status status = GDIPlus.GdipSetSmoothingMode (nativeObject, value);
1865 GDIPlus.CheckStatus (status);
1869 public int TextContrast {
1873 Status status = GDIPlus.GdipGetTextContrast (nativeObject, out contrast);
1874 GDIPlus.CheckStatus (status);
1879 Status status = GDIPlus.GdipSetTextContrast (nativeObject, value);
1880 GDIPlus.CheckStatus (status);
1884 public TextRenderingHint TextRenderingHint {
1886 TextRenderingHint hint;
1888 Status status = GDIPlus.GdipGetTextRenderingHint (nativeObject, out hint);
1889 GDIPlus.CheckStatus (status);
1894 Status status = GDIPlus.GdipSetTextRenderingHint (nativeObject, value);
1895 GDIPlus.CheckStatus (status);
1899 public Matrix Transform {
1901 Matrix matrix = new Matrix ();
1902 Status status = GDIPlus.GdipGetWorldTransform (nativeObject, matrix.nativeMatrix);
1903 GDIPlus.CheckStatus (status);
1907 Status status = GDIPlus.GdipSetWorldTransform (nativeObject, value.nativeMatrix);
1908 GDIPlus.CheckStatus (status);
1912 public RectangleF VisibleClipBounds {
1916 Status status = GDIPlus.GdipGetVisibleClipBounds (nativeObject, out rect);
1917 GDIPlus.CheckStatus (status);