Brush.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / CommonUI / System / Drawing / Brush.cs / 1305376 / Brush.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace System.Drawing 
{ 
    using System.Runtime.InteropServices;
    using System.Diagnostics; 
    using System;
    using System.ComponentModel;
    using Microsoft.Win32;
    using System.Drawing; 
    using System.Drawing.Internal;
    using System.Globalization; 
    using System.Security; 
    using System.Security.Permissions;
 
    /**
     * Represent a Brush object
     */
    ///  
    /// 
    ///      
    ///         Classes derrived from this abstract base class define objects used to fill the 
    ///         interiors of graphical shapes such as rectangles, ellipses, pies, polygons, and paths.
    ///      
    /// 
    public abstract class Brush : MarshalByRefObject, ICloneable, IDisposable
    {
#if FINALIZATION_WATCH 
        private string allocationSite = Graphics.GetAllocationStack();
#endif 
        // handle to native GDI+ brush object to be used on demand. 
        /// 
        private IntPtr nativeBrush; 

        /// 
        /// 
        ///    When overriden in a derived class, creates 
        ///    an exact copy of this .
        ///  
        public abstract object Clone(); 

 
        /// 
        ///     Sets the native GDI+ brush reference.
        ///     Note: This method is intended to be used by derived classes only! (internal protected doesn't work as in C++).
        ///  
        protected internal void SetNativeBrush(IntPtr brush)
        { 
            SecurityPermission permission = new SecurityPermission(SecurityPermissionFlag.UnmanagedCode); 
            permission.Demand();
 
            SetNativeBrushInternal(brush);
        }

        internal void SetNativeBrushInternal(IntPtr brush) 
        {
            Debug.Assert( brush != IntPtr.Zero, "WARNING: Assigning null to the GDI+ native brush object."); 
            Debug.Assert( this.nativeBrush == IntPtr.Zero, "WARNING: Initialized GDI+ native brush object being assigned a new value."); 

            this.nativeBrush = brush; 
        }


        ///  
        ///    Gets the GDI+ native object reference. Triggers GDI+ obect initialization.
        ///  
        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] 
        internal IntPtr NativeBrush
        { 
            [System.Runtime.TargetedPatchingOptOutAttribute("Performance critical to inline across NGen image boundaries")]
            get
            {
                //Need to comment this line out to allow for checking this.NativePen == IntPtr.Zero. 
                //Debug.Assert(this.nativeBrush != IntPtr.Zero, "this.nativeBrush == null." );
                return this.nativeBrush; 
            } 
        }
 
        /// 
        /// 
        ///    
        ///       Deletes this . 
        ///    
        ///  
        public void Dispose() 
        {
            Dispose(true); 
            GC.SuppressFinalize(this);
        }

        ///  
        protected virtual void Dispose(bool disposing)
        { 
#if FINALIZATION_WATCH 
            if (!disposing && nativeBrush != IntPtr.Zero )
                Debug.WriteLine("**********************\nDisposed through finalization:\n" + allocationSite); 
#endif

            if (this.nativeBrush != IntPtr.Zero) {
                try{ 
#if DEBUG
                    int status = 
#endif 
                    SafeNativeMethods.Gdip.GdipDeleteBrush(new HandleRef(this, this.nativeBrush));
#if DEBUG 
                    Debug.Assert(status == SafeNativeMethods.Gdip.Ok, "GDI+ returned an error status: " + status.ToString(CultureInfo.InvariantCulture));
#endif
                }
                catch( Exception ex ){ 
                    if( ClientUtils.IsSecurityOrCriticalException( ex ) ) {
                        throw; 
                    } 

                    Debug.Fail( "Exception thrown during Dispose: " + ex.ToString() ); 
                }
                finally{
                    this.nativeBrush = IntPtr.Zero;
                } 
            }
        } 
 
        /**
         * Object cleanup 
         */
        /// 
        /// 
        ///     
        ///       Releases memory allocated for this .
        ///     
        ///  
        ~Brush()
        { 
            Dispose(false);
        }
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace System.Drawing 
{ 
    using System.Runtime.InteropServices;
    using System.Diagnostics; 
    using System;
    using System.ComponentModel;
    using Microsoft.Win32;
    using System.Drawing; 
    using System.Drawing.Internal;
    using System.Globalization; 
    using System.Security; 
    using System.Security.Permissions;
 
    /**
     * Represent a Brush object
     */
    ///  
    /// 
    ///      
    ///         Classes derrived from this abstract base class define objects used to fill the 
    ///         interiors of graphical shapes such as rectangles, ellipses, pies, polygons, and paths.
    ///      
    /// 
    public abstract class Brush : MarshalByRefObject, ICloneable, IDisposable
    {
#if FINALIZATION_WATCH 
        private string allocationSite = Graphics.GetAllocationStack();
#endif 
        // handle to native GDI+ brush object to be used on demand. 
        /// 
        private IntPtr nativeBrush; 

        /// 
        /// 
        ///    When overriden in a derived class, creates 
        ///    an exact copy of this .
        ///  
        public abstract object Clone(); 

 
        /// 
        ///     Sets the native GDI+ brush reference.
        ///     Note: This method is intended to be used by derived classes only! (internal protected doesn't work as in C++).
        ///  
        protected internal void SetNativeBrush(IntPtr brush)
        { 
            SecurityPermission permission = new SecurityPermission(SecurityPermissionFlag.UnmanagedCode); 
            permission.Demand();
 
            SetNativeBrushInternal(brush);
        }

        internal void SetNativeBrushInternal(IntPtr brush) 
        {
            Debug.Assert( brush != IntPtr.Zero, "WARNING: Assigning null to the GDI+ native brush object."); 
            Debug.Assert( this.nativeBrush == IntPtr.Zero, "WARNING: Initialized GDI+ native brush object being assigned a new value."); 

            this.nativeBrush = brush; 
        }


        ///  
        ///    Gets the GDI+ native object reference. Triggers GDI+ obect initialization.
        ///  
        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] 
        internal IntPtr NativeBrush
        { 
            [System.Runtime.TargetedPatchingOptOutAttribute("Performance critical to inline across NGen image boundaries")]
            get
            {
                //Need to comment this line out to allow for checking this.NativePen == IntPtr.Zero. 
                //Debug.Assert(this.nativeBrush != IntPtr.Zero, "this.nativeBrush == null." );
                return this.nativeBrush; 
            } 
        }
 
        /// 
        /// 
        ///    
        ///       Deletes this . 
        ///    
        ///  
        public void Dispose() 
        {
            Dispose(true); 
            GC.SuppressFinalize(this);
        }

        ///  
        protected virtual void Dispose(bool disposing)
        { 
#if FINALIZATION_WATCH 
            if (!disposing && nativeBrush != IntPtr.Zero )
                Debug.WriteLine("**********************\nDisposed through finalization:\n" + allocationSite); 
#endif

            if (this.nativeBrush != IntPtr.Zero) {
                try{ 
#if DEBUG
                    int status = 
#endif 
                    SafeNativeMethods.Gdip.GdipDeleteBrush(new HandleRef(this, this.nativeBrush));
#if DEBUG 
                    Debug.Assert(status == SafeNativeMethods.Gdip.Ok, "GDI+ returned an error status: " + status.ToString(CultureInfo.InvariantCulture));
#endif
                }
                catch( Exception ex ){ 
                    if( ClientUtils.IsSecurityOrCriticalException( ex ) ) {
                        throw; 
                    } 

                    Debug.Fail( "Exception thrown during Dispose: " + ex.ToString() ); 
                }
                finally{
                    this.nativeBrush = IntPtr.Zero;
                } 
            }
        } 
 
        /**
         * Object cleanup 
         */
        /// 
        /// 
        ///     
        ///       Releases memory allocated for this .
        ///     
        ///  
        ~Brush()
        { 
            Dispose(false);
        }
    }
} 

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