CodeEdit icon indicating copy to clipboard operation
CodeEdit copied to clipboard

✨ Support fallback fonts in Text Editing preferences

Open bingzheung opened this issue 2 years ago • 0 comments

Is your feature request related to a problem? Please describe.

No

Describe the solution you'd like

Hello,

Currently, the Text Editing settings allow users to select one font only. In many cases, one font is not enough to cover up the Unicode characters that need. We could use multiple fonts to work as a font chain, just like the CSS font-family.

In Cocoa, there is a way to combine multple fonts as one NSFont instance, sample code:

static func combinedFont(from fontNames: [String], size: CGFloat) -> NSFont? {
    guard let primary = fontNames.first, let primaryFont = NSFont(name: primary, size: size) else { return nil }
    let primaryDescriptor: NSFontDescriptor = primaryFont.fontDescriptor
    let descriptors: [NSFontDescriptor] = fontNames.dropFirst().map { name -> NSFontDescriptor in
        return primaryDescriptor.addingAttributes([.name: name])
    }
    let descriptor: NSFontDescriptor = primaryDescriptor.addingAttributes([.cascadeList: descriptors])
    return NSFont(descriptor: descriptor, size: size)
}

Describe alternatives you've considered

Maybe we could put a TextField in Text Editing settings, let users to enter the font names they wanted.

Additional context

screenshot-text-editing

bingzheung avatar Jan 30 '23 09:01 bingzheung