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
- DesignerImageAdapter.cs
- XmlSchemaSimpleTypeList.cs
- Byte.cs
- HtmlTableRowCollection.cs
- SerializationInfoEnumerator.cs
- XmlIlTypeHelper.cs
- GenericEnumerator.cs
- PropertyGrid.cs
- CancellationState.cs
- KeyInfo.cs
- IIS7WorkerRequest.cs
- GeometryHitTestResult.cs
- MemberDescriptor.cs
- VirtualizingPanel.cs
- SystemIcons.cs
- SchemaConstraints.cs
- RuleSettings.cs
- DeviceSpecificDesigner.cs
- DebugHandleTracker.cs
- DetailsViewRow.cs
- Control.cs
- CopyAction.cs
- SqlCommandSet.cs
- NamespaceList.cs
- Invariant.cs
- KnowledgeBase.cs
- XmlDictionaryString.cs
- FieldToken.cs
- filewebrequest.cs
- Setter.cs
- Scene3D.cs
- SqlDataSourceConnectionPanel.cs
- XmlQueryRuntime.cs
- SourceItem.cs
- Pens.cs
- ContentValidator.cs
- XappLauncher.cs
- DefinitionUpdate.cs
- EmptyImpersonationContext.cs
- XmlSchemaSimpleType.cs
- NavigateEvent.cs
- URIFormatException.cs
- EncoderFallback.cs
- Application.cs
- Calendar.cs
- SmiEventSink_Default.cs
- ZipIOExtraField.cs
- CfgArc.cs
- basemetadatamappingvisitor.cs
- FunctionDescription.cs
- MissingManifestResourceException.cs
- ColorAnimationUsingKeyFrames.cs
- FormParameter.cs
- MappingException.cs
- XamlReader.cs
- xamlnodes.cs
- FixedTextSelectionProcessor.cs
- HuffmanTree.cs
- rsa.cs
- autovalidator.cs
- CompilerGlobalScopeAttribute.cs
- ProxyWebPart.cs
- WebContext.cs
- ChangesetResponse.cs
- WebFormDesignerActionService.cs
- X509CertificateInitiatorClientCredential.cs
- InvalidContentTypeException.cs
- XmlSignatureManifest.cs
- MimeMultiPart.cs
- AuthenticationModulesSection.cs
- ControlCachePolicy.cs
- FrameworkReadOnlyPropertyMetadata.cs
- OleDbCommand.cs
- QilValidationVisitor.cs
- DataPointer.cs
- AppSettingsReader.cs
- RsaSecurityTokenAuthenticator.cs
- TextCompositionEventArgs.cs
- PrintPageEvent.cs
- KeySpline.cs
- ListDataHelper.cs
- UIElementParaClient.cs
- _OverlappedAsyncResult.cs
- Attributes.cs
- IteratorFilter.cs
- ListBindableAttribute.cs
- ErrorFormatterPage.cs
- HtmlContainerControl.cs
- BuildProvidersCompiler.cs
- FastEncoderWindow.cs
- CompilerTypeWithParams.cs
- ElementHostPropertyMap.cs
- AssemblyCache.cs
- ProfileEventArgs.cs
- InfoCardRSAOAEPKeyExchangeDeformatter.cs
- ToolStripPanelRow.cs
- RequestUriProcessor.cs
- OAVariantLib.cs
- MetadataSource.cs
- PropertyGridEditorPart.cs