-//\r
-// System.Drawing.Drawing2D.GraphicsPath.cs\r
-//\r
-// Authors:\r
-//\r
-// Miguel de Icaza (miguel@ximian.com)\r
-// Duncan Mak (duncan@ximian.com)\r
-// Jordi Mas i Hernandez (jordi@ximian.com)\r
-//\r
-// (C) 2004 Novell, Inc\r
-//\r
+//
+// System.Drawing.Drawing2D.GraphicsPath.cs
+//
+// Authors:
+//
+// Miguel de Icaza (miguel@ximian.com)
+// Duncan Mak (duncan@ximian.com)
+// Jordi Mas i Hernandez (jordi@ximian.com)
+//
+// (C) 2004 Novell, Inc
+//
//
// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-\r
-using System;\r
-using System.Drawing;\r
-using System.Runtime.InteropServices;\r
-\r
-namespace System.Drawing.Drawing2D\r
-{\r
- public sealed class GraphicsPath : MarshalByRefObject, ICloneable, IDisposable {\r
-\r
- internal IntPtr nativePath = IntPtr.Zero;\r
-\r
- GraphicsPath (IntPtr ptr)\r
- {\r
- nativePath = ptr;\r
- }\r
- \r
- public GraphicsPath ()\r
- {\r
- Status status = GDIPlus.GdipCreatePath (FillMode.Alternate, out nativePath);\r
- GDIPlus.CheckStatus (status);\r
- }\r
- \r
- public GraphicsPath (FillMode fillMode)\r
- {\r
- Status status = GDIPlus.GdipCreatePath (fillMode, out nativePath);\r
- GDIPlus.CheckStatus (status);\r
- }\r
- \r
- public GraphicsPath (Point[] pts, byte[] types)\r
- {\r
- Status status = GDIPlus.GdipCreatePath2I (\r
- pts, types, pts.Length, FillMode.Alternate, out nativePath);\r
- GDIPlus.CheckStatus (status);\r
- }\r
- \r
- public GraphicsPath (PointF[] pts, byte[] types)\r
- {\r
- Status status = GDIPlus.GdipCreatePath2 (pts, types, pts.Length, FillMode.Alternate, out nativePath);\r
- GDIPlus.CheckStatus (status);\r
- }\r
- \r
- public GraphicsPath (Point[] pts, byte[] types, FillMode fillMode)\r
- {\r
- Status status = GDIPlus.GdipCreatePath2I (\r
- pts, types, pts.Length, fillMode, out nativePath);\r
- GDIPlus.CheckStatus (status);\r
- }\r
-\r
- public GraphicsPath (PointF[] pts, byte[] types, FillMode fillMode)\r
- {\r
- Status status = GDIPlus.GdipCreatePath2 (pts, types, pts.Length, fillMode, out nativePath);\r
- GDIPlus.CheckStatus (status);\r
- }\r
- \r
- public object Clone ()\r
- {\r
- IntPtr clone;\r
-\r
- Status status = GDIPlus.GdipClonePath (nativePath, out clone);\r
- GDIPlus.CheckStatus (status); \r
-\r
- return new GraphicsPath (clone);\r
- }\r
-\r
- public void Dispose ()\r
- {\r
- Dispose (true);\r
- System.GC.SuppressFinalize (this);\r
- }\r
-\r
- ~GraphicsPath ()\r
- {\r
- Dispose (false);\r
- }\r
- \r
- void Dispose (bool disposing)\r
- {\r
- \r
- }\r
-\r
-\r
- public FillMode FillMode {\r
- get {\r
-\r
- FillMode mode;\r
- Status status = GDIPlus.GdipGetPathFillMode (nativePath, out mode);\r
- GDIPlus.CheckStatus (status); \r
- \r
- return mode;\r
- }\r
-\r
- set {\r
- Status status = GDIPlus.GdipSetPathFillMode (nativePath, value);\r
- GDIPlus.CheckStatus (status); \r
- }\r
- }\r
-\r
- public PathData PathData {\r
-\r
- get {\r
- IntPtr tmp;\r
- Status status = GDIPlus.GdipGetPathData (nativePath, out tmp);\r
- GDIPlus.CheckStatus (status); \r
-\r
- throw new Exception ();\r
- }\r
- }\r
-\r
- public PointF [] PathPoints {\r
-\r
- get {\r
- int count;\r
- \r
- Status status = GDIPlus.GdipGetPointCount (nativePath, out count);\r
- GDIPlus.CheckStatus (status); \r
-\r
- PointF [] points = new PointF [count];\r
-\r
- status = GDIPlus.GdipGetPathPoints (nativePath, points, count); \r
- GDIPlus.CheckStatus (status); \r
-\r
- return points;\r
- }\r
- }\r
-\r
- public byte [] PathTypes {\r
-\r
- get {\r
- int count;\r
- Status status = GDIPlus.GdipGetPointCount (nativePath, out count);\r
- GDIPlus.CheckStatus (status); \r
-\r
- byte [] types = new byte [count];\r
- status = GDIPlus.GdipGetPathTypes (nativePath, types, count);\r
- GDIPlus.CheckStatus (status); \r
-\r
- return types;\r
- }\r
- }\r
-\r
- public int PointCount {\r
-\r
- get {\r
- int count;\r
-\r
- Status status = GDIPlus.GdipGetPointCount (nativePath, out count);\r
- GDIPlus.CheckStatus (status); \r
-\r
- return count;\r
- }\r
- }\r
- \r
- internal IntPtr NativeObject{\r
- \r
- get {\r
- return nativePath;\r
- }\r
- set {\r
- nativePath = value;\r
- }\r
- }\r
- \r
- //\r
- // AddArc\r
- //\r
- public void AddArc (Rectangle rect, float start_angle, float sweep_angle)\r
- {\r
- Status status = GDIPlus.GdipAddPathArcI (nativePath, rect.X, rect.Y, rect.Width, rect.Height, start_angle, sweep_angle);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- public void AddArc (RectangleF rect, float start_angle, float sweep_angle)\r
- {\r
- Status status = GDIPlus.GdipAddPathArc (nativePath, rect.X, rect.Y, rect.Width, rect.Height, start_angle, sweep_angle);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- public void AddArc (int x, int y, int width, int height, float start_angle, float sweep_angle)\r
- {\r
- Status status = GDIPlus.GdipAddPathArcI (nativePath, x, y, width, height, start_angle, sweep_angle);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- public void AddArc (float x, float y, float width, float height, float start_angle, float sweep_angle)\r
- {\r
- Status status = GDIPlus.GdipAddPathArc (nativePath, x, y, width, height, start_angle, sweep_angle);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- //\r
- // AddBezier\r
- //\r
- public void AddBezier (Point pt1, Point pt2, Point pt3, Point pt4)\r
- {\r
- Status status = GDIPlus.GdipAddPathBezierI (nativePath, pt1.X, pt1.Y,\r
- pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y);\r
- \r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- public void AddBezier (PointF pt1, PointF pt2, PointF pt3, PointF pt4)\r
- {\r
- Status status = GDIPlus.GdipAddPathBezier (nativePath, pt1.X, pt1.Y,\r
- pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y);\r
- \r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- public void AddBezier (int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)\r
- {\r
- Status status = GDIPlus.GdipAddPathBezierI (nativePath, x1, y1, x2, y2, x3, y3, x4, y4);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- public void AddBezier (float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4)\r
- {\r
- Status status = GDIPlus.GdipAddPathBezier (nativePath, x1, y1, x2, y2, x3, y3, x4, y4);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- //\r
- // AddBeziers\r
- //\r
- public void AddBeziers (Point [] pts)\r
- {\r
- Status status = GDIPlus.GdipAddPathBeziersI (nativePath, pts, pts.Length);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- public void AddBeziers (PointF [] pts)\r
- {\r
- Status status = GDIPlus.GdipAddPathBeziers (nativePath, pts, pts.Length);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- //\r
- // AddEllipse\r
- //\r
- public void AddEllipse (RectangleF r)\r
- {\r
- Status status = GDIPlus.GdipAddPathEllipse (nativePath, r.X, r.Y, r.Width, r.Height);\r
- GDIPlus.CheckStatus (status); \r
- }\r
- \r
- public void AddEllipse (float x, float y, float width, float height)\r
- {\r
- Status status = GDIPlus.GdipAddPathEllipse (nativePath, x, y, width, height);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- public void AddEllipse (Rectangle r)\r
- {\r
- Status status = GDIPlus.GdipAddPathEllipseI (nativePath, r.X, r.Y, r.Width, r.Height);\r
- GDIPlus.CheckStatus (status); \r
- }\r
- \r
- public void AddEllipse (int x, int y, int width, int height)\r
- {\r
- Status status = GDIPlus.GdipAddPathEllipseI (nativePath, x, y, width, height);\r
- GDIPlus.CheckStatus (status); \r
- }\r
- \r
-\r
- //\r
- // AddLine\r
- //\r
- public void AddLine (Point a, Point b)\r
- {\r
- Status status = GDIPlus.GdipAddPathLineI (nativePath, a.X, a.Y, b.X, b.Y);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- public void AddLine (PointF a, PointF b)\r
- {\r
- Status status = GDIPlus.GdipAddPathLine (nativePath, a.X, a.Y, b.X,\r
- b.Y);\r
- \r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- public void AddLine (int x1, int y1, int x2, int y2)\r
- {\r
- Status status = GDIPlus.GdipAddPathLineI (nativePath, x1, y1, x2, y2);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- public void AddLine (float x1, float y1, float x2, float y2)\r
- {\r
- Status status = GDIPlus.GdipAddPathLine (nativePath, x1, y1, x2,\r
- y2); \r
- \r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- //\r
- // AddLines\r
- //\r
- public void AddLines (Point [] points)\r
- {\r
- int length = points.Length;\r
-\r
- for (int i = 0; i < length - 2; i += 2) {\r
- int j = i + 1;\r
- Status status = GDIPlus.GdipAddPathLineI (\r
- nativePath, points [i].X, points [i].Y, points [j].X, points [j].Y);\r
- GDIPlus.CheckStatus (status); \r
- }\r
- }\r
-\r
- public void AddLines (PointF [] points)\r
- {\r
- int length = points.Length;\r
-\r
- for (int i = 0; i < length - 2; i += 2) {\r
- int j = i + 1;\r
- Status status = GDIPlus.GdipAddPathLine (\r
- nativePath, points [i].X, points [i].Y, points [j].X, points [j].Y);\r
- GDIPlus.CheckStatus (status); \r
- }\r
- }\r
- \r
- //\r
- // AddPie\r
- //\r
- public void AddPie (Rectangle rect, float startAngle, float sweepAngle)\r
- {\r
- Status status = GDIPlus.GdipAddPathPie (\r
- nativePath, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- public void AddPie (int x, int y, int width, int height, float startAngle, float sweepAngle)\r
- {\r
- Status status = GDIPlus.GdipAddPathPieI (nativePath, x, y, width, height, startAngle, sweepAngle);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- public void AddPie (float x, float y, float width, float height, float startAngle, float sweepAngle)\r
- {\r
- Status status = GDIPlus.GdipAddPathPie (nativePath, x, y, width, height, startAngle, sweepAngle); \r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- //\r
- // AddPolygon\r
- //\r
- public void AddPolygon (Point [] points)\r
- {\r
- Status status = GDIPlus.GdipAddPathPolygonI (nativePath, points, points.Length);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- public void AddPolygon (PointF [] points)\r
- {\r
- Status status = GDIPlus.GdipAddPathPolygon (nativePath, points, points.Length);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- //\r
- // AddRectangle\r
- //\r
- public void AddRectangle (Rectangle rect)\r
- {\r
- Status status = GDIPlus.GdipAddPathRectangleI (nativePath, rect.X, rect.Y, rect.Width, rect.Height);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- public void AddRectangle (RectangleF rect)\r
- {\r
- Status status = GDIPlus.GdipAddPathRectangle (nativePath, rect.X, rect.Y, rect.Width, rect.Height);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- //\r
- // AddRectangles\r
- //\r
- public void AddRectangles (Rectangle [] rects)\r
- {\r
- Status status = GDIPlus.GdipAddPathRectanglesI (nativePath, rects, rects.Length);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- public void AddRectangles (RectangleF [] rects)\r
- {\r
- Status status = GDIPlus.GdipAddPathRectangles (nativePath, rects, rects.Length);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- //\r
- // AddPath\r
- //\r
- public void AddPath (GraphicsPath addingPath, bool connect)\r
- {\r
- Status status = GDIPlus.GdipAddPathPath (nativePath, addingPath.nativePath, connect);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- public PointF GetLastPoint ()\r
- {\r
- PointF pt;\r
- Status status = GDIPlus.GdipGetPathLastPoint (nativePath, out pt);\r
- GDIPlus.CheckStatus (status); \r
-\r
- return pt;\r
- }\r
-\r
- //\r
- // AddClosedCurve\r
- //\r
- public void AddClosedCurve (Point [] points)\r
- {\r
- Status status = GDIPlus.GdipAddPathClosedCurveI (nativePath, points, points.Length);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- public void AddClosedCurve (PointF [] points)\r
- {\r
- Status status = GDIPlus.GdipAddPathClosedCurve (nativePath, points, points.Length);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- public void AddClosedCurve (Point [] points, float tension)\r
- {\r
- Status status = GDIPlus.GdipAddPathClosedCurve2I (nativePath, points, points.Length, tension);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- public void AddClosedCurve (PointF [] points, float tension)\r
- {\r
- Status status = GDIPlus.GdipAddPathClosedCurve2 (nativePath, points, points.Length, tension);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- //\r
- // AddCurve\r
- //\r
- public void AddCurve (Point [] points)\r
- {\r
- Status status = GDIPlus.GdipAddPathCurveI (nativePath, points, points.Length);\r
- GDIPlus.CheckStatus (status); \r
- }\r
- \r
- public void AddCurve (PointF [] points)\r
- {\r
- Status status = GDIPlus.GdipAddPathCurve (nativePath, points, points.Length);\r
- GDIPlus.CheckStatus (status); \r
- }\r
- \r
- public void AddCurve (Point [] points, float tension)\r
- {\r
- Status status = GDIPlus.GdipAddPathCurve2I (nativePath, points, points.Length, tension);\r
- GDIPlus.CheckStatus (status); \r
- }\r
- \r
- public void AddCurve (PointF [] points, float tension)\r
- {\r
- Status status = GDIPlus.GdipAddPathCurve2 (nativePath, points, points.Length, tension);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- public void AddCurve (Point [] points, int offset, int numberOfSegments, float tension)\r
- {\r
- Status status = GDIPlus.GdipAddPathCurve3I (nativePath, points, points.Length,\r
- offset, numberOfSegments, tension);\r
- \r
- GDIPlus.CheckStatus (status); \r
- }\r
- \r
- public void AddCurve (PointF [] points, int offset, int numberOfSegments, float tension)\r
- {\r
- Status status = GDIPlus.GdipAddPathCurve3 (nativePath, points, points.Length,\r
- offset, numberOfSegments, tension);\r
- \r
- GDIPlus.CheckStatus (status); \r
- }\r
- \r
- public void Reset ()\r
- {\r
- Status status = GDIPlus.GdipResetPath (nativePath);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- public void Reverse ()\r
- {\r
- Status status = GDIPlus.GdipReversePath (nativePath);\r
- GDIPlus.CheckStatus (status); \r
- }\r
-\r
- public void Transform (Matrix matrix)\r
- {\r
- Status status = GDIPlus.GdipTransformPath (nativePath, matrix.nativeMatrix);\r
- GDIPlus.CheckStatus (status); \r
- }\r
- \r
- [MonoTODO]\r
- public void AddString (string s, FontFamily family, int style, float emSize, Point origin, StringFormat format)\r
- {\r
- throw new NotImplementedException ();\r
- } \r
- \r
- [MonoTODO]\r
- public void AddString (string s, FontFamily family, int style, float emSize, PointF origin, StringFormat format)\r
- {\r
- throw new NotImplementedException ();\r
- } \r
- \r
- [MonoTODO]\r
- public void AddString (string s, FontFamily family, int style, float emSize, Rectangle layoutRect, StringFormat format)\r
- {\r
- throw new NotImplementedException ();\r
- } \r
- \r
- [MonoTODO]\r
- public void AddString (string s, FontFamily family, int style, float emSize, RectangleF layoutRect, StringFormat format)\r
- {\r
- throw new NotImplementedException ();\r
- } \r
- \r
- public void ClearMarkers() \r
- {\r
- Status s = GDIPlus.GdipClearPathMarkers (nativePath);\r
-\r
- GDIPlus.CheckStatus (s);\r
- }\r
- \r
- public void CloseAllFigures()\r
- {\r
- Status s = GDIPlus.GdipClosePathFigures (nativePath);\r
-\r
- GDIPlus.CheckStatus (s);\r
- } \r
- \r
- public void CloseFigure()\r
- {\r
- Status s = GDIPlus.GdipClosePathFigure (nativePath);\r
-\r
- GDIPlus.CheckStatus (s);\r
- } \r
-\r
- public void Flatten ()\r
- {\r
- // 1/4 is the FlatnessDefault as defined in GdiPlusEnums.h\r
- Flatten (null, 1.0f / 4.0f); \r
- } \r
- \r
- public void Flatten (Matrix matrix)\r
- {\r
- Flatten (matrix, 1.0f / 4.0f);\r
- }\r
- \r
- public void Flatten (Matrix matrix, float flatness)\r
- {\r
- Status status = GDIPlus.GdipFlattenPath (nativePath, matrix.nativeMatrix, flatness);\r
-\r
- GDIPlus.CheckStatus (status);\r
- } \r
- \r
- public RectangleF GetBounds ()\r
- {\r
- return GetBounds (null, null);\r
- } \r
-\r
- public RectangleF GetBounds (Matrix matrix)\r
- {\r
- return GetBounds (matrix, null);\r
- }\r
-\r
- [MonoTODO]\r
- public RectangleF GetBounds (Matrix matrix, Pen pen)\r
- {\r
- RectangleF retval;\r
- IntPtr m = (matrix == null) ? IntPtr.Zero : matrix.nativeMatrix;\r
- IntPtr p = (pen == null) ? IntPtr.Zero : pen.nativeObject;\r
- \r
- Status s = GDIPlus.GdipGetPathWorldBounds (nativePath, out retval, m, p);\r
-\r
- GDIPlus.CheckStatus (s);\r
-\r
- return retval;\r
- }\r
- \r
- public bool IsOutlineVisible (Point point, Pen pen)\r
- {\r
- return IsOutlineVisible (point.X, point.Y, pen, null);\r
- } \r
- \r
- public bool IsOutlineVisible (PointF point, Pen pen)\r
- {\r
- return IsOutlineVisible (point.X, point.Y, pen, null);\r
- } \r
- \r
- public bool IsOutlineVisible (int x, int y, Pen pen)\r
- {\r
- return IsOutlineVisible (x, y, pen, null);\r
- }\r
-\r
- public bool IsOutlineVisible (float x, float y, Pen pen)\r
- {\r
- return IsOutlineVisible (x, y, pen, null);\r
- } \r
- \r
- public bool IsOutlineVisible (Point pt, Pen pen, Graphics graphics)\r
- {\r
- return IsOutlineVisible (pt.X, pt.Y, pen, graphics);\r
- } \r
- \r
- public bool IsOutlineVisible (PointF pt, Pen pen, Graphics graphics)\r
- {\r
- return IsOutlineVisible (pt.X, pt.Y, pen, graphics);\r
- } \r
- \r
- [MonoTODO]\r
- public bool IsOutlineVisible (int x, int y, Pen pen, Graphics graphics)\r
- {\r
- bool result;\r
- IntPtr g = (graphics == null) ? IntPtr.Zero : graphics.nativeObject;\r
- \r
- Status s = GDIPlus.GdipIsOutlineVisiblePathPointI (nativePath, x, y, g, out result);\r
- GDIPlus.CheckStatus (s);\r
-\r
- return result;\r
- } \r
- \r
- [MonoTODO]\r
- public bool IsOutlineVisible (float x, float y, Pen pen, Graphics graphics)\r
- {\r
- bool result;\r
- IntPtr g = (graphics == null) ? IntPtr.Zero : graphics.nativeObject;\r
- \r
- Status s = GDIPlus.GdipIsOutlineVisiblePathPoint (nativePath, x, y, g, out result);\r
- GDIPlus.CheckStatus (s);\r
-\r
- return result;\r
- } \r
- \r
- public bool IsVisible (Point point)\r
- {\r
- return IsVisible (point.X, point.Y, null);\r
- } \r
- \r
- public bool IsVisible (PointF point)\r
- {\r
- return IsVisible (point.X, point.Y, null);\r
- } \r
- \r
- public bool IsVisible (int x, int y)\r
- {\r
- return IsVisible (x, y, null);\r
- }\r
-\r
- public bool IsVisible (float x, float y)\r
- {\r
- return IsVisible (x, y, null);\r
- } \r
- \r
- public bool IsVisible (Point pt, Graphics graphics)\r
- {\r
- return IsVisible (pt.X, pt.Y, graphics);\r
- } \r
- \r
- public bool IsVisible (PointF pt, Graphics graphics)\r
- {\r
- return IsVisible (pt.X, pt.Y, graphics);\r
- } \r
- \r
- [MonoTODO]\r
- public bool IsVisible (int x, int y, Graphics graphics)\r
- {\r
- bool retval;\r
-\r
- IntPtr g = (graphics == null) ? IntPtr.Zero : graphics.nativeObject;\r
-\r
- Status s = GDIPlus.GdipIsVisiblePathPointI (nativePath, x, y, g, out retval);\r
-\r
- GDIPlus.CheckStatus (s);\r
-\r
- return retval;\r
- } \r
- \r
- [MonoTODO]\r
- public bool IsVisible (float x, float y, Graphics graphics)\r
- {\r
- bool retval;\r
-\r
- IntPtr g = (graphics == null) ? IntPtr.Zero : graphics.nativeObject;\r
-\r
- Status s = GDIPlus.GdipIsVisiblePathPoint (nativePath, x, y, g, out retval);\r
-\r
- GDIPlus.CheckStatus (s);\r
-\r
- return retval;\r
- } \r
- \r
- public void SetMarkers ()\r
- {\r
- Status s = GDIPlus.GdipSetPathMarker (nativePath);\r
-\r
- GDIPlus.CheckStatus (s);\r
- }\r
- \r
- public void StartFigure()\r
- {\r
- Status s = GDIPlus.GdipStartPathFigure (nativePath);\r
-\r
- GDIPlus.CheckStatus (s);\r
- } \r
- \r
- public void Warp (PointF[] destPoints, RectangleF srcRect)\r
- {\r
- Warp (destPoints, srcRect, null, WarpMode.Perspective, 1.0f / 4.0f);\r
- } \r
-\r
- public void Warp (PointF[] destPoints, RectangleF srcRect, Matrix matrix)\r
- {\r
- Warp (destPoints, srcRect, matrix, WarpMode.Perspective, 1.0f / 4.0f);\r
- } \r
-\r
- public void Warp (PointF[] destPoints, RectangleF srcRect, Matrix matrix, WarpMode warpMode)\r
- {\r
- Warp (destPoints, srcRect, matrix, warpMode, 1.0f / 4.0f);\r
- } \r
-\r
- [MonoTODO]\r
- public void Warp (PointF[] destPoints, RectangleF srcRect, Matrix matrix, WarpMode warpMode, float flatness)\r
- {\r
- IntPtr m = (matrix == null) ? IntPtr.Zero : matrix.nativeMatrix;\r
-\r
- Status s = GDIPlus.GdipWarpPath (nativePath, m, destPoints, destPoints.Length,\r
- srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, warpMode, flatness);\r
-\r
- GDIPlus.CheckStatus (s);\r
- }\r
- \r
- public void Widen (Pen pen)\r
- {\r
- Widen (pen, null, 1.0f / 4.0f);\r
- } \r
- \r
- public void Widen (Pen pen, Matrix matrix)\r
- { \r
- Widen (pen, matrix, 1.0f / 4.0f);\r
- } \r
- \r
- [MonoTODO]\r
- public void Widen (Pen pen, Matrix matrix, float flatness)\r
- {\r
- IntPtr p = (pen == null) ? IntPtr.Zero : pen.nativeObject;\r
- IntPtr m = (matrix == null) ? IntPtr.Zero : matrix.nativeMatrix;\r
-\r
- Status s = GDIPlus.GdipWidenPath (nativePath, p, m, flatness);\r
-\r
- GDIPlus.CheckStatus (s);\r
- } \r
- }\r
-}\r
-\r
-\r
+
+using System;
+using System.Drawing;
+using System.Runtime.InteropServices;
+
+namespace System.Drawing.Drawing2D
+{
+ public sealed class GraphicsPath : MarshalByRefObject, ICloneable, IDisposable {
+
+ internal IntPtr nativePath = IntPtr.Zero;
+
+ GraphicsPath (IntPtr ptr)
+ {
+ nativePath = ptr;
+ }
+
+ public GraphicsPath ()
+ {
+ Status status = GDIPlus.GdipCreatePath (FillMode.Alternate, out nativePath);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public GraphicsPath (FillMode fillMode)
+ {
+ Status status = GDIPlus.GdipCreatePath (fillMode, out nativePath);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public GraphicsPath (Point[] pts, byte[] types)
+ {
+ Status status = GDIPlus.GdipCreatePath2I (
+ pts, types, pts.Length, FillMode.Alternate, out nativePath);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public GraphicsPath (PointF[] pts, byte[] types)
+ {
+ Status status = GDIPlus.GdipCreatePath2 (pts, types, pts.Length, FillMode.Alternate, out nativePath);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public GraphicsPath (Point[] pts, byte[] types, FillMode fillMode)
+ {
+ Status status = GDIPlus.GdipCreatePath2I (
+ pts, types, pts.Length, fillMode, out nativePath);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public GraphicsPath (PointF[] pts, byte[] types, FillMode fillMode)
+ {
+ Status status = GDIPlus.GdipCreatePath2 (pts, types, pts.Length, fillMode, out nativePath);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public object Clone ()
+ {
+ IntPtr clone;
+
+ Status status = GDIPlus.GdipClonePath (nativePath, out clone);
+ GDIPlus.CheckStatus (status);
+
+ return new GraphicsPath (clone);
+ }
+
+ public void Dispose ()
+ {
+ Dispose (true);
+ System.GC.SuppressFinalize (this);
+ }
+
+ ~GraphicsPath ()
+ {
+ Dispose (false);
+ }
+
+ void Dispose (bool disposing)
+ {
+
+ }
+
+
+ public FillMode FillMode {
+ get {
+
+ FillMode mode;
+ Status status = GDIPlus.GdipGetPathFillMode (nativePath, out mode);
+ GDIPlus.CheckStatus (status);
+
+ return mode;
+ }
+
+ set {
+ Status status = GDIPlus.GdipSetPathFillMode (nativePath, value);
+ GDIPlus.CheckStatus (status);
+ }
+ }
+
+ public PathData PathData {
+
+ get {
+ IntPtr tmp;
+ Status status = GDIPlus.GdipGetPathData (nativePath, out tmp);
+ GDIPlus.CheckStatus (status);
+
+ throw new Exception ();
+ }
+ }
+
+ public PointF [] PathPoints {
+
+ get {
+ int count;
+
+ Status status = GDIPlus.GdipGetPointCount (nativePath, out count);
+ GDIPlus.CheckStatus (status);
+
+ PointF [] points = new PointF [count];
+
+ status = GDIPlus.GdipGetPathPoints (nativePath, points, count);
+ GDIPlus.CheckStatus (status);
+
+ return points;
+ }
+ }
+
+ public byte [] PathTypes {
+
+ get {
+ int count;
+ Status status = GDIPlus.GdipGetPointCount (nativePath, out count);
+ GDIPlus.CheckStatus (status);
+
+ byte [] types = new byte [count];
+ status = GDIPlus.GdipGetPathTypes (nativePath, types, count);
+ GDIPlus.CheckStatus (status);
+
+ return types;
+ }
+ }
+
+ public int PointCount {
+
+ get {
+ int count;
+
+ Status status = GDIPlus.GdipGetPointCount (nativePath, out count);
+ GDIPlus.CheckStatus (status);
+
+ return count;
+ }
+ }
+
+ internal IntPtr NativeObject{
+
+ get {
+ return nativePath;
+ }
+ set {
+ nativePath = value;
+ }
+ }
+
+ //
+ // AddArc
+ //
+ public void AddArc (Rectangle rect, float start_angle, float sweep_angle)
+ {
+ Status status = GDIPlus.GdipAddPathArcI (nativePath, rect.X, rect.Y, rect.Width, rect.Height, start_angle, sweep_angle);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void AddArc (RectangleF rect, float start_angle, float sweep_angle)
+ {
+ Status status = GDIPlus.GdipAddPathArc (nativePath, rect.X, rect.Y, rect.Width, rect.Height, start_angle, sweep_angle);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void AddArc (int x, int y, int width, int height, float start_angle, float sweep_angle)
+ {
+ Status status = GDIPlus.GdipAddPathArcI (nativePath, x, y, width, height, start_angle, sweep_angle);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void AddArc (float x, float y, float width, float height, float start_angle, float sweep_angle)
+ {
+ Status status = GDIPlus.GdipAddPathArc (nativePath, x, y, width, height, start_angle, sweep_angle);
+ GDIPlus.CheckStatus (status);
+ }
+
+ //
+ // AddBezier
+ //
+ public void AddBezier (Point pt1, Point pt2, Point pt3, Point pt4)
+ {
+ Status status = GDIPlus.GdipAddPathBezierI (nativePath, pt1.X, pt1.Y,
+ pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y);
+
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void AddBezier (PointF pt1, PointF pt2, PointF pt3, PointF pt4)
+ {
+ Status status = GDIPlus.GdipAddPathBezier (nativePath, pt1.X, pt1.Y,
+ pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y);
+
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void AddBezier (int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)
+ {
+ Status status = GDIPlus.GdipAddPathBezierI (nativePath, x1, y1, x2, y2, x3, y3, x4, y4);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void AddBezier (float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4)
+ {
+ Status status = GDIPlus.GdipAddPathBezier (nativePath, x1, y1, x2, y2, x3, y3, x4, y4);
+ GDIPlus.CheckStatus (status);
+ }
+
+ //
+ // AddBeziers
+ //
+ public void AddBeziers (Point [] pts)
+ {
+ Status status = GDIPlus.GdipAddPathBeziersI (nativePath, pts, pts.Length);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void AddBeziers (PointF [] pts)
+ {
+ Status status = GDIPlus.GdipAddPathBeziers (nativePath, pts, pts.Length);
+ GDIPlus.CheckStatus (status);
+ }
+
+ //
+ // AddEllipse
+ //
+ public void AddEllipse (RectangleF r)
+ {
+ Status status = GDIPlus.GdipAddPathEllipse (nativePath, r.X, r.Y, r.Width, r.Height);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void AddEllipse (float x, float y, float width, float height)
+ {
+ Status status = GDIPlus.GdipAddPathEllipse (nativePath, x, y, width, height);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void AddEllipse (Rectangle r)
+ {
+ Status status = GDIPlus.GdipAddPathEllipseI (nativePath, r.X, r.Y, r.Width, r.Height);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void AddEllipse (int x, int y, int width, int height)
+ {
+ Status status = GDIPlus.GdipAddPathEllipseI (nativePath, x, y, width, height);
+ GDIPlus.CheckStatus (status);
+ }
+
+
+ //
+ // AddLine
+ //
+ public void AddLine (Point a, Point b)
+ {
+ Status status = GDIPlus.GdipAddPathLineI (nativePath, a.X, a.Y, b.X, b.Y);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void AddLine (PointF a, PointF b)
+ {
+ Status status = GDIPlus.GdipAddPathLine (nativePath, a.X, a.Y, b.X,
+ b.Y);
+
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void AddLine (int x1, int y1, int x2, int y2)
+ {
+ Status status = GDIPlus.GdipAddPathLineI (nativePath, x1, y1, x2, y2);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void AddLine (float x1, float y1, float x2, float y2)
+ {
+ Status status = GDIPlus.GdipAddPathLine (nativePath, x1, y1, x2,
+ y2);
+
+ GDIPlus.CheckStatus (status);
+ }
+
+ //
+ // AddLines
+ //
+ public void AddLines (Point [] points)
+ {
+ int length = points.Length;
+
+ for (int i = 0; i < length - 2; i += 2) {
+ int j = i + 1;
+ Status status = GDIPlus.GdipAddPathLineI (
+ nativePath, points [i].X, points [i].Y, points [j].X, points [j].Y);
+ GDIPlus.CheckStatus (status);
+ }
+ }
+
+ public void AddLines (PointF [] points)
+ {
+ int length = points.Length;
+
+ for (int i = 0; i < length - 2; i += 2) {
+ int j = i + 1;
+ Status status = GDIPlus.GdipAddPathLine (
+ nativePath, points [i].X, points [i].Y, points [j].X, points [j].Y);
+ GDIPlus.CheckStatus (status);
+ }
+ }
+
+ //
+ // AddPie
+ //
+ public void AddPie (Rectangle rect, float startAngle, float sweepAngle)
+ {
+ Status status = GDIPlus.GdipAddPathPie (
+ nativePath, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void AddPie (int x, int y, int width, int height, float startAngle, float sweepAngle)
+ {
+ Status status = GDIPlus.GdipAddPathPieI (nativePath, x, y, width, height, startAngle, sweepAngle);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void AddPie (float x, float y, float width, float height, float startAngle, float sweepAngle)
+ {
+ Status status = GDIPlus.GdipAddPathPie (nativePath, x, y, width, height, startAngle, sweepAngle);
+ GDIPlus.CheckStatus (status);
+ }
+
+ //
+ // AddPolygon
+ //
+ public void AddPolygon (Point [] points)
+ {
+ Status status = GDIPlus.GdipAddPathPolygonI (nativePath, points, points.Length);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void AddPolygon (PointF [] points)
+ {
+ Status status = GDIPlus.GdipAddPathPolygon (nativePath, points, points.Length);
+ GDIPlus.CheckStatus (status);
+ }
+
+ //
+ // AddRectangle
+ //
+ public void AddRectangle (Rectangle rect)
+ {
+ Status status = GDIPlus.GdipAddPathRectangleI (nativePath, rect.X, rect.Y, rect.Width, rect.Height);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void AddRectangle (RectangleF rect)
+ {
+ Status status = GDIPlus.GdipAddPathRectangle (nativePath, rect.X, rect.Y, rect.Width, rect.Height);
+ GDIPlus.CheckStatus (status);
+ }
+
+ //
+ // AddRectangles
+ //
+ public void AddRectangles (Rectangle [] rects)
+ {
+ Status status = GDIPlus.GdipAddPathRectanglesI (nativePath, rects, rects.Length);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void AddRectangles (RectangleF [] rects)
+ {
+ Status status = GDIPlus.GdipAddPathRectangles (nativePath, rects, rects.Length);
+ GDIPlus.CheckStatus (status);
+ }
+
+ //
+ // AddPath
+ //
+ public void AddPath (GraphicsPath addingPath, bool connect)
+ {
+ Status status = GDIPlus.GdipAddPathPath (nativePath, addingPath.nativePath, connect);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public PointF GetLastPoint ()
+ {
+ PointF pt;
+ Status status = GDIPlus.GdipGetPathLastPoint (nativePath, out pt);
+ GDIPlus.CheckStatus (status);
+
+ return pt;
+ }
+
+ //
+ // AddClosedCurve
+ //
+ public void AddClosedCurve (Point [] points)
+ {
+ Status status = GDIPlus.GdipAddPathClosedCurveI (nativePath, points, points.Length);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void AddClosedCurve (PointF [] points)
+ {
+ Status status = GDIPlus.GdipAddPathClosedCurve (nativePath, points, points.Length);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void AddClosedCurve (Point [] points, float tension)
+ {
+ Status status = GDIPlus.GdipAddPathClosedCurve2I (nativePath, points, points.Length, tension);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void AddClosedCurve (PointF [] points, float tension)
+ {
+ Status status = GDIPlus.GdipAddPathClosedCurve2 (nativePath, points, points.Length, tension);
+ GDIPlus.CheckStatus (status);
+ }
+
+ //
+ // AddCurve
+ //
+ public void AddCurve (Point [] points)
+ {
+ Status status = GDIPlus.GdipAddPathCurveI (nativePath, points, points.Length);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void AddCurve (PointF [] points)
+ {
+ Status status = GDIPlus.GdipAddPathCurve (nativePath, points, points.Length);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void AddCurve (Point [] points, float tension)
+ {
+ Status status = GDIPlus.GdipAddPathCurve2I (nativePath, points, points.Length, tension);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void AddCurve (PointF [] points, float tension)
+ {
+ Status status = GDIPlus.GdipAddPathCurve2 (nativePath, points, points.Length, tension);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void AddCurve (Point [] points, int offset, int numberOfSegments, float tension)
+ {
+ Status status = GDIPlus.GdipAddPathCurve3I (nativePath, points, points.Length,
+ offset, numberOfSegments, tension);
+
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void AddCurve (PointF [] points, int offset, int numberOfSegments, float tension)
+ {
+ Status status = GDIPlus.GdipAddPathCurve3 (nativePath, points, points.Length,
+ offset, numberOfSegments, tension);
+
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void Reset ()
+ {
+ Status status = GDIPlus.GdipResetPath (nativePath);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void Reverse ()
+ {
+ Status status = GDIPlus.GdipReversePath (nativePath);
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void Transform (Matrix matrix)
+ {
+ Status status = GDIPlus.GdipTransformPath (nativePath, matrix.nativeMatrix);
+ GDIPlus.CheckStatus (status);
+ }
+
+ [MonoTODO]
+ public void AddString (string s, FontFamily family, int style, float emSize, Point origin, StringFormat format)
+ {
+ throw new NotImplementedException ();
+ }
+
+ [MonoTODO]
+ public void AddString (string s, FontFamily family, int style, float emSize, PointF origin, StringFormat format)
+ {
+ throw new NotImplementedException ();
+ }
+
+ [MonoTODO]
+ public void AddString (string s, FontFamily family, int style, float emSize, Rectangle layoutRect, StringFormat format)
+ {
+ throw new NotImplementedException ();
+ }
+
+ [MonoTODO]
+ public void AddString (string s, FontFamily family, int style, float emSize, RectangleF layoutRect, StringFormat format)
+ {
+ throw new NotImplementedException ();
+ }
+
+ public void ClearMarkers()
+ {
+ Status s = GDIPlus.GdipClearPathMarkers (nativePath);
+
+ GDIPlus.CheckStatus (s);
+ }
+
+ public void CloseAllFigures()
+ {
+ Status s = GDIPlus.GdipClosePathFigures (nativePath);
+
+ GDIPlus.CheckStatus (s);
+ }
+
+ public void CloseFigure()
+ {
+ Status s = GDIPlus.GdipClosePathFigure (nativePath);
+
+ GDIPlus.CheckStatus (s);
+ }
+
+ public void Flatten ()
+ {
+ // 1/4 is the FlatnessDefault as defined in GdiPlusEnums.h
+ Flatten (null, 1.0f / 4.0f);
+ }
+
+ public void Flatten (Matrix matrix)
+ {
+ Flatten (matrix, 1.0f / 4.0f);
+ }
+
+ public void Flatten (Matrix matrix, float flatness)
+ {
+ Status status = GDIPlus.GdipFlattenPath (nativePath, matrix.nativeMatrix, flatness);
+
+ GDIPlus.CheckStatus (status);
+ }
+
+ public RectangleF GetBounds ()
+ {
+ return GetBounds (null, null);
+ }
+
+ public RectangleF GetBounds (Matrix matrix)
+ {
+ return GetBounds (matrix, null);
+ }
+
+ [MonoTODO]
+ public RectangleF GetBounds (Matrix matrix, Pen pen)
+ {
+ RectangleF retval;
+ IntPtr m = (matrix == null) ? IntPtr.Zero : matrix.nativeMatrix;
+ IntPtr p = (pen == null) ? IntPtr.Zero : pen.nativeObject;
+
+ Status s = GDIPlus.GdipGetPathWorldBounds (nativePath, out retval, m, p);
+
+ GDIPlus.CheckStatus (s);
+
+ return retval;
+ }
+
+ public bool IsOutlineVisible (Point point, Pen pen)
+ {
+ return IsOutlineVisible (point.X, point.Y, pen, null);
+ }
+
+ public bool IsOutlineVisible (PointF point, Pen pen)
+ {
+ return IsOutlineVisible (point.X, point.Y, pen, null);
+ }
+
+ public bool IsOutlineVisible (int x, int y, Pen pen)
+ {
+ return IsOutlineVisible (x, y, pen, null);
+ }
+
+ public bool IsOutlineVisible (float x, float y, Pen pen)
+ {
+ return IsOutlineVisible (x, y, pen, null);
+ }
+
+ public bool IsOutlineVisible (Point pt, Pen pen, Graphics graphics)
+ {
+ return IsOutlineVisible (pt.X, pt.Y, pen, graphics);
+ }
+
+ public bool IsOutlineVisible (PointF pt, Pen pen, Graphics graphics)
+ {
+ return IsOutlineVisible (pt.X, pt.Y, pen, graphics);
+ }
+
+ [MonoTODO]
+ public bool IsOutlineVisible (int x, int y, Pen pen, Graphics graphics)
+ {
+ bool result;
+ IntPtr g = (graphics == null) ? IntPtr.Zero : graphics.nativeObject;
+
+ Status s = GDIPlus.GdipIsOutlineVisiblePathPointI (nativePath, x, y, g, out result);
+ GDIPlus.CheckStatus (s);
+
+ return result;
+ }
+
+ [MonoTODO]
+ public bool IsOutlineVisible (float x, float y, Pen pen, Graphics graphics)
+ {
+ bool result;
+ IntPtr g = (graphics == null) ? IntPtr.Zero : graphics.nativeObject;
+
+ Status s = GDIPlus.GdipIsOutlineVisiblePathPoint (nativePath, x, y, g, out result);
+ GDIPlus.CheckStatus (s);
+
+ return result;
+ }
+
+ public bool IsVisible (Point point)
+ {
+ return IsVisible (point.X, point.Y, null);
+ }
+
+ public bool IsVisible (PointF point)
+ {
+ return IsVisible (point.X, point.Y, null);
+ }
+
+ public bool IsVisible (int x, int y)
+ {
+ return IsVisible (x, y, null);
+ }
+
+ public bool IsVisible (float x, float y)
+ {
+ return IsVisible (x, y, null);
+ }
+
+ public bool IsVisible (Point pt, Graphics graphics)
+ {
+ return IsVisible (pt.X, pt.Y, graphics);
+ }
+
+ public bool IsVisible (PointF pt, Graphics graphics)
+ {
+ return IsVisible (pt.X, pt.Y, graphics);
+ }
+
+ [MonoTODO]
+ public bool IsVisible (int x, int y, Graphics graphics)
+ {
+ bool retval;
+
+ IntPtr g = (graphics == null) ? IntPtr.Zero : graphics.nativeObject;
+
+ Status s = GDIPlus.GdipIsVisiblePathPointI (nativePath, x, y, g, out retval);
+
+ GDIPlus.CheckStatus (s);
+
+ return retval;
+ }
+
+ [MonoTODO]
+ public bool IsVisible (float x, float y, Graphics graphics)
+ {
+ bool retval;
+
+ IntPtr g = (graphics == null) ? IntPtr.Zero : graphics.nativeObject;
+
+ Status s = GDIPlus.GdipIsVisiblePathPoint (nativePath, x, y, g, out retval);
+
+ GDIPlus.CheckStatus (s);
+
+ return retval;
+ }
+
+ public void SetMarkers ()
+ {
+ Status s = GDIPlus.GdipSetPathMarker (nativePath);
+
+ GDIPlus.CheckStatus (s);
+ }
+
+ public void StartFigure()
+ {
+ Status s = GDIPlus.GdipStartPathFigure (nativePath);
+
+ GDIPlus.CheckStatus (s);
+ }
+
+ public void Warp (PointF[] destPoints, RectangleF srcRect)
+ {
+ Warp (destPoints, srcRect, null, WarpMode.Perspective, 1.0f / 4.0f);
+ }
+
+ public void Warp (PointF[] destPoints, RectangleF srcRect, Matrix matrix)
+ {
+ Warp (destPoints, srcRect, matrix, WarpMode.Perspective, 1.0f / 4.0f);
+ }
+
+ public void Warp (PointF[] destPoints, RectangleF srcRect, Matrix matrix, WarpMode warpMode)
+ {
+ Warp (destPoints, srcRect, matrix, warpMode, 1.0f / 4.0f);
+ }
+
+ [MonoTODO]
+ public void Warp (PointF[] destPoints, RectangleF srcRect, Matrix matrix, WarpMode warpMode, float flatness)
+ {
+ IntPtr m = (matrix == null) ? IntPtr.Zero : matrix.nativeMatrix;
+
+ Status s = GDIPlus.GdipWarpPath (nativePath, m, destPoints, destPoints.Length,
+ srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, warpMode, flatness);
+
+ GDIPlus.CheckStatus (s);
+ }
+
+ public void Widen (Pen pen)
+ {
+ Widen (pen, null, 1.0f / 4.0f);
+ }
+
+ public void Widen (Pen pen, Matrix matrix)
+ {
+ Widen (pen, matrix, 1.0f / 4.0f);
+ }
+
+ [MonoTODO]
+ public void Widen (Pen pen, Matrix matrix, float flatness)
+ {
+ IntPtr p = (pen == null) ? IntPtr.Zero : pen.nativeObject;
+ IntPtr m = (matrix == null) ? IntPtr.Zero : matrix.nativeMatrix;
+
+ Status s = GDIPlus.GdipWidenPath (nativePath, p, m, flatness);
+
+ GDIPlus.CheckStatus (s);
+ }
+ }
+}
+
+
-//\r
-// System.Drawing.Drawing2D.Matrix.cs\r
-//\r
-// Authors:\r
-// Stefan Maierhofer <sm@cg.tuwien.ac.at>\r
-// Dennis Hayes (dennish@Raytek.com)\r
-// Duncan Mak (duncan@ximian.com)\r
+//
+// System.Drawing.Drawing2D.Matrix.cs
+//
+// Authors:
+// Stefan Maierhofer <sm@cg.tuwien.ac.at>
+// Dennis Hayes (dennish@Raytek.com)
+// Duncan Mak (duncan@ximian.com)
// Ravindra (rkumar@novell.com)
-//\r
+//
// (C) Ximian, Inc. http://www.ximian.com
-// (C) Novell, Inc. http://www.novell.com\r
-//\r
+// (C) Novell, Inc. http://www.novell.com
+//
//
// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-\r
-using System;\r
-using System.Drawing;\r
-using System.Runtime.InteropServices;\r
-\r
-namespace System.Drawing.Drawing2D\r
-{\r
- public sealed class Matrix : MarshalByRefObject, IDisposable\r
- {\r
- internal IntPtr nativeMatrix;\r
- \r
- // constructors\r
- internal Matrix (IntPtr ptr)\r
- {\r
- nativeMatrix = ptr;\r
- }\r
- \r
- public Matrix ()\r
- {\r
+
+using System;
+using System.Drawing;
+using System.Runtime.InteropServices;
+
+namespace System.Drawing.Drawing2D
+{
+ public sealed class Matrix : MarshalByRefObject, IDisposable
+ {
+ internal IntPtr nativeMatrix;
+
+ // constructors
+ internal Matrix (IntPtr ptr)
+ {
+ nativeMatrix = ptr;
+ }
+
+ public Matrix ()
+ {
Status status = GDIPlus.GdipCreateMatrix (out nativeMatrix);
- GDIPlus.CheckStatus (status);\r
- }\r
- \r
- public Matrix (Rectangle rect , Point[] plgpts)\r
- {\r
+ GDIPlus.CheckStatus (status);
+ }
+
+ public Matrix (Rectangle rect , Point[] plgpts)
+ {
Status status = GDIPlus.GdipCreateMatrix3I (rect, plgpts, out nativeMatrix);
- GDIPlus.CheckStatus (status);\r
- }\r
- \r
- public Matrix (RectangleF rect , PointF[] pa)\r
- {\r
+ GDIPlus.CheckStatus (status);
+ }
+
+ public Matrix (RectangleF rect , PointF[] pa)
+ {
Status status = GDIPlus.GdipCreateMatrix3 (rect, pa, out nativeMatrix);
- GDIPlus.CheckStatus (status);\r
- }\r
-\r
- public Matrix (float m11, float m12, float m21, float m22, float dx, float dy)\r
- {\r
+ GDIPlus.CheckStatus (status);
+ }
+
+ public Matrix (float m11, float m12, float m21, float m22, float dx, float dy)
+ {
Status status = GDIPlus.GdipCreateMatrix2 (m11, m12, m21, m22, dx, dy, out nativeMatrix);
- GDIPlus.CheckStatus (status);\r
- }\r
- \r
- // properties\r
- public float[] Elements {\r
- get {\r
- IntPtr tmp = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (float)) * 6);\r
- float [] retval = new float [6];\r
-\r
- Status status = GDIPlus.GdipGetMatrixElements (nativeMatrix, tmp);\r
+ GDIPlus.CheckStatus (status);
+ }
+
+ // properties
+ public float[] Elements {
+ get {
+ IntPtr tmp = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (float)) * 6);
+ float [] retval = new float [6];
+
+ Status status = GDIPlus.GdipGetMatrixElements (nativeMatrix, tmp);
+ GDIPlus.CheckStatus (status);
+
+ Marshal.Copy (tmp, retval, 0, 6);
+
+ Marshal.FreeHGlobal (tmp);
+ return retval;
+ }
+ }
+
+ public bool IsIdentity {
+ get {
+ bool retval;
+ Status status = GDIPlus.GdipIsMatrixIdentity (nativeMatrix, out retval);
+ GDIPlus.CheckStatus (status);
+ return retval;
+ }
+ }
+
+ public bool IsInvertible {
+ get {
+ bool retval;
+ Status status = GDIPlus.GdipIsMatrixInvertible (nativeMatrix, out retval);
GDIPlus.CheckStatus (status);
-\r
- Marshal.Copy (tmp, retval, 0, 6);\r
-\r
- Marshal.FreeHGlobal (tmp);\r
- return retval;\r
- }\r
- }\r
- \r
- public bool IsIdentity {\r
- get {\r
- bool retval;\r
- Status status = GDIPlus.GdipIsMatrixIdentity (nativeMatrix, out retval);\r
- GDIPlus.CheckStatus (status);\r
- return retval;\r
- }\r
- }\r
- \r
- public bool IsInvertible {\r
- get {\r
- bool retval;\r
- Status status = GDIPlus.GdipIsMatrixInvertible (nativeMatrix, out retval);\r
- GDIPlus.CheckStatus (status);\r
- return retval;\r
- }\r
- }\r
- \r
- public float OffsetX {\r
- get {\r
- return this.Elements [4];\r
- }\r
- }\r
- \r
- public float OffsetY {\r
- get {\r
- return this.Elements [5];\r
- }\r
- }\r
-\r
- public Matrix Clone()\r
- {\r
- IntPtr retval;\r
+ return retval;
+ }
+ }
+
+ public float OffsetX {
+ get {
+ return this.Elements [4];
+ }
+ }
+
+ public float OffsetY {
+ get {
+ return this.Elements [5];
+ }
+ }
+
+ public Matrix Clone()
+ {
+ IntPtr retval;
Status status = GDIPlus.GdipCloneMatrix (nativeMatrix, out retval);
- GDIPlus.CheckStatus (status);\r
- return new Matrix (retval);\r
- }\r
- \r
- \r
- public void Dispose ()\r
- {\r
+ GDIPlus.CheckStatus (status);
+ return new Matrix (retval);
+ }
+
+
+ public void Dispose ()
+ {
Status status = GDIPlus.GdipDeleteMatrix (nativeMatrix);
- GDIPlus.CheckStatus (status);\r
- } \r
- \r
- public override bool Equals (object obj)\r
- {\r
- Matrix m = obj as Matrix;\r
-\r
- if (m != null) {\r
- bool retval;\r
+ GDIPlus.CheckStatus (status);
+ }
+
+ public override bool Equals (object obj)
+ {
+ Matrix m = obj as Matrix;
+
+ if (m != null) {
+ bool retval;
Status status = GDIPlus.GdipIsMatrixEqual (nativeMatrix, m.nativeMatrix, out retval);
- GDIPlus.CheckStatus (status);\r
- return retval;\r
-\r
- } else\r
- return false;\r
- }\r
- \r
- ~Matrix()\r
- {\r
- Dispose ();\r
- }\r
- \r
- public override int GetHashCode ()\r
- {\r
- return base.GetHashCode ();\r
- }\r
- \r
- public void Invert ()\r
- {\r
+ GDIPlus.CheckStatus (status);
+ return retval;
+
+ } else
+ return false;
+ }
+
+ ~Matrix()
+ {
+ Dispose ();
+ }
+
+ public override int GetHashCode ()
+ {
+ return base.GetHashCode ();
+ }
+
+ public void Invert ()
+ {
Status status = GDIPlus.GdipInvertMatrix (nativeMatrix);
- GDIPlus.CheckStatus (status);\r
- }\r
- \r
- public void Multiply (Matrix matrix)\r
- {\r
- Multiply (matrix, MatrixOrder.Prepend);\r
- }\r
- \r
- public void Multiply (Matrix matrix, MatrixOrder order)\r
- {\r
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void Multiply (Matrix matrix)
+ {
+ Multiply (matrix, MatrixOrder.Prepend);
+ }
+
+ public void Multiply (Matrix matrix, MatrixOrder order)
+ {
Status status = GDIPlus.GdipMultiplyMatrix (nativeMatrix, matrix.nativeMatrix, order);
- GDIPlus.CheckStatus (status);\r
- }\r
- \r
- public void Reset()\r
- {\r
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void Reset()
+ {
Status status = GDIPlus.GdipSetMatrixElements (nativeMatrix, 1, 0, 0, 1, 0, 0);
- GDIPlus.CheckStatus (status);\r
- }\r
- \r
- public void Rotate (float angle)\r
- {\r
- Rotate (angle, MatrixOrder.Prepend);\r
- }\r
- \r
- public void Rotate (float angle, MatrixOrder order)\r
- {\r
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void Rotate (float angle)
+ {
+ Rotate (angle, MatrixOrder.Prepend);
+ }
+
+ public void Rotate (float angle, MatrixOrder order)
+ {
Status status = GDIPlus.GdipRotateMatrix (nativeMatrix, angle, order);
- GDIPlus.CheckStatus (status);\r
- }\r
- \r
- public void RotateAt (float angle, PointF point)\r
- {\r
- RotateAt (angle, point, MatrixOrder.Prepend);\r
- }\r
- \r
- public void RotateAt (float angle, PointF point, MatrixOrder order)\r
- {\r
- angle *= (float) (Math.PI / 180.0); // degrees to radians\r
- float cos = (float) Math.Cos (angle);\r
- float sin = (float) Math.Sin (angle);\r
- float e4 = -point.X * cos + point.Y * sin + point.X;\r
- float e5 = -point.X * sin - point.Y * cos + point.Y;\r
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void RotateAt (float angle, PointF point)
+ {
+ RotateAt (angle, point, MatrixOrder.Prepend);
+ }
+
+ public void RotateAt (float angle, PointF point, MatrixOrder order)
+ {
+ angle *= (float) (Math.PI / 180.0); // degrees to radians
+ float cos = (float) Math.Cos (angle);
+ float sin = (float) Math.Sin (angle);
+ float e4 = -point.X * cos + point.Y * sin + point.X;
+ float e5 = -point.X * sin - point.Y * cos + point.Y;
float[] m = this.Elements;
-\r
+
Status status;
-\r
- if (order == MatrixOrder.Prepend)\r
- status = GDIPlus.GdipSetMatrixElements (nativeMatrix,\r
- cos * m[0] + sin * m[2],\r
- cos * m[1] + sin * m[3],\r
- -sin * m[0] + cos * m[2],\r
- -sin * m[1] + cos * m[3],\r
- e4 * m[0] + e5 * m[2] + m[4],\r
- e4 * m[1] + e5 * m[3] + m[5]);\r
- else\r
- status = GDIPlus.GdipSetMatrixElements (nativeMatrix,\r
- m[0] * cos + m[1] * -sin,\r
- m[0] * sin + m[1] * cos,\r
- m[2] * cos + m[3] * -sin,\r
- m[2] * sin + m[3] * cos,\r
- m[4] * cos + m[5] * -sin + e4,\r
+
+ if (order == MatrixOrder.Prepend)
+ status = GDIPlus.GdipSetMatrixElements (nativeMatrix,
+ cos * m[0] + sin * m[2],
+ cos * m[1] + sin * m[3],
+ -sin * m[0] + cos * m[2],
+ -sin * m[1] + cos * m[3],
+ e4 * m[0] + e5 * m[2] + m[4],
+ e4 * m[1] + e5 * m[3] + m[5]);
+ else
+ status = GDIPlus.GdipSetMatrixElements (nativeMatrix,
+ m[0] * cos + m[1] * -sin,
+ m[0] * sin + m[1] * cos,
+ m[2] * cos + m[3] * -sin,
+ m[2] * sin + m[3] * cos,
+ m[4] * cos + m[5] * -sin + e4,
m[4] * sin + m[5] * cos + e5);
- GDIPlus.CheckStatus (status);\r
- }\r
- \r
- public void Scale (float scaleX, float scaleY)\r
- {\r
- Scale (scaleX, scaleY, MatrixOrder.Prepend);\r
- }\r
- \r
- public void Scale (float scaleX, float scaleY, MatrixOrder order)\r
- {\r
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void Scale (float scaleX, float scaleY)
+ {
+ Scale (scaleX, scaleY, MatrixOrder.Prepend);
+ }
+
+ public void Scale (float scaleX, float scaleY, MatrixOrder order)
+ {
Status status = GDIPlus.GdipScaleMatrix (nativeMatrix, scaleX, scaleY, order);
- GDIPlus.CheckStatus (status);\r
- }\r
- \r
- public void Shear (float shearX, float shearY)\r
- {\r
- Shear (shearX, shearY, MatrixOrder.Prepend);\r
- }\r
- \r
- public void Shear (float shearX, float shearY, MatrixOrder order)\r
- {\r
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void Shear (float shearX, float shearY)
+ {
+ Shear (shearX, shearY, MatrixOrder.Prepend);
+ }
+
+ public void Shear (float shearX, float shearY, MatrixOrder order)
+ {
Status status = GDIPlus.GdipShearMatrix (nativeMatrix, shearX, shearY, order);
- GDIPlus.CheckStatus (status);\r
- }\r
- \r
- public void TransformPoints (Point[] pts)\r
- {\r
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void TransformPoints (Point[] pts)
+ {
Status status = GDIPlus.GdipTransformMatrixPointsI (nativeMatrix, pts, pts.Length);
- GDIPlus.CheckStatus (status);\r
- }\r
- \r
- public void TransformPoints (PointF[] pts)\r
- {\r
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void TransformPoints (PointF[] pts)
+ {
Status status = GDIPlus.GdipTransformMatrixPoints (nativeMatrix, pts, pts.Length);
- GDIPlus.CheckStatus (status);\r
- }\r
- \r
- public void TransformVectors (Point[] pts)\r
- {\r
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void TransformVectors (Point[] pts)
+ {
Status status = GDIPlus.GdipVectorTransformMatrixPointsI (nativeMatrix, pts, pts.Length);
- GDIPlus.CheckStatus (status);\r
- }\r
- \r
- public void TransformVectors (PointF[] pts)\r
- {\r
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void TransformVectors (PointF[] pts)
+ {
Status status = GDIPlus.GdipVectorTransformMatrixPoints (nativeMatrix, pts, pts.Length);
- GDIPlus.CheckStatus (status);\r
- }\r
- \r
- public void Translate (float offsetX, float offsetY)\r
- {\r
- Translate (offsetX, offsetY, MatrixOrder.Prepend);\r
- }\r
- \r
- public void Translate (float offsetX, float offsetY, MatrixOrder order)\r
- {\r
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void Translate (float offsetX, float offsetY)
+ {
+ Translate (offsetX, offsetY, MatrixOrder.Prepend);
+ }
+
+ public void Translate (float offsetX, float offsetY, MatrixOrder order)
+ {
Status status = GDIPlus.GdipTranslateMatrix (nativeMatrix, offsetX, offsetY, order);
- GDIPlus.CheckStatus (status);\r
- }\r
- \r
- public void VectorTransformPoints (Point[] pts)\r
- {\r
- TransformVectors (pts);\r
- }\r
- \r
- internal IntPtr NativeObject\r
- {\r
- get{\r
- return nativeMatrix;\r
- }\r
- set {\r
- nativeMatrix = value;\r
- }\r
- }\r
- }\r
-}\r
+ GDIPlus.CheckStatus (status);
+ }
+
+ public void VectorTransformPoints (Point[] pts)
+ {
+ TransformVectors (pts);
+ }
+
+ internal IntPtr NativeObject
+ {
+ get{
+ return nativeMatrix;
+ }
+ set {
+ nativeMatrix = value;
+ }
+ }
+ }
+}