public override NSFont ConvertFont(NSFont fontObj, NSFontTraitMask trait) { // be a little less conservative when converting fonts to use the name when translating to italics. // e.g. 'Klavika Medium' translates to 'Klavika Italic' if adding italic trait, instead of // 'Klavika Medium Italic'. if (trait == NSFontTraitMask.Italic || trait == NSFontTraitMask.Unitalic) { var oldName = (string)FontTypefaceHandler.GetName(fontObj.Handle); const string italicSuffix = " Italic"; string newName = null; if (trait == NSFontTraitMask.Italic) { newName = oldName + italicSuffix; } else if (oldName.EndsWith(italicSuffix, StringComparison.OrdinalIgnoreCase)) { newName = oldName.Substring(0, oldName.Length - italicSuffix.Length); } if (newName != null) { foreach (var descriptor in AvailableMembersOfFontFamily(fontObj.FamilyName)) { var fontName = (string)Messaging.GetNSObject <NSString>(descriptor.ValueAt(1)); if (string.Equals(fontName, newName, StringComparison.OrdinalIgnoreCase)) { var postScriptName = (string)Messaging.GetNSObject <NSString>(descriptor.ValueAt(0)); return(NSFont.FromFontName(postScriptName, fontObj.PointSize)); } } } } return(base.ConvertFont(fontObj, trait)); }
public FontTypeface GetFace(NSFont font, NSFontTraitMask?traits) { var postScriptName = font.FontDescriptor.PostscriptName; var faceHandler = Typefaces.Select(r => r.Handler).OfType <FontTypefaceHandler>().FirstOrDefault(r => r.PostScriptName == postScriptName && r.Traits == traits); if (faceHandler == null) { faceHandler = new FontTypefaceHandler(font, traits); } return(new FontTypeface(Widget, faceHandler)); }