Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Core / CSharp / System / Windows / Media / DrawingServices.cs / 1 / 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
- NoneExcludedImageIndexConverter.cs
- LayoutManager.cs
- EntityCommand.cs
- HandlerMappingMemo.cs
- AdvancedBindingEditor.cs
- XmlHierarchicalDataSourceView.cs
- GraphicsPath.cs
- Scene3D.cs
- BufferBuilder.cs
- SoapEnumAttribute.cs
- CommonProperties.cs
- CategoryNameCollection.cs
- ValueConversionAttribute.cs
- ReadOnlyCollection.cs
- CultureTableRecord.cs
- CompletedAsyncResult.cs
- XmlAttributeCache.cs
- __TransparentProxy.cs
- AsyncWaitHandle.cs
- SqlDataSourceCache.cs
- Matrix3D.cs
- FlowLayoutPanel.cs
- Command.cs
- SerialPinChanges.cs
- QilDataSource.cs
- XmlJsonWriter.cs
- XPathNode.cs
- SmtpReplyReader.cs
- SqlServer2KCompatibilityCheck.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- IPHostEntry.cs
- ArraySortHelper.cs
- PolyLineSegment.cs
- DocumentEventArgs.cs
- WebSysDisplayNameAttribute.cs
- Encoder.cs
- DataExpression.cs
- SamlAssertion.cs
- CodeNamespaceImport.cs
- XMLSchema.cs
- DesignerRegionCollection.cs
- errorpatternmatcher.cs
- AncillaryOps.cs
- GrammarBuilder.cs
- WebPartEditVerb.cs
- Deflater.cs
- Latin1Encoding.cs
- _ConnectStream.cs
- EntityDataSourceReferenceGroup.cs
- ObjectDataSourceSelectingEventArgs.cs
- HttpInputStream.cs
- SafeEventLogWriteHandle.cs
- AppSettingsReader.cs
- WorkflowTimerService.cs
- SqlCacheDependencyDatabase.cs
- CustomMenuItemCollection.cs
- DataAdapter.cs
- UpdatableGenericsFeature.cs
- XmlConverter.cs
- GregorianCalendarHelper.cs
- DataGridColumn.cs
- EventMemberCodeDomSerializer.cs
- OperationSelectorBehavior.cs
- XmlEntity.cs
- PropertyDescriptorGridEntry.cs
- AudioFormatConverter.cs
- NamedObject.cs
- EmptyReadOnlyDictionaryInternal.cs
- Console.cs
- XmlHierarchicalEnumerable.cs
- InternalConfigEventArgs.cs
- LassoHelper.cs
- BufferCache.cs
- XmlCountingReader.cs
- ActivityWithResultConverter.cs
- DrawingGroupDrawingContext.cs
- LocatorPartList.cs
- ToolStrip.cs
- Focus.cs
- FormatPage.cs
- InputReport.cs
- WindowsListViewItem.cs
- OleAutBinder.cs
- RequestCachePolicyConverter.cs
- EmissiveMaterial.cs
- GenerateScriptTypeAttribute.cs
- Underline.cs
- TextChange.cs
- StaticExtension.cs
- sqlpipe.cs
- ObjectListItem.cs
- FieldInfo.cs
- SendMessageContent.cs
- XmlHierarchicalEnumerable.cs
- DrawingGroup.cs
- PreDigestedSignedInfo.cs
- SessionEndingEventArgs.cs
- RegisteredDisposeScript.cs
- SystemWebCachingSectionGroup.cs
- OleDbFactory.cs