From d7a88300f6ceef7f566147298626a65b7669e6ee Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Mon, 21 Jan 2019 22:13:14 +0100 Subject: [PATCH] macOS: Make highlighter themes static Signed-off-by: Jason A. Donenfeld --- .../UI/macOS/View/ConfTextColorTheme.swift | 12 +++++----- .../UI/macOS/View/ConfTextStorage.swift | 23 ++++++++----------- .../UI/macOS/View/ConfTextView.swift | 4 ++-- 3 files changed, 18 insertions(+), 21 deletions(-) diff --git a/WireGuard/WireGuard/UI/macOS/View/ConfTextColorTheme.swift b/WireGuard/WireGuard/UI/macOS/View/ConfTextColorTheme.swift index c3a1eb2..5229d50 100644 --- a/WireGuard/WireGuard/UI/macOS/View/ConfTextColorTheme.swift +++ b/WireGuard/WireGuard/UI/macOS/View/ConfTextColorTheme.swift @@ -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 diff --git a/WireGuard/WireGuard/UI/macOS/View/ConfTextStorage.swift b/WireGuard/WireGuard/UI/macOS/View/ConfTextStorage.swift index 423e7cd..fb8a382 100644 --- a/WireGuard/WireGuard/UI/macOS/View/ConfTextStorage.swift +++ b/WireGuard/WireGuard/UI/macOS/View/ConfTextStorage.swift @@ -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 diff --git a/WireGuard/WireGuard/UI/macOS/View/ConfTextView.swift b/WireGuard/WireGuard/UI/macOS/View/ConfTextView.swift index 481cbaa..bf0f822 100644 --- a/WireGuard/WireGuard/UI/macOS/View/ConfTextView.swift +++ b/WireGuard/WireGuard/UI/macOS/View/ConfTextView.swift @@ -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) } }