mastodon-ios/Mastodon/stylesheet/FontStyle.swift

51 lines
1.5 KiB
Swift

//
// FontStyle.swift
// Mastodon
//
// Created by on 2021/2/20.
//
import UIKit
fileprivate extension UIFont.TextStyle {
var masFont: UIFont {
switch self {
case .headline:
return UIFont(descriptor: UIFont.CustomFontDescriptor.SFProText, size: 34).bolded
default:
return UIFont(descriptor: UIFont.CustomFontDescriptor.SFProText, size: 16)
}
}
}
extension UIFont {
fileprivate struct CustomFontDescriptor {
static var fontFamily = "Avenir"
static var SFProText = UIFontDescriptor(name: "SFProText", size: 0)
}
/// Returns a bold version of `self`
public var bolded: UIFont {
return fontDescriptor.withSymbolicTraits(.traitBold)
.map { UIFont(descriptor: $0, size: 0) } ?? self
}
/// Returns an italic version of `self`
public var italicized: UIFont {
return fontDescriptor.withSymbolicTraits(.traitItalic)
.map { UIFont(descriptor: $0, size: 0) } ?? self
}
/// Returns a scaled version of `self`
func scaled(scaleFactor: CGFloat) -> UIFont {
let newDescriptor = fontDescriptor.withSize(fontDescriptor.pointSize * scaleFactor)
return UIFont(descriptor: newDescriptor, size: 0)
}
class func preferredFont(forTextStyle textStyle: UIFont.TextStyle) -> UIFont {
let masFontMetrics = UIFontMetrics(forTextStyle: textStyle)
return masFontMetrics.scaledFont(for: textStyle.masFont)
}
}