GeometryDrawing.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 / GeometryDrawing.cs / 1 / GeometryDrawing.cs

                            //---------------------------------------------------------------------------- 
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
// Description: GeometryDrawing represents a drawing operation that combines 
//              a geometry with and brush and/or pen to produce rendered
//              content. 
// 
// History:
// 
//  2004/11/17 : timothyc - Created it.
//
//---------------------------------------------------------------------------
 
using System.Diagnostics;
 
namespace System.Windows.Media 
{
    ///  
    /// GeometryDrawing represents a drawing operation that combines
    /// a geometry with and brush and/or pen to produce rendered
    /// content.
    ///  
    public sealed partial class GeometryDrawing : Drawing
    { 
        #region Constructors 

        ///  
        /// Default GeometryDrawing constructor.
        /// Constructs an object with all properties set to their default values
        /// 
        public GeometryDrawing() 
        {
        } 
 
        /// 
        /// Three-argument GeometryDrawing constructor. 
        /// Constructs an object with the Brush, Pen, and Geometry properties
        /// set to the value of their respective arguments.
        /// 
        public GeometryDrawing(Brush brush, Pen pen, Geometry geometry) 
        {
            Brush = brush; 
            Pen = pen; 
            Geometry = geometry;
        } 

        #endregion

        #region Internal methods 

        ///  
        /// Calls methods on the DrawingContext that are equivalent to the 
        /// Drawing with the Drawing's current value.
        ///  
        internal override void WalkCurrentValue(DrawingContextWalker ctx)
        {
            // We avoid unneccessary ShouldStopWalking checks based on assumptions
            // about when ShouldStopWalking is set.  Guard that assumption with an 
            // assertion.  See DrawingGroup.WalkCurrentValue comment for more details.
            Debug.Assert(!ctx.ShouldStopWalking); 
 
            ctx.DrawGeometry(
                Brush, 
                Pen,
                Geometry
                );
        } 

        ///  
        /// PrecomputeCore 
        ///
        /// Currently this method checks if the geometry drawing requires realization updates. 
        /// Realization updates are needed if the fill/stroke brush contain drawings or if the
        /// fill/stroke brush are VisualBrushes.
        /// 
        internal override void PrecomputeCore() 
        {
            RequiresRealizationUpdates = false; 
 
            if (Geometry != null)
            { 
                Brush fillBrush = Brush;
                Pen pen = Pen;
                Brush strokeBrush = (pen != null) ? pen.Brush : null;
 
                if (fillBrush != null)
                { 
                    fillBrush.Precompute(); 
                    RequiresRealizationUpdates |= fillBrush.RequiresRealizationUpdates;
                } 

                if (strokeBrush != null)
                {
                    strokeBrush.Precompute(); 
                    RequiresRealizationUpdates |= strokeBrush.RequiresRealizationUpdates;
                } 
            } 
        }
 
        /// 
        /// Pushes updates into the geometries fill brush or stroke brush if necessary.
        /// 
        internal override void UpdateRealizations(RealizationContext realizationContext) 
        {
            Debug.Assert(realizationContext != null); 
 
            if (RequiresRealizationUpdates)
            { 
                Debug.Assert(Geometry != null, "RequiresRealizationUpdates is true if Geometry != null.");
                Brush fillBrush = Brush;
                Pen pen = Pen;
                Brush strokeBrush = (pen != null) ? pen.Brush : null; 

                // The bounding box of the geometry can affect at one scale resolutions have to be created. 
                // (E.g. StretchMode.Fill). 
                Rect bounds = Geometry.GetBoundsInternal(null, Matrix.Identity);
 
                if (fillBrush != null)
                {
                    fillBrush.UpdateRealizations(bounds, realizationContext);
                } 

                if (strokeBrush != null) 
                { 
                    strokeBrush.UpdateRealizations(bounds, realizationContext);
                } 
            }
        }
        #endregion Internal methods
    } 
}
 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//---------------------------------------------------------------------------- 
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
// Description: GeometryDrawing represents a drawing operation that combines 
//              a geometry with and brush and/or pen to produce rendered
//              content. 
// 
// History:
// 
//  2004/11/17 : timothyc - Created it.
//
//---------------------------------------------------------------------------
 
using System.Diagnostics;
 
namespace System.Windows.Media 
{
    ///  
    /// GeometryDrawing represents a drawing operation that combines
    /// a geometry with and brush and/or pen to produce rendered
    /// content.
    ///  
    public sealed partial class GeometryDrawing : Drawing
    { 
        #region Constructors 

        ///  
        /// Default GeometryDrawing constructor.
        /// Constructs an object with all properties set to their default values
        /// 
        public GeometryDrawing() 
        {
        } 
 
        /// 
        /// Three-argument GeometryDrawing constructor. 
        /// Constructs an object with the Brush, Pen, and Geometry properties
        /// set to the value of their respective arguments.
        /// 
        public GeometryDrawing(Brush brush, Pen pen, Geometry geometry) 
        {
            Brush = brush; 
            Pen = pen; 
            Geometry = geometry;
        } 

        #endregion

        #region Internal methods 

        ///  
        /// Calls methods on the DrawingContext that are equivalent to the 
        /// Drawing with the Drawing's current value.
        ///  
        internal override void WalkCurrentValue(DrawingContextWalker ctx)
        {
            // We avoid unneccessary ShouldStopWalking checks based on assumptions
            // about when ShouldStopWalking is set.  Guard that assumption with an 
            // assertion.  See DrawingGroup.WalkCurrentValue comment for more details.
            Debug.Assert(!ctx.ShouldStopWalking); 
 
            ctx.DrawGeometry(
                Brush, 
                Pen,
                Geometry
                );
        } 

        ///  
        /// PrecomputeCore 
        ///
        /// Currently this method checks if the geometry drawing requires realization updates. 
        /// Realization updates are needed if the fill/stroke brush contain drawings or if the
        /// fill/stroke brush are VisualBrushes.
        /// 
        internal override void PrecomputeCore() 
        {
            RequiresRealizationUpdates = false; 
 
            if (Geometry != null)
            { 
                Brush fillBrush = Brush;
                Pen pen = Pen;
                Brush strokeBrush = (pen != null) ? pen.Brush : null;
 
                if (fillBrush != null)
                { 
                    fillBrush.Precompute(); 
                    RequiresRealizationUpdates |= fillBrush.RequiresRealizationUpdates;
                } 

                if (strokeBrush != null)
                {
                    strokeBrush.Precompute(); 
                    RequiresRealizationUpdates |= strokeBrush.RequiresRealizationUpdates;
                } 
            } 
        }
 
        /// 
        /// Pushes updates into the geometries fill brush or stroke brush if necessary.
        /// 
        internal override void UpdateRealizations(RealizationContext realizationContext) 
        {
            Debug.Assert(realizationContext != null); 
 
            if (RequiresRealizationUpdates)
            { 
                Debug.Assert(Geometry != null, "RequiresRealizationUpdates is true if Geometry != null.");
                Brush fillBrush = Brush;
                Pen pen = Pen;
                Brush strokeBrush = (pen != null) ? pen.Brush : null; 

                // The bounding box of the geometry can affect at one scale resolutions have to be created. 
                // (E.g. StretchMode.Fill). 
                Rect bounds = Geometry.GetBoundsInternal(null, Matrix.Identity);
 
                if (fillBrush != null)
                {
                    fillBrush.UpdateRealizations(bounds, realizationContext);
                } 

                if (strokeBrush != null) 
                { 
                    strokeBrush.UpdateRealizations(bounds, realizationContext);
                } 
            }
        }
        #endregion Internal methods
    } 
}
 

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