예제 #1
0
        /// <summary>
        /// Creates a glyph typeface.
        /// </summary>
        /// <param name="typeface">The typeface.</param>
        /// <returns>0
        /// The created glyph typeface. Can be <c>Null</c> if it was not possible to create a glyph typeface.</returns>
        public IGlyphTypefaceImpl CreateGlyphTypeface(Typeface typeface)
        {
            var fontFamilyManager = GetFontFamilyManager();

            if (typeface.FontFamily != null && fontFamilyManager.IsIronyFont(typeface.FontFamily.Name))
            {
                if (typeface.FontFamily.Key == null)
                {
                    typeface = new Typeface(fontFamilyManager.ResolveFontFamily(typeface.FontFamily.Name).GetFontFamily(), typeface.Style, typeface.Weight);
                }
                var fontCollection = SKTypefaceCollectionCache.GetOrAddTypefaceCollection(typeface.FontFamily);
                if (fontCollection == null)
                {
                    // Fallback to Irony default
                    typeface       = new Typeface(fontFamilyManager.GetDefaultFontFamily().GetFontFamily(), typeface.Style, typeface.Weight);
                    fontCollection = SKTypefaceCollectionCache.GetOrAddTypefaceCollection(typeface.FontFamily);
                }
                var skTypeface = fontCollection.Get(typeface);
                if (skTypeface == null)
                {
                    return(fontManager.CreateGlyphTypeface(typeface));
                }
                var isFakeBold   = (int)typeface.Weight >= 600 && !skTypeface.IsBold;
                var isFakeItalic = typeface.Style == FontStyle.Italic && !skTypeface.IsItalic;
                return(new GlyphTypefaceImpl(skTypeface, isFakeBold, isFakeItalic));
            }
            else if (GetPlatformConfiguration().GetOptions().Fonts.UseInbuiltFontsOnly)
            {
                typeface = new Typeface(fontFamilyManager.GetDefaultFontFamily().GetFontFamily(), typeface.Style, typeface.Weight);
                var fontCollection = SKTypefaceCollectionCache.GetOrAddTypefaceCollection(typeface.FontFamily);
                var skTypeface     = fontCollection.Get(typeface);
                if (skTypeface == null)
                {
                    return(fontManager.CreateGlyphTypeface(typeface));
                }
                var isFakeBold   = (int)typeface.Weight >= 600 && !skTypeface.IsBold;
                var isFakeItalic = typeface.Style == FontStyle.Italic && !skTypeface.IsItalic;
                return(new GlyphTypefaceImpl(skTypeface, isFakeBold, isFakeItalic));
            }
            return(fontManager.CreateGlyphTypeface(typeface));
        }