/// <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)); }