DrawingServices.cs source code in C# .NET

Source code for the .NET framework in C#

                        

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

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK