Closed austincondiff closed 1 year ago
Just want to leave this here. Did some research a while back and this might help:
private var lineGutterFont: NSFont {
let fontSize: Double = 10
// TODO: calculate the font size depending on the editors font size.
let font = NSFont.monospacedSystemFont(ofSize: fontSize, weight: .medium)
let alt0NoSlash: [NSFontDescriptor.FeatureKey: Int] = [
.selectorIdentifier: 6,
.typeIdentifier: kStylisticAlternativesType,
]
let alt1NoSerif: [NSFontDescriptor.FeatureKey: Int] = [
.selectorIdentifier: 8,
.typeIdentifier: kStylisticAlternativesType,
]
let descriptor = font.fontDescriptor.addingAttributes([.featureSettings: [alt0NoSlash, alt1NoSerif]])
return NSFont(descriptor: descriptor, size: 0) ?? font
}
That gets me the alternate characters like the open 4 however I still need to be able to reduce the width and tracking. Any idea how I might do that?
That gets me the alternate characters like the open 4 however I still need to be able to reduce the width and tracking. Any idea how I might do that?
Maybe something here
@austincondiff, @lukepistrol - I believe the font you're looking for is actually sneakily bundled into Xcode.
take a look in: /Applications/Xcode.app/Contents/SharedFrameworks/DVTUserInterfaceKit.framework/Versions/A/Resources/Fonts
and say hello to this little guy: XcodeDigits-regular.ttf
I would guess that it's proprietary.
I am aware of Xcode Digits after digging through the app contents. I have thought about sneaking it in, but probably not as I think you are right in that it might be proprietary (not clear if it is or isn't). I think we can get a look like this with the SF variable font (not sure if we can use it now or if we need to wait).
Looks like variable fonts are only available in OS 13+...
https://developer.apple.com/documentation/appkit/nsfont/width?changes=latest_3_5_2
We will be using ExtensionKit and the new form style in Settings. The though it once we are out of beta, 13 will be standard by that point. So I'd say let's try to achieve the same look with variable fonts!
@ben-p-commits we will be increasing our minimum target to macOS 13 if you wanted to take a stab at doing this via variable fonts.
I just updated to ventura- happy to dive back in!
On Thu, Feb 16, 2023 at 6:30 PM Austin Condiff @.***> wrote:
@ben-p-commits https://github.com/ben-p-commits we will be increasing our minimum target to macOS 13 if you wanted to take a stab at doing this via variable fonts.
— Reply to this email directly, view it on GitHub https://github.com/CodeEditApp/CodeEditTextView/issues/58#issuecomment-1433879964, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABGVDZJTIPDW7RS4TQ5BD43WX22BTANCNFSM6AAAAAAQMVPYSY . You are receiving this because you were mentioned.Message ID: @.***>
@ben-p-commits Perfect, I am assigning this to you.
@Eliulm would you like to try to include this in your PR (#163) or should we tackle this later?
If so let me know. You might look at variable fonts as mentioned.
@austincondiff Yeah, I will see what I can do.
@Eliulm it looks like #163 was merged. Feel free to open a separate PR.
So I looked into it and found that apple only ships the SF Pro
font as a variable font. This means that it is the only font where I can adjust the glyph width, as far as I know. However, the problem with that font is, that It does not have the open four:
The SF Mono
font has the open four, but the problem there is, as you pointed out before, that the glyphs are a bit wider than the Xcode digits font:
As of now, I do not know, how I could change that :/
The open 4 is an alternate character.
https://user-images.githubusercontent.com/806104/226121452-2343071c-6d4d-404a-98e4-503d90433699.mov
I forget how, but there is a way to do this in Swift.
I have found the stylistic set, that uses the open four. However, it also uses zero with a slash. I have tried all other stylistic sets, but none have the zero with a slash and the open four at the same time. This is how it currently looks like now: (Xcode left, CE right)
I also made the ruler font size dependent on the text font size:
var rulerFont: NSFont {
let fontSize: Double = (font.pointSize - 1) + 0.7 // 11.7 @ 12font and 1,7 lineheight
let fontAdvance: Double = font.pointSize * 0.49 + 0.6
let fontWeight = NSFont.Weight(rawValue: 0.0005)
let fontWidth = NSFont.Width(rawValue: -0.13)
let font = NSFont.systemFont(ofSize: fontSize, weight: fontWeight, width: fontWidth)
/// Set the 4 to open four and alter the shape of 6 and 9
let alt469: [NSFontDescriptor.FeatureKey: Int] = [
.selectorIdentifier: 12,
.typeIdentifier: kStylisticAlternativesType
]
/// Make all digits monospaced
let monoSpaceDigits: [NSFontDescriptor.FeatureKey: Int] = [
.selectorIdentifier: 0,
.typeIdentifier: kNumberSpacingType
]
let features = [alt469, monoSpaceDigits]
let descriptor = font.fontDescriptor.addingAttributes([.featureSettings: features, .fixedAdvance: fontAdvance])
return NSFont(descriptor: descriptor, size: 0) ?? font
}
@Eliulm It looks like your alt469 is enabling the high legibility setting (kStylisticAltSixOnSelector
= 12) which enables the slashed 0. You'll have to add the alt 4 and alt 6 and 9 separately using their respective keys:
let alt4: [NSFontDescriptor.FeatureKey: Int] = [
.selectorIdentifier: kStylisticAltOneOnSelector,
.typeIdentifier: kStylisticAlternativesType
]
let alt6and9: [NSFontDescriptor.FeatureKey: Int] = [
.selectorIdentifier: kStylisticAltTwoOnSelector,
.typeIdentifier: kStylisticAlternativesType
]
Left: Xcode, Right: CE
@thecoolwinter Awesome, thank you!
@Eliulm how are we looking with this?
Done, going to create a PR soon
The line number font does not align with Xcode.
Left: Xcode | Right: CodeEdit
The font needs to be sans-serif, narrower, with the color less prominent.