diff --git a/Package.swift b/Package.swift index 41edcf0f8..d0b83184e 100644 --- a/Package.swift +++ b/Package.swift @@ -1,11 +1,11 @@ -// swift-tools-version: 5.6 +// swift-tools-version: 5.7 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( name: "CodeEditTextView", - platforms: [.macOS(.v12)], + platforms: [.macOS(.v13)], products: [ .library( name: "CodeEditTextView", diff --git a/Sources/CodeEditTextView/Controller/STTextViewController.swift b/Sources/CodeEditTextView/Controller/STTextViewController.swift index d04a81352..f2c80935a 100644 --- a/Sources/CodeEditTextView/Controller/STTextViewController.swift +++ b/Sources/CodeEditTextView/Controller/STTextViewController.swift @@ -130,9 +130,9 @@ public class STTextViewController: NSViewController, STTextViewDelegate, ThemeAt rulerView.textColor = .secondaryLabelColor rulerView.drawSeparator = false rulerView.baselineOffset = baselineOffset - rulerView.font = NSFont.monospacedDigitSystemFont(ofSize: 9.5, weight: .regular) + rulerView.font = rulerFont rulerView.selectedLineHighlightColor = theme.lineHighlight - rulerView.rulerInsets = STRulerInsets(leading: 20, trailing: 8) + rulerView.rulerInsets = STRulerInsets(leading: rulerFont.pointSize * 1.6, trailing: 8) if self.isEditable == false { rulerView.selectedLineTextColor = nil @@ -255,6 +255,8 @@ public class STTextViewController: NSViewController, STTextViewDelegate, ThemeAt rulerView?.selectedLineHighlightColor = theme.lineHighlight rulerView?.baselineOffset = baselineOffset rulerView.highlightSelectedLine = isEditable + rulerView?.rulerInsets = STRulerInsets(leading: rulerFont.pointSize * 1.6, trailing: 8) + rulerView?.font = rulerFont if let scrollView = view as? NSScrollView { scrollView.drawsBackground = useThemeBackground diff --git a/Sources/CodeEditTextView/Extensions/NSFont+RulerFont.swift b/Sources/CodeEditTextView/Extensions/NSFont+RulerFont.swift new file mode 100644 index 000000000..b733dded0 --- /dev/null +++ b/Sources/CodeEditTextView/Extensions/NSFont+RulerFont.swift @@ -0,0 +1,42 @@ +// +// NSFont+RulerFont.swift +// +// +// Created by Elias Wahl on 17.03.23. +// + +import Foundation +import AppKit + +extension STTextViewController { + var rulerFont: NSFont { + let fontSize: Double = (font.pointSize - 1) + 0.25 + let fontAdvance: Double = font.pointSize * 0.49 + 0.1 + let fontWeight = NSFont.Weight(rawValue: font.pointSize * 0.00001 + 0.0001) + let fontWidth = NSFont.Width(rawValue: -0.13) + + let font = NSFont.systemFont(ofSize: fontSize, weight: fontWeight, width: fontWidth) + + /// Set the open four + let alt4: [NSFontDescriptor.FeatureKey: Int] = [ + .selectorIdentifier: kStylisticAltOneOnSelector, + .typeIdentifier: kStylisticAlternativesType + ] + + /// Set alternate styling for 6 and 9 + let alt6and9: [NSFontDescriptor.FeatureKey: Int] = [ + .selectorIdentifier: kStylisticAltTwoOnSelector, + .typeIdentifier: kStylisticAlternativesType + ] + + /// Make all digits monospaced + let monoSpaceDigits: [NSFontDescriptor.FeatureKey: Int] = [ + .selectorIdentifier: 0, + .typeIdentifier: kNumberSpacingType + ] + + let features = [alt4, alt6and9, monoSpaceDigits] + let descriptor = font.fontDescriptor.addingAttributes([.featureSettings: features, .fixedAdvance: fontAdvance]) + return NSFont(descriptor: descriptor, size: 0) ?? font + } +}