Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / CommonUI / System / Drawing / Advanced / GraphicsPathIterator.cs / 1 / GraphicsPathIterator.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /*************************************************************************\ * * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. * * Module Name: * * GraphicsPathIterator.cs * * Abstract: * * COM+ wrapper for GDI+ path iterator objects * * Revision History: * * 3/15/2000 [....] * Created it. * \**************************************************************************/ namespace System.Drawing.Drawing2D { using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System; using System.Runtime.InteropServices; using Microsoft.Win32; using System.Drawing; using System.ComponentModel; using System.Drawing.Internal; using System.Globalization; /** * Represent a Path Iterator object */ ////// /// public sealed class GraphicsPathIterator : MarshalByRefObject, IDisposable { /** * Create a new path iterator object */ ////// Provides helper functions for the ///class. /// /// /// Initializes a new instance of the public GraphicsPathIterator(GraphicsPath path) { IntPtr nativeIter = IntPtr.Zero; int status = SafeNativeMethods.Gdip.GdipCreatePathIter(out nativeIter, new HandleRef(path, (path == null) ? IntPtr.Zero : path.nativePath)); if (status != SafeNativeMethods.Gdip.Ok) throw SafeNativeMethods.Gdip.StatusException(status); this.nativeIter = nativeIter; } /** * Dispose of resources associated with the */ ///class with the specified . /// /// /// Cleans up Windows resources for this /// public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } void Dispose(bool disposing) { if (nativeIter != IntPtr.Zero) { try{ #if DEBUG int status = #endif SafeNativeMethods.Gdip.GdipDeletePathIter(new HandleRef(this, nativeIter)); #if DEBUG Debug.Assert(status == SafeNativeMethods.Gdip.Ok, "GDI+ returned an error status: " + status.ToString(CultureInfo.InvariantCulture)); #endif } catch( Exception ex ){ if( ClientUtils.IsSecurityOrCriticalException( ex ) ) { throw; } Debug.Fail( "Exception thrown during Dispose: " + ex.ToString() ); } finally{ nativeIter = IntPtr.Zero; } } } ///. /// /// /// Cleans up Windows resources for this /// ~GraphicsPathIterator() { Dispose(false); } /** * Next subpath in path */ ///. /// /// /// Returns the number of subpaths in the /// public int NextSubpath(out int startIndex, out int endIndex, out bool isClosed) { int resultCount = 0; int tempStart = 0; int tempEnd = 0; int status = SafeNativeMethods.Gdip.GdipPathIterNextSubpath(new HandleRef(this, nativeIter), out resultCount, out tempStart, out tempEnd, out isClosed); if (status != SafeNativeMethods.Gdip.Ok) throw SafeNativeMethods.Gdip.StatusException(status); else { startIndex = tempStart; endIndex = tempEnd; } return resultCount; } /** * Next subpath in path */ ///. The start index and end index of the /// next subpath are contained in out parameters. /// /// /// public int NextSubpath(GraphicsPath path, out bool isClosed) { int resultCount = 0; int status = SafeNativeMethods.Gdip.GdipPathIterNextSubpathPath(new HandleRef(this, nativeIter), out resultCount, new HandleRef(path, (path == null) ? IntPtr.Zero : path.nativePath), out isClosed); if (status != SafeNativeMethods.Gdip.Ok) throw SafeNativeMethods.Gdip.StatusException(status); return resultCount; } /** * Next type in subpath */ ///[To be supplied.] ////// /// public int NextPathType(out byte pathType, out int startIndex, out int endIndex) { int resultCount = 0; int status = SafeNativeMethods.Gdip.GdipPathIterNextPathType(new HandleRef(this, nativeIter), out resultCount, out pathType, out startIndex, out endIndex); if (status != SafeNativeMethods.Gdip.Ok) throw SafeNativeMethods.Gdip.StatusException(status); return resultCount; } /** * Next marker in subpath */ ///[To be supplied.] ////// /// public int NextMarker(out int startIndex, out int endIndex) { int resultCount = 0; int status = SafeNativeMethods.Gdip.GdipPathIterNextMarker(new HandleRef(this, nativeIter), out resultCount, out startIndex, out endIndex); if (status != SafeNativeMethods.Gdip.Ok) throw SafeNativeMethods.Gdip.StatusException(status); return resultCount; } /** * Next marker in subpath */ ///[To be supplied.] ////// /// public int NextMarker(GraphicsPath path) { int resultCount = 0; int status = SafeNativeMethods.Gdip.GdipPathIterNextMarkerPath(new HandleRef(this, nativeIter), out resultCount, new HandleRef(path, (path == null) ? IntPtr.Zero : path.nativePath)); if (status != SafeNativeMethods.Gdip.Ok) throw SafeNativeMethods.Gdip.StatusException(status); return resultCount; } ///[To be supplied.] ////// /// public int Count { get { int resultCount = 0; int status = SafeNativeMethods.Gdip.GdipPathIterGetCount(new HandleRef(this, nativeIter), out resultCount); if (status != SafeNativeMethods.Gdip.Ok) throw SafeNativeMethods.Gdip.StatusException(status); return resultCount; } } ///[To be supplied.] ////// /// public int SubpathCount { get { int resultCount = 0; int status = SafeNativeMethods.Gdip.GdipPathIterGetSubpathCount(new HandleRef(this, nativeIter), out resultCount); if (status != SafeNativeMethods.Gdip.Ok) throw SafeNativeMethods.Gdip.StatusException(status); return resultCount; } } ///[To be supplied.] ////// /// public bool HasCurve() { bool hasCurve = false; int status = SafeNativeMethods.Gdip.GdipPathIterHasCurve(new HandleRef(this, nativeIter), out hasCurve); if (status != SafeNativeMethods.Gdip.Ok) throw SafeNativeMethods.Gdip.StatusException(status); return hasCurve; } ///[To be supplied.] ////// /// public void Rewind() { int status = SafeNativeMethods.Gdip.GdipPathIterRewind(new HandleRef(this, nativeIter)); if (status != SafeNativeMethods.Gdip.Ok) throw SafeNativeMethods.Gdip.StatusException(status); } ///[To be supplied.] ////// /// public int Enumerate(ref PointF[] points, ref byte[] types) { if (points.Length != types.Length) throw SafeNativeMethods.Gdip.StatusException(SafeNativeMethods.Gdip.InvalidParameter); int resultCount = 0; GPPOINTF pt = new GPPOINTF(); int size = (int) Marshal.SizeOf(pt.GetType()); int count = points.Length; IntPtr memoryPts = Marshal.AllocHGlobal(count*size); try { int status = SafeNativeMethods.Gdip.GdipPathIterEnumerate(new HandleRef(this, nativeIter), out resultCount, memoryPts, types, points.Length); if (status != SafeNativeMethods.Gdip.Ok) { throw SafeNativeMethods.Gdip.StatusException(status); } points = SafeNativeMethods.Gdip.ConvertGPPOINTFArrayF(memoryPts, points.Length); } finally { Marshal.FreeHGlobal(memoryPts); } return resultCount; } ///[To be supplied.] ////// /// [SuppressMessage("Microsoft.Design", "CA1045:DoNotPassTypesByReference")] public int CopyData(ref PointF[] points, ref byte[] types, int startIndex, int endIndex) { if (points.Length != types.Length) throw SafeNativeMethods.Gdip.StatusException(SafeNativeMethods.Gdip.InvalidParameter); int resultCount = 0; GPPOINTF pt = new GPPOINTF(); int size = (int)Marshal.SizeOf(pt.GetType()); int count = points.Length; IntPtr memoryPts = Marshal.AllocHGlobal(count*size); try { int status = SafeNativeMethods.Gdip.GdipPathIterCopyData(new HandleRef(this, nativeIter), out resultCount, memoryPts, types, startIndex, endIndex); if (status != SafeNativeMethods.Gdip.Ok) { throw SafeNativeMethods.Gdip.StatusException(status); } points = SafeNativeMethods.Gdip.ConvertGPPOINTFArrayF(memoryPts, points.Length); } finally { Marshal.FreeHGlobal(memoryPts); } return resultCount; } /* * handle to native path iterator object */ internal IntPtr nativeIter; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.[To be supplied.] ///
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- GeneralTransformCollection.cs
- HttpAsyncResult.cs
- TextEditorTyping.cs
- MarshalDirectiveException.cs
- SiteMapSection.cs
- MetadataException.cs
- RuleSetReference.cs
- SmtpDateTime.cs
- ProgressiveCrcCalculatingStream.cs
- XmlMemberMapping.cs
- DirectoryObjectSecurity.cs
- ResXDataNode.cs
- TextAdaptor.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- ContextMenuStrip.cs
- UpdatePanelTrigger.cs
- DynamicRendererThreadManager.cs
- SQLDateTimeStorage.cs
- Base64Encoder.cs
- InvocationExpression.cs
- DateTimeFormatInfoScanner.cs
- DrawingServices.cs
- columnmapfactory.cs
- CardSpaceSelector.cs
- EdmItemCollection.cs
- WCFModelStrings.Designer.cs
- ADConnectionHelper.cs
- TableItemStyle.cs
- DataReceivedEventArgs.cs
- ForwardPositionQuery.cs
- PropertyDescriptorComparer.cs
- WindowsUserNameCachingSecurityTokenAuthenticator.cs
- ParameterReplacerVisitor.cs
- RpcCryptoRequest.cs
- SqlMetaData.cs
- GlyphRunDrawing.cs
- Utilities.cs
- listitem.cs
- SoapReflectionImporter.cs
- CodeMemberField.cs
- CaseInsensitiveHashCodeProvider.cs
- QueryExpr.cs
- ClientSettingsProvider.cs
- DynamicDiscoSearcher.cs
- HtmlInputButton.cs
- AttachedPropertyBrowsableAttribute.cs
- XPathChildIterator.cs
- VarInfo.cs
- Array.cs
- SvcMapFile.cs
- CodeSnippetExpression.cs
- XmlWellformedWriter.cs
- ByteAnimationBase.cs
- CompositeFontParser.cs
- Column.cs
- TranslateTransform.cs
- SqlProvider.cs
- RootBuilder.cs
- RayHitTestParameters.cs
- CalendarDateChangedEventArgs.cs
- WindowAutomationPeer.cs
- ParameterBuilder.cs
- CodeLinePragma.cs
- EditorBrowsableAttribute.cs
- PrintDialogException.cs
- DirectionalLight.cs
- ServiceDebugBehavior.cs
- ActiveXHelper.cs
- Crypto.cs
- HashAlgorithm.cs
- FastEncoderWindow.cs
- XmlSchemaSimpleType.cs
- MenuItemAutomationPeer.cs
- StyleXamlParser.cs
- XPathMessageContext.cs
- CodeSubDirectory.cs
- InkSerializer.cs
- WebServiceParameterData.cs
- LogStore.cs
- PrinterSettings.cs
- EntityClassGenerator.cs
- EntityStoreSchemaFilterEntry.cs
- DataControlButton.cs
- WindowsButton.cs
- StylusEditingBehavior.cs
- JsonDataContract.cs
- FillRuleValidation.cs
- SpAudioStreamWrapper.cs
- Int16Animation.cs
- WeakRefEnumerator.cs
- TemplateBindingExtension.cs
- WrapPanel.cs
- FixedSOMTextRun.cs
- BackgroundFormatInfo.cs
- CompressedStack.cs
- TextHidden.cs
- Inflater.cs
- XsdValidatingReader.cs
- UntypedNullExpression.cs
- ImageDrawing.cs