Drawing.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Media / Drawing.cs / 1305600 / Drawing.cs

                            //---------------------------------------------------------------------------- 
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
// Description: Drawing is the base Drawing class that defines the standard 
//              interface which Drawing's must implement.
// 
// History: 
//  2003/07/16 : [....] - Created it.
//  2003/07/28 : [....] - Renamed it and hooked it up to the unmanaged code. 
//  2004/11/17 : timothyc - Repurposed Drawing from being a Changeable
//               implementation that contains render data into the base
//               class for the enumerable & modifiable Drawing subclasses.
//  2005/01/26 : timothyc - Made Drawing abstract & removed legacy Drawing 
//               support, including .Open() & IAddChild.
// 
//--------------------------------------------------------------------------- 

using MS.Internal; 
using System;
using System.Collections;
using System.ComponentModel;
using System.Diagnostics; 
using System.Resources;
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Media.Composition;
using System.Windows.Markup; 
using System.Windows.Threading;

namespace System.Windows.Media
{ 
    /// 
    /// Base class for the enumerable and modifiable Drawing subclasses. 
    ///  
    [Localizability(LocalizationCategory.None, Readability = Readability.Unreadable)]
    public abstract partial class Drawing : Animatable, IDrawingContent, DUCE.IResource 
    {
        #region Constructors

        ///  
        /// Constructor for Drawing
        ///  
        ///  
        /// This constructor is internal to prevent external subclassing.
        ///  
        internal Drawing()
        {
        }
 
        #endregion Constructors
 
        #region Public Properties 

        ///  
        /// Bounds - the axis-aligned bounds of this Drawing.
        /// 
        /// 
        /// Rect - the axis-aligned bounds of this Drawing. 
        /// 
        public Rect Bounds 
        { 
            get
            { 
                ReadPreamble();

                return GetBounds();
            } 
        }
 
        #endregion Public Properties 

        #region Internal Methods 

        /// 
        /// Calls methods on the DrawingContext that are equivalent to the
        /// Drawing with the Drawing's current value. 
        /// 
        internal abstract void WalkCurrentValue(DrawingContextWalker ctx); 
 
        #endregion Internal Methods
 
        /// 
        /// Returns the bounding box occupied by the content
        /// 
        ///  
        /// Bounding box occupied by the content
        ///  
        Rect IDrawingContent.GetContentBounds(BoundsDrawingContextWalker ctx) 
        {
            Debug.Assert(ctx != null); 

            WalkCurrentValue(ctx);

            return ctx.Bounds; 
        }
 
        ///  
        /// Forward the current value of the content to the DrawingContextWalker
        /// methods. 
        /// 
        ///  DrawingContextWalker to forward content to. 
        void IDrawingContent.WalkContent(DrawingContextWalker ctx)
        { 
            ((Drawing)this).WalkCurrentValue(ctx);
        } 
 
        /// 
        /// Determines whether or not a point exists within the content 
        /// 
        ///  Point to hit-test for. 
        /// 
        /// 'true' if the point exists within the content, 'false' otherwise 
        /// 
        bool IDrawingContent.HitTestPoint(Point point) 
        { 
            return DrawingServices.HitTestPoint(this, point);
        } 

        /// 
        /// Hit-tests a geometry against this content
        ///  
        ///  PathGeometry to hit-test for. 
        ///  
        /// IntersectionDetail describing the result of the hit-test 
        /// 
        IntersectionDetail IDrawingContent.HitTestGeometry(PathGeometry geometry) 
        {
            return DrawingServices.HitTestGeometry(this, geometry);
        }
 
        /// 
        /// Propagates an event handler to Freezables referenced by 
        /// the content. 
        /// 
        ///  Event handler to propagate  
        ///  'true' to add the handler, 'false' to remove it 
        void IDrawingContent.PropagateChangedHandler(EventHandler handler, bool adding)
        {
            if (!IsFrozen) 
            {
                if (adding) 
                { 
                    ((Drawing)this).Changed += handler;
                } 
                else
                {
                    ((Drawing)this).Changed -= handler;
                } 
            }
        } 
 
        /// 
        /// GetBounds to calculate the bounds of this drawing. 
        /// 
        internal Rect GetBounds()
        {
            BoundsDrawingContextWalker ctx = new BoundsDrawingContextWalker(); 

            WalkCurrentValue(ctx); 
 
            return ctx.Bounds;
        } 

    }
}

// 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