]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
macOS: Make highlighter themes static
authorJason A. Donenfeld <Jason@zx2c4.com>
Mon, 21 Jan 2019 21:13:14 +0000 (22:13 +0100)
committerJason A. Donenfeld <Jason@zx2c4.com>
Mon, 21 Jan 2019 21:13:14 +0000 (22:13 +0100)
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
WireGuard/WireGuard/UI/macOS/View/ConfTextColorTheme.swift
WireGuard/WireGuard/UI/macOS/View/ConfTextStorage.swift
WireGuard/WireGuard/UI/macOS/View/ConfTextView.swift

index c3a1eb2fd39142ee6dd3e8a53da35ffe55264206..5229d509615fb4d2c9bdc78c77ceb269de4b45f7 100644 (file)
@@ -4,13 +4,13 @@
 import Cocoa
 
 protocol ConfTextColorTheme {
-    var defaultColor: NSColor { get }
-    var colorMap: [UInt32: NSColor] { get }
+    static var defaultColor: NSColor { get }
+    static var colorMap: [UInt32: NSColor] { get }
 }
 
 struct ConfTextAquaColorTheme: ConfTextColorTheme {
-    var defaultColor = NSColor(hex: "#000000")
-    var colorMap: [UInt32: NSColor] = [
+    static let defaultColor = NSColor(hex: "#000000")
+    static let colorMap: [UInt32: NSColor] = [
         HighlightSection.rawValue: NSColor(hex: "#326D74"), // Class name in Xcode
         HighlightField.rawValue: NSColor(hex: "#9B2393"), // Keywords in Xcode
         HighlightPublicKey.rawValue: NSColor(hex: "#643820"), // Preprocessor directives in Xcode
@@ -28,8 +28,8 @@ struct ConfTextAquaColorTheme: ConfTextColorTheme {
 }
 
 struct ConfTextDarkAquaColorTheme: ConfTextColorTheme {
-    var defaultColor = NSColor(hex: "#FFFFFF") // Plain text in Xcode
-    var colorMap: [UInt32: NSColor] = [
+    static let defaultColor = NSColor(hex: "#FFFFFF") // Plain text in Xcode
+    static let colorMap: [UInt32: NSColor] = [
         HighlightSection.rawValue: NSColor(hex: "#91D462"), // Class name in Xcode
         HighlightField.rawValue: NSColor(hex: "#FC5FA3"), // Keywords in Xcode
         HighlightPublicKey.rawValue: NSColor(hex: "#FD8F3F"), // Preprocessor directives in Xcode
index 423e7cd2ab43cdcc77106d3f90ba97647954ca86..fb8a382efde01f3b8c7cb149cc4fb455f451f574 100644 (file)
@@ -11,7 +11,7 @@ class ConfTextStorage: NSTextStorage {
     private let boldFont = NSFont.boldSystemFont(ofSize: fontSize)
     private lazy var italicFont = NSFontManager.shared.convert(defaultFont, toHaveTrait: .italicFontMask)
 
-    private var textColorTheme: ConfTextColorTheme?
+    private var textColorTheme: ConfTextColorTheme.Type?
 
     private let backingStore: NSMutableAttributedString
     private(set) var hasError = false
@@ -47,7 +47,7 @@ class ConfTextStorage: NSTextStorage {
         }
     }
 
-    func updateAttributes(for textColorTheme: ConfTextColorTheme) {
+    func updateAttributes(for textColorTheme: ConfTextColorTheme.Type) {
         self.textColorTheme = textColorTheme
         highlightSyntax()
     }
@@ -82,19 +82,18 @@ class ConfTextStorage: NSTextStorage {
     }
 
     func highlightSyntax() {
+        guard let textColorTheme = textColorTheme else { return }
         hasError = false
         privateKeyString = nil
 
         let fullTextRange = NSRange(location: 0, length: (backingStore.string as NSString).length)
 
         backingStore.beginEditing()
-        if let textColorTheme = textColorTheme {
-            let defaultAttributes: [NSAttributedString.Key: Any] = [
-                .foregroundColor: textColorTheme.defaultColor,
-                .font: defaultFont
-            ]
-            backingStore.setAttributes(defaultAttributes, range: fullTextRange)
-        }
+        let defaultAttributes: [NSAttributedString.Key: Any] = [
+            .foregroundColor: textColorTheme.defaultColor,
+            .font: defaultFont
+        ]
+        backingStore.setAttributes(defaultAttributes, range: fullTextRange)
         var spans = highlight_config(backingStore.string.cString(using: String.Encoding.utf8))!
 
         while spans.pointee.type != HighlightEnd {
@@ -102,10 +101,8 @@ class ConfTextStorage: NSTextStorage {
 
             let range = NSRange(location: span.start, length: span.len)
             backingStore.setAttributes(nonColorAttributes(for: span.type), range: range)
-            if let textColorTheme = textColorTheme {
-                let color = textColorTheme.colorMap[span.type.rawValue] ?? textColorTheme.defaultColor
-                backingStore.addAttribute(.foregroundColor, value: color, range: range)
-            }
+            let color = textColorTheme.colorMap[span.type.rawValue] ?? textColorTheme.defaultColor
+            backingStore.addAttribute(.foregroundColor, value: color, range: range)
 
             if span.type == HighlightError {
                 hasError = true
index 481cbaaa7e977c7b970a4df2159c5821990fa152..bf0f8223440be8494aee5a69c51ed6662fb3cb0a 100644 (file)
@@ -46,9 +46,9 @@ class ConfTextView: NSTextView {
     private func updateTheme() {
         switch effectiveAppearance.bestMatch(from: [.aqua, .darkAqua]) ?? .aqua {
         case .darkAqua:
-            confTextStorage.updateAttributes(for: ConfTextDarkAquaColorTheme())
+            confTextStorage.updateAttributes(for: ConfTextDarkAquaColorTheme.self)
         default:
-            confTextStorage.updateAttributes(for: ConfTextAquaColorTheme())
+            confTextStorage.updateAttributes(for: ConfTextAquaColorTheme.self)
         }
     }