fix: reload tint colors while running
This commit is contained in:
@@ -8,6 +8,7 @@ final class EmojiPickerController: NSViewController, NSCollectionViewDataSource,
|
||||
private let category = NSPopUpButton()
|
||||
private let status = NSTextField(labelWithString: "")
|
||||
private let empty = NSTextField(labelWithString: "No matching emoji")
|
||||
private var themeObservation: ThemeObservation?
|
||||
private let copyButton = NSButton(title: "Copy and Paste", target: nil, action: nil)
|
||||
private let actionsButton = NSButton(title: "Actions", target: nil, action: nil)
|
||||
private let actions = ApplicationActionsController()
|
||||
@@ -93,6 +94,11 @@ final class EmojiPickerController: NSViewController, NSCollectionViewDataSource,
|
||||
footer.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -8),
|
||||
footer.heightAnchor.constraint(equalToConstant: 36),
|
||||
])
|
||||
themeObservation = ThemeObservation { [weak self] in
|
||||
self?.category.contentTintColor = ThemePalette.secondaryText
|
||||
self?.empty.textColor = ThemePalette.secondaryText
|
||||
self?.status.textColor = ThemePalette.secondaryText
|
||||
}
|
||||
inputChanged()
|
||||
}
|
||||
|
||||
@@ -308,6 +314,9 @@ final class EmojiPickerController: NSViewController, NSCollectionViewDataSource,
|
||||
@MainActor
|
||||
private final class EmojiSectionHeader: NSView {
|
||||
private let label = NSTextField(labelWithString: "")
|
||||
private var themeObservation: ThemeObservation?
|
||||
private var title = ""
|
||||
private var count = 0
|
||||
|
||||
override init(frame frameRect: NSRect) {
|
||||
super.init(frame: frameRect)
|
||||
@@ -317,11 +326,17 @@ private final class EmojiSectionHeader: NSView {
|
||||
label.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 16),
|
||||
label.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -8),
|
||||
])
|
||||
themeObservation = ThemeObservation { [weak self] in
|
||||
guard let self else { return }
|
||||
self.setTitle(self.title, count: self.count)
|
||||
}
|
||||
}
|
||||
|
||||
required init?(coder: NSCoder) { fatalError("Conjure creates emoji headers programmatically") }
|
||||
|
||||
func setTitle(_ title: String, count: Int) {
|
||||
self.title = title
|
||||
self.count = count
|
||||
let text = NSMutableAttributedString(string: title, attributes: [
|
||||
.font: NSFont.systemFont(ofSize: 13), .foregroundColor: ThemePalette.secondaryText,
|
||||
])
|
||||
@@ -348,7 +363,6 @@ private final class EmojiItem: NSCollectionViewItem {
|
||||
}
|
||||
|
||||
func highlight(_ selected: Bool) {
|
||||
button.layer?.backgroundColor = (selected ? ThemePalette.selectionFill : ThemePalette.text.withAlphaComponent(0.045)).cgColor
|
||||
button.setAccessibilitySelected(selected)
|
||||
button.selected = selected
|
||||
}
|
||||
@@ -361,6 +375,14 @@ private final class EmojiButton: NSButton {
|
||||
var selected = false { didSet { updateBorder() } }
|
||||
private var hovered = false { didSet { updateBorder() } }
|
||||
private var hoverTracking: NSTrackingArea?
|
||||
private var themeObservation: ThemeObservation?
|
||||
|
||||
override init(frame frameRect: NSRect) {
|
||||
super.init(frame: frameRect)
|
||||
themeObservation = ThemeObservation { [weak self] in self?.updateBorder() }
|
||||
}
|
||||
|
||||
required init?(coder: NSCoder) { fatalError("Conjure creates emoji buttons programmatically") }
|
||||
|
||||
override func updateTrackingAreas() {
|
||||
super.updateTrackingAreas()
|
||||
@@ -377,6 +399,7 @@ private final class EmojiButton: NSButton {
|
||||
override func mouseExited(with event: NSEvent) { hovered = false }
|
||||
|
||||
private func updateBorder() {
|
||||
layer?.backgroundColor = (selected ? ThemePalette.selectionFill : ThemePalette.text.withAlphaComponent(0.045)).cgColor
|
||||
layer?.borderWidth = selected || hovered ? 0.5 : 0
|
||||
layer?.borderColor = (selected ? ThemePalette.accent.withAlphaComponent(0.8)
|
||||
: ThemePalette.secondaryText.withAlphaComponent(0.35)).cgColor
|
||||
|
||||
Reference in New Issue
Block a user