Use Atkinson Hyperlegible Next, keeping Mono for code
This commit is contained in:
@@ -37,15 +37,16 @@ final class FontSize {
|
||||
}
|
||||
|
||||
enum Fonts {
|
||||
private static func file(_ subset: String, _ italic: Bool, _ weight: CGFloat) -> CTFontDescriptor {
|
||||
let url = Bundle.main.resourceURL!.appending(path: "fonts/atkinson-hyperlegible-mono-\(subset)-wght-\(italic ? "italic" : "normal").woff2")
|
||||
private static func file(_ family: String, _ subset: String, _ italic: Bool, _ weight: CGFloat) -> CTFontDescriptor {
|
||||
let url = Bundle.main.resourceURL!.appending(path: "fonts/atkinson-hyperlegible-\(family)-\(subset)-wght-\(italic ? "italic" : "normal").woff2")
|
||||
let d = (CTFontManagerCreateFontDescriptorsFromURL(url as CFURL) as! [CTFontDescriptor])[0]
|
||||
return CTFontDescriptorCreateCopyWithVariation(d, 0x7767_6874 as CFNumber, weight)
|
||||
}
|
||||
|
||||
private static func ct(_ size: CGFloat, weight: CGFloat = 400, italic: Bool = false) -> CTFont {
|
||||
let ext = file("latin-ext", italic, weight)
|
||||
let d = CTFontDescriptorCreateCopyWithAttributes(file("latin", italic, weight), [kCTFontCascadeListAttribute: [ext]] as CFDictionary)
|
||||
private static func ct(_ size: CGFloat, weight: CGFloat, italic: Bool, mono: Bool) -> CTFont {
|
||||
let family = mono ? "mono" : "next"
|
||||
let ext = file(family, "latin-ext", italic, weight)
|
||||
let d = CTFontDescriptorCreateCopyWithAttributes(file(family, "latin", italic, weight), [kCTFontCascadeListAttribute: [ext]] as CFDictionary)
|
||||
return CTFontCreateWithFontDescriptor(d, size, nil)
|
||||
}
|
||||
|
||||
@@ -53,26 +54,26 @@ enum Fonts {
|
||||
|
||||
// Call sites give sizes relative to a 13pt body; the user's font size shifts them all.
|
||||
@MainActor
|
||||
private static func cached(_ size: CGFloat, _ weight: CGFloat, _ italic: Bool) -> CTFont {
|
||||
private static func cached(_ size: CGFloat, _ weight: CGFloat, _ italic: Bool, _ mono: Bool) -> CTFont {
|
||||
let size = size + CGFloat(FontSize.shared.body - 13)
|
||||
let key = "\(size) \(weight) \(italic)"
|
||||
let key = "\(size) \(weight) \(italic) \(mono)"
|
||||
return fonts.withLock { fonts in
|
||||
if let f = fonts[key] {
|
||||
return f
|
||||
}
|
||||
let f = ct(size, weight: weight, italic: italic)
|
||||
let f = ct(size, weight: weight, italic: italic, mono: mono)
|
||||
fonts[key] = f
|
||||
return f
|
||||
}
|
||||
}
|
||||
|
||||
@MainActor
|
||||
static func font(_ size: CGFloat, weight: CGFloat = 400, italic: Bool = false) -> Font {
|
||||
Font(cached(size, weight, italic))
|
||||
static func font(_ size: CGFloat, weight: CGFloat = 400, italic: Bool = false, mono: Bool = false) -> Font {
|
||||
Font(cached(size, weight, italic, mono))
|
||||
}
|
||||
|
||||
@MainActor
|
||||
static func ns(_ size: CGFloat, weight: CGFloat = 400, italic: Bool = false) -> NSFont {
|
||||
cached(size, weight, italic) as NSFont
|
||||
static func ns(_ size: CGFloat, weight: CGFloat = 400, italic: Bool = false, mono: Bool = false) -> NSFont {
|
||||
cached(size, weight, italic, mono) as NSFont
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user