diff options
Diffstat (limited to 'mcs/class/System.Drawing/System.Drawing.Drawing2D/GraphicsPathIterator.cs')
-rw-r--r-- | mcs/class/System.Drawing/System.Drawing.Drawing2D/GraphicsPathIterator.cs | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/mcs/class/System.Drawing/System.Drawing.Drawing2D/GraphicsPathIterator.cs b/mcs/class/System.Drawing/System.Drawing.Drawing2D/GraphicsPathIterator.cs new file mode 100644 index 00000000000..dbd2f4341dc --- /dev/null +++ b/mcs/class/System.Drawing/System.Drawing.Drawing2D/GraphicsPathIterator.cs @@ -0,0 +1,202 @@ +// +// System.Drawing.Drawing2D.GraphicsPathIterator.cs +// +// Author: +// Dennis Hayes (dennish@Raytek.com) +// Duncan Mak (duncan@ximian.com) +// Ravindra (rkumar@novell.com) +// +// Copyright (C) 2002/3 Ximian, Inc (http://www.ximian.com) +// +// Copyright (C) 2004 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +using System; +using System.Drawing; + +namespace System.Drawing.Drawing2D +{ + public sealed class GraphicsPathIterator : MarshalByRefObject, IDisposable + { + private IntPtr nativeObject = IntPtr.Zero; + + // Constructors + internal GraphicsPathIterator (IntPtr native) + { + this.nativeObject = native; + } + + public GraphicsPathIterator (GraphicsPath path) + { + Status status = GDIPlus.GdipCreatePathIter (out nativeObject, path.NativeObject); + GDIPlus.CheckStatus (status); + } + + internal IntPtr NativeObject { + get { + return nativeObject; + } + set { + nativeObject = value; + } + } + + // Public Properites + + public int Count { + get { + int count; + Status status = GDIPlus.GdipPathIterGetCount (nativeObject, out count); + GDIPlus.CheckStatus (status); + + return count; + } + } + + public int SubpathCount { + get { + int count; + Status status = GDIPlus.GdipPathIterGetSubpathCount (nativeObject, out count); + GDIPlus.CheckStatus (status); + + return count; + } + } + + internal void Dispose (bool disposing) + { + Status status; + if (nativeObject != IntPtr.Zero) { + status = GDIPlus.GdipDeletePathIter (nativeObject); + GDIPlus.CheckStatus (status); + + nativeObject = IntPtr.Zero; + } + } + + // Public Methods. + + public int CopyData (ref PointF [] points, ref byte [] types, int startIndex, int endIndex) + { + Status status; + int resultCount; + + if (points.Length != types.Length) + throw new ArgumentException ("Invalid arguments passed. Both arrays should have the same length."); + + status = GDIPlus.GdipPathIterCopyData (nativeObject, out resultCount, points, types, startIndex, endIndex); + GDIPlus.CheckStatus (status); + + return resultCount; + } + + public void Dispose () + { + Dispose (true); + System.GC.SuppressFinalize (this); + } + + ~GraphicsPathIterator () + { + Dispose (false); + } + + public int Enumerate (ref PointF [] points, ref byte [] types) + { + Status status; + int resultCount; + int count = points.Length; + + if (count != types.Length) + throw new ArgumentException ("Invalid arguments passed. Both arrays should have the same length."); + + status = GDIPlus.GdipPathIterEnumerate (nativeObject, out resultCount, points, types, count); + GDIPlus.CheckStatus (status); + + return resultCount; + } + + public bool HasCurve () + { + bool curve; + Status status = GDIPlus.GdipPathIterHasCurve (nativeObject, out curve); + GDIPlus.CheckStatus (status); + + return curve; + } + + public int NextMarker (GraphicsPath path) + { + Status status; + int resultCount; + status = GDIPlus.GdipPathIterNextMarkerPath (nativeObject, out resultCount, path.NativeObject); + GDIPlus.CheckStatus (status); + + return resultCount; + } + + public int NextMarker (out int startIndex, out int endIndex) + { + Status status; + int resultCount; + status = GDIPlus.GdipPathIterNextMarker (nativeObject, out resultCount, out startIndex, out endIndex); + GDIPlus.CheckStatus (status); + + return resultCount; + } + + public int NextPathType (out byte pathType, out int startIndex, out int endIndex) + { + Status status; + int resultCount; + status = GDIPlus.GdipPathIterNextPathType (nativeObject, out resultCount, out pathType, out startIndex, out endIndex); + GDIPlus.CheckStatus (status); + + return resultCount; + } + + public int NextSubpath (GraphicsPath path, out bool isClosed) + { + Status status; + int resultCount; + status = GDIPlus.GdipPathIterNextSubpathPath (nativeObject, out resultCount, path.NativeObject, out isClosed); + GDIPlus.CheckStatus (status); + + return resultCount; + } + + public int NextSubpath (out int startIndex, out int endIndex, out bool isClosed) + { + Status status; + int resultCount; + status = GDIPlus.GdipPathIterNextSubpath (nativeObject, out resultCount, out startIndex, out endIndex, out isClosed); + GDIPlus.CheckStatus (status); + + return resultCount; + } + + public void Rewind () + { + Status status = GDIPlus.GdipPathIterRewind (nativeObject); + GDIPlus.CheckStatus (status); + } + } +} |