Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🐞 Line number font is incorrect #58

Closed
austincondiff opened this issue Sep 14, 2022 · 20 comments · Fixed by #170
Closed

🐞 Line number font is incorrect #58

austincondiff opened this issue Sep 14, 2022 · 20 comments · Fixed by #170
Assignees
Labels
bug Something isn't working UI

Comments

@austincondiff
Copy link
Collaborator

austincondiff commented Sep 14, 2022

The line number font does not align with Xcode.

image

Left: Xcode | Right: CodeEdit

The font needs to be sans-serif, narrower, with the color less prominent.

@lukepistrol
Copy link
Member

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
}

@austincondiff
Copy link
Collaborator Author

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?

@lukepistrol
Copy link
Member

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

@lukepistrol lukepistrol added bug Something isn't working UI labels Nov 22, 2022
@ben-p-commits
Copy link
Contributor

@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

image

I would guess that it's proprietary.

@austincondiff
Copy link
Collaborator Author

austincondiff commented Jan 5, 2023

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).

@ben-p-commits
Copy link
Contributor

Looks like variable fonts are only available in OS 13+...

https://developer.apple.com/documentation/appkit/nsfont/width?changes=latest_3_5_2

@austincondiff
Copy link
Collaborator Author

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!

@austincondiff
Copy link
Collaborator Author

@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.

@austincondiff austincondiff moved this from 🆕 New to 📋 Todo in CodeEdit Project Feb 16, 2023
@ben-p-commits
Copy link
Contributor

ben-p-commits commented Feb 17, 2023 via email

@austincondiff austincondiff moved this from 📋 Todo to 🏃‍♂️ In Progress in CodeEdit Project Feb 17, 2023
@austincondiff
Copy link
Collaborator Author

austincondiff commented Feb 17, 2023

@ben-p-commits Perfect, I am assigning this to you.

@austincondiff
Copy link
Collaborator Author

austincondiff commented Mar 16, 2023

@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.

@Eliulm
Copy link
Contributor

Eliulm commented Mar 16, 2023

@austincondiff Yeah, I will see what I can do.

@austincondiff
Copy link
Collaborator Author

@Eliulm it looks like #163 was merged. Feel free to open a separate PR.

@Eliulm
Copy link
Contributor

Eliulm commented Mar 18, 2023

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:
image
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:
Screenshot 2023-03-18 at 13 58 49
Screenshot 2023-03-18 at 14 01 25
As of now, I do not know, how I could change that :/

@austincondiff
Copy link
Collaborator Author

The open 4 is an alternate character.

Screen.Recording.2023-03-18.at.11.55.11.AM.mov

I forget how, but there is a way to do this in Swift.

@Eliulm
Copy link
Contributor

Eliulm commented Mar 21, 2023

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)
ruler_comparison
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
    }

@thecoolwinter
Copy link
Collaborator

@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
Screenshot 2023-03-22 at 1 26 50 PM

@Eliulm
Copy link
Contributor

Eliulm commented Mar 22, 2023

@thecoolwinter Awesome, thank you!

@austincondiff
Copy link
Collaborator Author

@Eliulm how are we looking with this?

@Eliulm
Copy link
Contributor

Eliulm commented Mar 26, 2023

Done, going to create a PR soon

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working UI
Projects
Status: 🏁 Complete
5 participants