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
- AlternateViewCollection.cs
- SystemThemeKey.cs
- Win32SafeHandles.cs
- KernelTypeValidation.cs
- DefaultValidator.cs
- ResourceManager.cs
- TableLayoutSettings.cs
- SoapExtensionTypeElement.cs
- WebEventTraceProvider.cs
- HttpStreamXmlDictionaryReader.cs
- DefaultBinder.cs
- UserControlParser.cs
- XamlWriter.cs
- IFlowDocumentViewer.cs
- PictureBox.cs
- DataExpression.cs
- TypeValidationEventArgs.cs
- PageThemeCodeDomTreeGenerator.cs
- CompModSwitches.cs
- WebPartCatalogCloseVerb.cs
- SystemTcpStatistics.cs
- ADMembershipUser.cs
- DeploymentExceptionMapper.cs
- PropertyGridView.cs
- CryptoConfig.cs
- DesignRelation.cs
- CultureInfoConverter.cs
- BrowserPolicyValidator.cs
- ChineseLunisolarCalendar.cs
- NestedContainer.cs
- DefaultObjectSerializer.cs
- OdbcConnectionStringbuilder.cs
- ChangeTracker.cs
- XmlCollation.cs
- GetPageCompletedEventArgs.cs
- HostedHttpContext.cs
- VariantWrapper.cs
- WebPartCollection.cs
- BaseCodePageEncoding.cs
- TextOnlyOutput.cs
- DateTimeParse.cs
- SynchronizingStream.cs
- HebrewCalendar.cs
- XsdDataContractExporter.cs
- SchemaImporterExtensionElement.cs
- TagMapCollection.cs
- WindowsListViewGroupHelper.cs
- XamlPathDataSerializer.cs
- ChannelProtectionRequirements.cs
- ConfigXmlComment.cs
- FontFaceLayoutInfo.cs
- DataGridParentRows.cs
- ClientRequest.cs
- PackageDigitalSignature.cs
- MarginCollapsingState.cs
- RubberbandSelector.cs
- Oci.cs
- WSSecureConversationFeb2005.cs
- XmlEncodedRawTextWriter.cs
- Vector3D.cs
- PickBranchDesigner.xaml.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- ColorInterpolationModeValidation.cs
- XmlNavigatorFilter.cs
- IERequestCache.cs
- VarRefManager.cs
- DataKey.cs
- ColorMatrix.cs
- Comparer.cs
- PerformanceCounter.cs
- UnmanagedMarshal.cs
- CodeGroup.cs
- BitmapEffectCollection.cs
- TrailingSpaceComparer.cs
- EntityDataSourceUtil.cs
- propertyentry.cs
- AssemblyHash.cs
- Filter.cs
- SqlMultiplexer.cs
- StatusBarAutomationPeer.cs
- PersistenceProviderDirectory.cs
- XmlUnspecifiedAttribute.cs
- XmlSchemaRedefine.cs
- Types.cs
- FunctionOverloadResolver.cs
- DesignSurfaceServiceContainer.cs
- AspNetHostingPermission.cs
- PropertyNames.cs
- ThreadStateException.cs
- XmlEntity.cs
- ProcessStartInfo.cs
- LineSegment.cs
- RectangleF.cs
- XmlWellformedWriter.cs
- QueryConverter.cs
- OleDbParameter.cs
- MainMenu.cs
- MimeMapping.cs
- TabControlEvent.cs
- Wildcard.cs