style: limit emoji borders to selected and hovered tiles
This commit is contained in:
@@ -284,7 +284,7 @@ final class EmojiPickerController: NSViewController, NSCollectionViewDataSource,
|
||||
|
||||
@MainActor
|
||||
private final class EmojiItem: NSCollectionViewItem {
|
||||
let button = NSButton()
|
||||
let button = EmojiButton()
|
||||
var clicked: (() -> Void)?
|
||||
|
||||
override func loadView() {
|
||||
@@ -294,7 +294,6 @@ private final class EmojiItem: NSCollectionViewItem {
|
||||
button.action = #selector(copyEmoji)
|
||||
button.wantsLayer = true
|
||||
button.layer?.cornerRadius = 10
|
||||
button.layer?.borderWidth = 0.5
|
||||
button.layer?.borderColor = SunsetPalette.secondaryText.withAlphaComponent(0.22).cgColor
|
||||
view = button
|
||||
}
|
||||
@@ -302,7 +301,33 @@ private final class EmojiItem: NSCollectionViewItem {
|
||||
func highlight(_ selected: Bool) {
|
||||
button.layer?.backgroundColor = selected ? SunsetPalette.accent.withAlphaComponent(0.22).cgColor : nil
|
||||
button.setAccessibilitySelected(selected)
|
||||
button.selected = selected
|
||||
}
|
||||
|
||||
@objc private func copyEmoji() { clicked?() }
|
||||
}
|
||||
|
||||
@MainActor
|
||||
private final class EmojiButton: NSButton {
|
||||
var selected = false { didSet { updateBorder() } }
|
||||
private var hovered = false { didSet { updateBorder() } }
|
||||
private var hoverTracking: NSTrackingArea?
|
||||
|
||||
override func updateTrackingAreas() {
|
||||
super.updateTrackingAreas()
|
||||
if let hoverTracking { removeTrackingArea(hoverTracking) }
|
||||
let tracking = NSTrackingArea(rect: .zero,
|
||||
options: [.mouseEnteredAndExited, .activeInKeyWindow, .inVisibleRect],
|
||||
owner: self, userInfo: nil)
|
||||
addTrackingArea(tracking)
|
||||
hoverTracking = tracking
|
||||
hovered = window.map { visibleRect.contains(convert($0.mouseLocationOutsideOfEventStream, from: nil)) } ?? false
|
||||
}
|
||||
|
||||
override func mouseEntered(with event: NSEvent) { hovered = true }
|
||||
override func mouseExited(with event: NSEvent) { hovered = false }
|
||||
|
||||
private func updateBorder() {
|
||||
layer?.borderWidth = selected || hovered ? 0.5 : 0
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user