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
- ReverseInheritProperty.cs
- GenericArgumentsUpdater.cs
- XD.cs
- UpdatePanelControlTrigger.cs
- RelationshipConstraintValidator.cs
- ScrollItemPatternIdentifiers.cs
- PointLight.cs
- PackWebRequestFactory.cs
- ClientProxyGenerator.cs
- RadioButtonRenderer.cs
- AlternateViewCollection.cs
- RegionInfo.cs
- ApplicationException.cs
- XmlCharType.cs
- XmlHierarchicalDataSourceView.cs
- InternalRelationshipCollection.cs
- FontEmbeddingManager.cs
- XmlLangPropertyAttribute.cs
- BamlLocalizabilityResolver.cs
- CompoundFileDeflateTransform.cs
- DataRowExtensions.cs
- DbgCompiler.cs
- WebContext.cs
- BuildProvider.cs
- OperationGenerator.cs
- QuinticEase.cs
- CommandBindingCollection.cs
- RankException.cs
- EntityDataSourceViewSchema.cs
- FlowLayoutSettings.cs
- CompositeCollection.cs
- IsolatedStorageException.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- FontInfo.cs
- FocusWithinProperty.cs
- ActivityDesignerAccessibleObject.cs
- ZipIOLocalFileBlock.cs
- SubMenuStyle.cs
- ErrorHandler.cs
- ParseNumbers.cs
- DtcInterfaces.cs
- MergeEnumerator.cs
- WebPartVerbCollection.cs
- Stack.cs
- DataGridCommandEventArgs.cs
- FunctionImportElement.cs
- DefaultValueTypeConverter.cs
- EnumerableRowCollection.cs
- SafeNativeMethodsCLR.cs
- ProfileService.cs
- EventListener.cs
- ConfigXmlComment.cs
- CorrelationTokenTypeConvertor.cs
- RadioButton.cs
- ActivityMarkupSerializer.cs
- InsufficientMemoryException.cs
- Exceptions.cs
- FindCriteria.cs
- XmlHierarchyData.cs
- ObjectItemConventionAssemblyLoader.cs
- SessionStateContainer.cs
- UIntPtr.cs
- NameValueSectionHandler.cs
- ResourceDescriptionAttribute.cs
- WorkflowRuntimeSection.cs
- ThicknessAnimation.cs
- GridViewUpdateEventArgs.cs
- ForeignKeyFactory.cs
- MDIWindowDialog.cs
- DbDataReader.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- QilInvoke.cs
- ResourceBinder.cs
- SourceItem.cs
- IPPacketInformation.cs
- DrawListViewColumnHeaderEventArgs.cs
- NavigatorInput.cs
- AddInToken.cs
- SQLDecimal.cs
- PeerEndPoint.cs
- ConfigurationValidatorAttribute.cs
- PerfCounters.cs
- EntryIndex.cs
- PropertyKey.cs
- DesignTimeParseData.cs
- NullableFloatAverageAggregationOperator.cs
- ViewBox.cs
- RegistrationServices.cs
- MdImport.cs
- ProcessDesigner.cs
- OutgoingWebResponseContext.cs
- SignedXmlDebugLog.cs
- DashStyle.cs
- OleServicesContext.cs
- Pens.cs
- SymLanguageType.cs
- SyndicationSerializer.cs
- ColorContextHelper.cs
- ErrorStyle.cs
- SchemaImporterExtensionElementCollection.cs