File: Core\CSharp\System\Windows\FontWeights.cs
Project: wpf\src\PresentationCore.csproj (PresentationCore)
//---------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// Description: Predefined FontWeight structures that correspond to common font weights. 
//
// History:  
//  01/25/2005 mleonov - Created constants from FontWeight enum values.
//
//---------------------------------------------------------------------------
 
using System;
using System.Globalization;
 
namespace System.Windows 
{
    /// <summary>
    /// FontWeights contains predefined font weight structures for common font weights.
    /// </summary>
    public static class FontWeights
    {
        /// <summary>
        /// Predefined font weight : Thin.
        /// </summary>
        public static FontWeight Thin       { get { return new FontWeight(100); } }
 
        /// <summary>
        /// Predefined font weight : Extra-light.
        /// </summary>
        public static FontWeight ExtraLight { get { return new FontWeight(200); } }
 
        /// <summary>
        /// Predefined font weight : Ultra-light.
        /// </summary>
        public static FontWeight UltraLight { get { return new FontWeight(200); } }
 
        /// <summary>
        /// Predefined font weight : Light.
        /// </summary>
        public static FontWeight Light      { get { return new FontWeight(300); } }
 
        /// <summary>
        /// Predefined font weight : Normal.
        /// </summary>
        public static FontWeight Normal     { get { return new FontWeight(400); } }
 
        /// <summary>
        /// Predefined font weight : Regular.
        /// </summary>
        public static FontWeight Regular    { get { return new FontWeight(400); } }
 
        /// <summary>
        /// Predefined font weight : Medium.
        /// </summary>
        public static FontWeight Medium     { get { return new FontWeight(500); } }
 
        /// <summary>
        /// Predefined font weight : Demi-bold.
        /// </summary>
        public static FontWeight DemiBold   { get { return new FontWeight(600); } }
 
        /// <summary>
        /// Predefined font weight : Semi-bold.
        /// </summary>
        public static FontWeight SemiBold   { get { return new FontWeight(600); } }
 
        /// <summary>
        /// Predefined font weight : Bold.
        /// </summary>
        public static FontWeight Bold       { get { return new FontWeight(700); } }
 
        /// <summary>
        /// Predefined font weight : Extra-bold.
        /// </summary>
        public static FontWeight ExtraBold  { get { return new FontWeight(800); } }
 
        /// <summary>
        /// Predefined font weight : Ultra-bold.
        /// </summary>
        public static FontWeight UltraBold  { get { return new FontWeight(800); } }
 
        /// <summary>
        /// Predefined font weight : Black.
        /// </summary>
        public static FontWeight Black      { get { return new FontWeight(900); } }
 
        /// <summary>
        /// Predefined font weight : Heavy.
        /// </summary>
        public static FontWeight Heavy      { get { return new FontWeight(900); } }
 
        /// <summary>
        /// Predefined font weight : ExtraBlack.
        /// </summary>
        public static FontWeight ExtraBlack { get { return new FontWeight(950); } }
 
        /// <summary>
        /// Predefined font weight : UltraBlack.
        /// </summary>
        public static FontWeight UltraBlack { get { return new FontWeight(950); } }
 
        internal static bool FontWeightStringToKnownWeight(string s, IFormatProvider provider, ref FontWeight fontWeight)
        {
            switch (s.Length)
            {
                case 4:
                    if (s.Equals("Bold", StringComparison.OrdinalIgnoreCase))
                    {
                        fontWeight = FontWeights.Bold;
                        return true;
                    }
                    if (s.Equals("Thin", StringComparison.OrdinalIgnoreCase))
                    {
                        fontWeight = FontWeights.Thin;
                        return true;
                    }
                    break;
 
                case 5:
                    if (s.Equals("Black", StringComparison.OrdinalIgnoreCase))
                    {
                        fontWeight = FontWeights.Black;
                        return true;
                    }
                    if (s.Equals("Light", StringComparison.OrdinalIgnoreCase))
                    {
                        fontWeight = FontWeights.Light;
                        return true;
                    }
                    if (s.Equals("Heavy", StringComparison.OrdinalIgnoreCase))
                    {
                        fontWeight = FontWeights.Heavy;
                        return true;
                    }
                    break;
 
                case 6:
                    if (s.Equals("Normal", StringComparison.OrdinalIgnoreCase))
                    {
                        fontWeight = FontWeights.Normal;
                        return true;
                    }
                    if (s.Equals("Medium", StringComparison.OrdinalIgnoreCase))
                    {
                        fontWeight = FontWeights.Medium;
                        return true;
                    }
                    break;
 
                case 7:
                    if (s.Equals("Regular", StringComparison.OrdinalIgnoreCase))
                    {
                        fontWeight = FontWeights.Regular;
                        return true;
                    }
                    break;
 
                case 8:
                    if (s.Equals("SemiBold", StringComparison.OrdinalIgnoreCase))
                    {
                        fontWeight = FontWeights.SemiBold;
                        return true;
                    }
                    if (s.Equals("DemiBold", StringComparison.OrdinalIgnoreCase))
                    {
                        fontWeight = FontWeights.DemiBold;
                        return true;
                    }
                    break;
 
                case 9:
                    if (s.Equals("ExtraBold", StringComparison.OrdinalIgnoreCase))
                    {
                        fontWeight = FontWeights.ExtraBold;
                        return true;
                    }
                    if (s.Equals("UltraBold", StringComparison.OrdinalIgnoreCase))
                    {
                        fontWeight = FontWeights.UltraBold;
                        return true;
                    }
                    break;
 
                case 10:
                    if (s.Equals("ExtraLight", StringComparison.OrdinalIgnoreCase))
                    {
                        fontWeight = FontWeights.ExtraLight;
                        return true;
                    }
                    if (s.Equals("UltraLight", StringComparison.OrdinalIgnoreCase))
                    {
                        fontWeight = FontWeights.UltraLight;
                        return true;
                    }
                    if (s.Equals("ExtraBlack", StringComparison.OrdinalIgnoreCase))
                    {
                        fontWeight = FontWeights.ExtraBlack;
                        return true;
                    }
                    if (s.Equals("UltraBlack", StringComparison.OrdinalIgnoreCase))
                    {
                        fontWeight = FontWeights.UltraBlack;
                        return true;
                    }
                    break;
            }
            int weightValue;
            if (int.TryParse(s, NumberStyles.Integer, provider, out weightValue))
            {
                fontWeight = FontWeight.FromOpenTypeWeight(weightValue);
                return true;
            }
            return false;
        }
 
        internal static bool FontWeightToString(int weight, out string convertedValue)
        {
            switch (weight)
            {
                case 100:
                    convertedValue = "Thin";
                    return true;
                case 200:
                    convertedValue = "ExtraLight";
                    return true;
                case 300:
                    convertedValue = "Light";
                    return true;
                case 400:
                    convertedValue = "Normal";
                    return true;
                case 500:
                    convertedValue = "Medium";
                    return true;
                case 600:
                    convertedValue = "SemiBold";
                    return true;
                case 700:
                    convertedValue = "Bold";
                    return true;
                case 800:
                    convertedValue = "ExtraBold";
                    return true;
                case 900:
                    convertedValue = "Black";
                    return true;
                case 950:
                    convertedValue = "ExtraBlack";
                    return true;
            }
            convertedValue = null;
            return false;
        }
    }
}