Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Media / DrawingServices.cs / 1305600 / DrawingServices.cs
//---------------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // Description: Implements services for Drawings including walking, bounding, // and hit-testing. // // History: // // 2004/11/19 : timothyc - Created it. // //--------------------------------------------------------------------------- using System.Diagnostics; using System.Windows.Media.Animation; namespace System.Windows.Media { ////// Implements services for Drawings including walking, bounding, and /// hit-testing. /// internal static class DrawingServices { ////// Determines whether or not a point exists in a Drawing /// /// Drawing to hit-test /// Point to hit-test for ////// 'true' if the point exists within the drawing, 'false' otherwise /// internal static bool HitTestPoint(Drawing drawing, Point point) { if (drawing != null) { HitTestDrawingContextWalker ctx = new HitTestWithPointDrawingContextWalker(point); drawing.WalkCurrentValue(ctx); return ctx.IsHit; } else { return false; } } ////// Hit-tests a Drawing against a PathGeometry /// /// The drawing to hit test against /// The geometry (in local coordinate space) to hit test. ////// IntersectionDetail that describes the hit result /// internal static IntersectionDetail HitTestGeometry(Drawing drawing, PathGeometry geometry) { if (drawing != null) { HitTestDrawingContextWalker ctx = new HitTestWithGeometryDrawingContextWalker(geometry); drawing.WalkCurrentValue(ctx); return ctx.IntersectionDetail; } else { return IntersectionDetail.Empty; } } ////// Converts a RenderData content representation into a DrawingGroup /// content representation. /// /// The RenderData to convert ////// A new DrawingGroup representation that is functionally equivalent to the /// passed-in RenderData. /// internal static DrawingGroup DrawingGroupFromRenderData(RenderData renderData) { // // Create & open a new DrawingGroup // DrawingGroup drawingGroup = new DrawingGroup(); DrawingContext dc = drawingGroup.Open(); // // Create a DrawingGroup from the RenderData by walking // the RenderData & having it forward it's base value's // and animations to DrawingGroup // // // The Drawing tree we're about to produce should not be an inheritance context, // since that would place all mutable Freezables in the render data into shared // state, which would in turn case them to lose their inheritance context entirely. // This is controlled by setting "CanBeInheritanceContext" to false on the // DrawingContext which will then be applied to all new objects it creates. // DrawingDrawingContext ddc = dc as DrawingDrawingContext; if (ddc != null) { ddc.CanBeInheritanceContext = false; } DrawingContextDrawingContextWalker walker = new DrawingContextDrawingContextWalker(dc); renderData.BaseValueDrawingContextWalk(walker); // // Close the DrawingContext & return the new DrawingGroup // dc.Close(); return drawingGroup; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // Description: Implements services for Drawings including walking, bounding, // and hit-testing. // // History: // // 2004/11/19 : timothyc - Created it. // //--------------------------------------------------------------------------- using System.Diagnostics; using System.Windows.Media.Animation; namespace System.Windows.Media { ////// Implements services for Drawings including walking, bounding, and /// hit-testing. /// internal static class DrawingServices { ////// Determines whether or not a point exists in a Drawing /// /// Drawing to hit-test /// Point to hit-test for ////// 'true' if the point exists within the drawing, 'false' otherwise /// internal static bool HitTestPoint(Drawing drawing, Point point) { if (drawing != null) { HitTestDrawingContextWalker ctx = new HitTestWithPointDrawingContextWalker(point); drawing.WalkCurrentValue(ctx); return ctx.IsHit; } else { return false; } } ////// Hit-tests a Drawing against a PathGeometry /// /// The drawing to hit test against /// The geometry (in local coordinate space) to hit test. ////// IntersectionDetail that describes the hit result /// internal static IntersectionDetail HitTestGeometry(Drawing drawing, PathGeometry geometry) { if (drawing != null) { HitTestDrawingContextWalker ctx = new HitTestWithGeometryDrawingContextWalker(geometry); drawing.WalkCurrentValue(ctx); return ctx.IntersectionDetail; } else { return IntersectionDetail.Empty; } } ////// Converts a RenderData content representation into a DrawingGroup /// content representation. /// /// The RenderData to convert ////// A new DrawingGroup representation that is functionally equivalent to the /// passed-in RenderData. /// internal static DrawingGroup DrawingGroupFromRenderData(RenderData renderData) { // // Create & open a new DrawingGroup // DrawingGroup drawingGroup = new DrawingGroup(); DrawingContext dc = drawingGroup.Open(); // // Create a DrawingGroup from the RenderData by walking // the RenderData & having it forward it's base value's // and animations to DrawingGroup // // // The Drawing tree we're about to produce should not be an inheritance context, // since that would place all mutable Freezables in the render data into shared // state, which would in turn case them to lose their inheritance context entirely. // This is controlled by setting "CanBeInheritanceContext" to false on the // DrawingContext which will then be applied to all new objects it creates. // DrawingDrawingContext ddc = dc as DrawingDrawingContext; if (ddc != null) { ddc.CanBeInheritanceContext = false; } DrawingContextDrawingContextWalker walker = new DrawingContextDrawingContextWalker(dc); renderData.BaseValueDrawingContextWalk(walker); // // Close the DrawingContext & return the new DrawingGroup // dc.Close(); return drawingGroup; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- NavigationFailedEventArgs.cs
- StatusStrip.cs
- TextElement.cs
- CellTreeNode.cs
- SoapElementAttribute.cs
- EditorZone.cs
- AxisAngleRotation3D.cs
- StringFormat.cs
- ThousandthOfEmRealPoints.cs
- SingletonConnectionReader.cs
- SerializationInfoEnumerator.cs
- BitmapDecoder.cs
- XmlNavigatorFilter.cs
- BindMarkupExtensionSerializer.cs
- PatternMatcher.cs
- compensatingcollection.cs
- EncoderReplacementFallback.cs
- HostedTransportConfigurationBase.cs
- SchemaImporterExtensionElementCollection.cs
- OdbcParameter.cs
- ImportContext.cs
- Int64Animation.cs
- QueryOutputWriter.cs
- PackageRelationship.cs
- CacheOutputQuery.cs
- PropertyDescriptors.cs
- ArrayMergeHelper.cs
- URLString.cs
- QilFactory.cs
- PeerCollaborationPermission.cs
- RegexInterpreter.cs
- ContractNamespaceAttribute.cs
- EventRouteFactory.cs
- OleDbCommandBuilder.cs
- SqlInternalConnectionTds.cs
- NamedElement.cs
- DocumentXPathNavigator.cs
- ProviderBase.cs
- SqlMetaData.cs
- OutputCacheModule.cs
- DataSourceCache.cs
- WeakHashtable.cs
- HttpCookie.cs
- ExpressionEditor.cs
- ImageIndexConverter.cs
- ListViewUpdateEventArgs.cs
- ObjectKeyFrameCollection.cs
- InternalSafeNativeMethods.cs
- TextViewBase.cs
- HeaderCollection.cs
- PathStreamGeometryContext.cs
- RuleSettingsCollection.cs
- ReverseInheritProperty.cs
- SplitContainer.cs
- Binding.cs
- ExternalException.cs
- InvokePattern.cs
- AspNetSynchronizationContext.cs
- SocketException.cs
- DBCommand.cs
- GetIndexBinder.cs
- RegisteredHiddenField.cs
- SpecularMaterial.cs
- WindowsHyperlink.cs
- ApplicationSettingsBase.cs
- GetWinFXPath.cs
- DataGridRowAutomationPeer.cs
- MsmqEncryptionAlgorithm.cs
- TransformProviderWrapper.cs
- EmptyQuery.cs
- Point3DCollectionConverter.cs
- UrlAuthorizationModule.cs
- ObjectViewEntityCollectionData.cs
- BitmapEffectDrawingContent.cs
- SqlDataSourceAdvancedOptionsForm.cs
- CheckedPointers.cs
- SQLStringStorage.cs
- TextEditorThreadLocalStore.cs
- CodeMemberField.cs
- DependencyPropertyKind.cs
- OutputCacheProfileCollection.cs
- WindowsSysHeader.cs
- BinHexDecoder.cs
- IntSecurity.cs
- StylusSystemGestureEventArgs.cs
- SemaphoreSecurity.cs
- SystemFonts.cs
- x509utils.cs
- TextEditorCopyPaste.cs
- COAUTHIDENTITY.cs
- ComplusEndpointConfigContainer.cs
- SimpleWebHandlerParser.cs
- EmbossBitmapEffect.cs
- CompilationLock.cs
- AsyncPostBackErrorEventArgs.cs
- CodeAccessSecurityEngine.cs
- ItemDragEvent.cs
- MachineKeyConverter.cs
- PolicyException.cs
- UserControl.cs