Brush.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / CommonUI / System / Drawing / Brush.cs / 1 / Brush.cs

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

/*************************************************************************\ 
* 
* Copyright (c) 1998-1999, Microsoft Corp.  All Rights Reserved.
* 
* Module Name:
*
*   Brush.cs
* 
* Abstract:
* 
*   COM+ wrapper for GDI+ brush objects 
*
* Revision History: 
*
*   01/11/1999 davidx
*       Code review.
* 
*   12/15/1998 [....]
*       Created it. 
* 
\**************************************************************************/
 
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;

    /**
     * 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) 
        {
            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
        {
            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. 


                        

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