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
- PolicyValidationException.cs
- HwndStylusInputProvider.cs
- ValueTypeFixupInfo.cs
- _FtpDataStream.cs
- DbConnectionFactory.cs
- CDSCollectionETWBCLProvider.cs
- ComboBoxItem.cs
- EnvelopeVersion.cs
- SpoolingTaskBase.cs
- Utils.cs
- PackageDigitalSignature.cs
- ThreadAttributes.cs
- XhtmlBasicSelectionListAdapter.cs
- TaskFormBase.cs
- Int16AnimationBase.cs
- DrawListViewSubItemEventArgs.cs
- AppDomainManager.cs
- XmlWellformedWriter.cs
- ButtonPopupAdapter.cs
- Identifier.cs
- DeferredTextReference.cs
- DataGridViewCheckBoxColumn.cs
- XmlElement.cs
- SafeRightsManagementQueryHandle.cs
- ImageListUtils.cs
- wmiprovider.cs
- EmptyEnumerator.cs
- ReaderWriterLockSlim.cs
- DependencyPropertyValueSerializer.cs
- SQLUtility.cs
- FixedSOMGroup.cs
- FastEncoderWindow.cs
- FixedSOMTable.cs
- ToolBarButtonDesigner.cs
- QueueProcessor.cs
- _ListenerRequestStream.cs
- BitConverter.cs
- RuleSettings.cs
- FieldAccessException.cs
- CapabilitiesAssignment.cs
- SchemaManager.cs
- Events.cs
- DateTimeOffsetStorage.cs
- ExplicitDiscriminatorMap.cs
- WebEncodingValidator.cs
- TriggerActionCollection.cs
- HtmlInputHidden.cs
- TextDecorationCollection.cs
- HttpWebResponse.cs
- OdbcFactory.cs
- TdsParser.cs
- NativeRecognizer.cs
- Int64AnimationBase.cs
- XomlCompilerResults.cs
- ConversionHelper.cs
- ConnectionStringsExpressionBuilder.cs
- Registration.cs
- RedBlackList.cs
- DefaultPrintController.cs
- KnownColorTable.cs
- FormsAuthentication.cs
- Expression.cs
- NamespaceCollection.cs
- SystemThemeKey.cs
- Vector3DAnimation.cs
- CaseInsensitiveHashCodeProvider.cs
- DrawingContextDrawingContextWalker.cs
- CannotUnloadAppDomainException.cs
- DbDataSourceEnumerator.cs
- BitmapPalette.cs
- StateManagedCollection.cs
- FamilyTypeface.cs
- ConfigXmlText.cs
- HtmlControlPersistable.cs
- DataGridViewDataConnection.cs
- _FixedSizeReader.cs
- DropTarget.cs
- WebPartHeaderCloseVerb.cs
- VariantWrapper.cs
- EditorZoneAutoFormat.cs
- MsmqDiagnostics.cs
- AbstractExpressions.cs
- HwndHostAutomationPeer.cs
- ProfileParameter.cs
- BidOverLoads.cs
- LockCookie.cs
- CommonDialog.cs
- ConstantCheck.cs
- LogWriteRestartAreaState.cs
- _BaseOverlappedAsyncResult.cs
- DecimalAverageAggregationOperator.cs
- ListViewItemSelectionChangedEvent.cs
- ConditionalExpression.cs
- RegularExpressionValidator.cs
- StylusPointPropertyInfo.cs
- LogReserveAndAppendState.cs
- SystemGatewayIPAddressInformation.cs
- ToRequest.cs
- WebPartZone.cs
- HttpHeaderCollection.cs