COM2FontConverter.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 / WinForms / Managed / System / WinForms / ComponentModel / COM2Interop / COM2FontConverter.cs / 1305376 / COM2FontConverter.cs

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

 
namespace System.Windows.Forms.ComponentModel.Com2Interop { 
    using System.Runtime.Serialization.Formatters;
    using System.Runtime.InteropServices; 
    using System.ComponentModel;
    using System.Diagnostics;
    using System;
    using System.Drawing; 
    using System.Collections;
    using Microsoft.Win32; 
    using System.Runtime.Versioning; 

    ///  
    /// 
    /// This class maps an OLE_COLOR to a managed Color editor.
    /// 
    internal class Com2FontConverter : Com2DataTypeToManagedDataTypeConverter { 

        private IntPtr lastHandle = IntPtr.Zero; 
        private Font lastFont  = null; 

        public override bool AllowExpand { 
             get {
                 return true;
             }
         } 

        ///  
        ///  
        ///     Returns the managed type that this editor maps the property type to.
        ///  
        public override Type ManagedType {
            get {
                return typeof(Font);
            } 
        }
 
 
        /// 
        ///  
        ///     Converts the native value into a managed value
        /// 
        [ResourceExposure(ResourceScope.Process)]
        [ResourceConsumption(ResourceScope.Process)] 
        public override object ConvertNativeToManaged(object nativeValue, Com2PropertyDescriptor pd) {
            // we're getting an IFont thing here 
            UnsafeNativeMethods.IFont nativeFont = nativeValue as UnsafeNativeMethods.IFont; 

            if (nativeFont == null) { 
                lastHandle = IntPtr.Zero;
                lastFont = Control.DefaultFont;
                return lastFont;
            } 

            IntPtr fontHandle = nativeFont.GetHFont(); 
 
            // see if we have this guy cached
            if (fontHandle == lastHandle && lastFont != null) { 
                return lastFont;
            }

            lastHandle = fontHandle; 

            try { 
                // this wasn't working because it was converting everything to 
                // world units.
                // 
                Font font = Font.FromHfont(lastHandle);
                try {
                    lastFont = ControlPaint.FontInPoints(font);
                } 
                finally {
                    font.Dispose(); 
                } 
            }
            catch(ArgumentException) { 
                // we will fail on non-truetype fonts, so
                // just use the default font.
                lastFont = Control.DefaultFont;
            } 

            return lastFont; 
        } 

        ///  
        /// 
        ///     Converts the managed value into a native value
        /// 
        [ResourceExposure(ResourceScope.Process)] 
        [ResourceConsumption(ResourceScope.Process)]
        public override object ConvertManagedToNative(object managedValue, Com2PropertyDescriptor pd, ref bool cancelSet) { 
 
            // we default to black.
            // 
            if (managedValue == null) {
                managedValue = Control.DefaultFont;
            }
 
            cancelSet = true;
 
            if (lastFont != null && lastFont.Equals(managedValue)) { 
                // don't do anything here.
                return null; 
            }


            lastFont = (Font)managedValue; 
            UnsafeNativeMethods.IFont nativeFont = (UnsafeNativeMethods.IFont)pd.GetNativeValue(pd.TargetObject);
 
            // now, push all the values into the native side 
            if (nativeFont != null) {
                bool changed = ControlPaint.FontToIFont(lastFont, nativeFont); 

                if (changed) {
                    // here, we want to pick up a new font from the handle
                    lastFont = null; 
                    ConvertNativeToManaged(nativeFont, pd);
 
                } 
            }
            return null; 
        }

    }
} 


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

 
namespace System.Windows.Forms.ComponentModel.Com2Interop { 
    using System.Runtime.Serialization.Formatters;
    using System.Runtime.InteropServices; 
    using System.ComponentModel;
    using System.Diagnostics;
    using System;
    using System.Drawing; 
    using System.Collections;
    using Microsoft.Win32; 
    using System.Runtime.Versioning; 

    ///  
    /// 
    /// This class maps an OLE_COLOR to a managed Color editor.
    /// 
    internal class Com2FontConverter : Com2DataTypeToManagedDataTypeConverter { 

        private IntPtr lastHandle = IntPtr.Zero; 
        private Font lastFont  = null; 

        public override bool AllowExpand { 
             get {
                 return true;
             }
         } 

        ///  
        ///  
        ///     Returns the managed type that this editor maps the property type to.
        ///  
        public override Type ManagedType {
            get {
                return typeof(Font);
            } 
        }
 
 
        /// 
        ///  
        ///     Converts the native value into a managed value
        /// 
        [ResourceExposure(ResourceScope.Process)]
        [ResourceConsumption(ResourceScope.Process)] 
        public override object ConvertNativeToManaged(object nativeValue, Com2PropertyDescriptor pd) {
            // we're getting an IFont thing here 
            UnsafeNativeMethods.IFont nativeFont = nativeValue as UnsafeNativeMethods.IFont; 

            if (nativeFont == null) { 
                lastHandle = IntPtr.Zero;
                lastFont = Control.DefaultFont;
                return lastFont;
            } 

            IntPtr fontHandle = nativeFont.GetHFont(); 
 
            // see if we have this guy cached
            if (fontHandle == lastHandle && lastFont != null) { 
                return lastFont;
            }

            lastHandle = fontHandle; 

            try { 
                // this wasn't working because it was converting everything to 
                // world units.
                // 
                Font font = Font.FromHfont(lastHandle);
                try {
                    lastFont = ControlPaint.FontInPoints(font);
                } 
                finally {
                    font.Dispose(); 
                } 
            }
            catch(ArgumentException) { 
                // we will fail on non-truetype fonts, so
                // just use the default font.
                lastFont = Control.DefaultFont;
            } 

            return lastFont; 
        } 

        ///  
        /// 
        ///     Converts the managed value into a native value
        /// 
        [ResourceExposure(ResourceScope.Process)] 
        [ResourceConsumption(ResourceScope.Process)]
        public override object ConvertManagedToNative(object managedValue, Com2PropertyDescriptor pd, ref bool cancelSet) { 
 
            // we default to black.
            // 
            if (managedValue == null) {
                managedValue = Control.DefaultFont;
            }
 
            cancelSet = true;
 
            if (lastFont != null && lastFont.Equals(managedValue)) { 
                // don't do anything here.
                return null; 
            }


            lastFont = (Font)managedValue; 
            UnsafeNativeMethods.IFont nativeFont = (UnsafeNativeMethods.IFont)pd.GetNativeValue(pd.TargetObject);
 
            // now, push all the values into the native side 
            if (nativeFont != null) {
                bool changed = ControlPaint.FontToIFont(lastFont, nativeFont); 

                if (changed) {
                    // here, we want to pick up a new font from the handle
                    lastFont = null; 
                    ConvertNativeToManaged(nativeFont, pd);
 
                } 
            }
            return null; 
        }

    }
} 


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