Beispiel #1
0
        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));
        }
Beispiel #2
0
        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));
        }