style: align actions panel with footer and tighten its layout
This commit is contained in:
@@ -9,6 +9,8 @@ final class ApplicationActionsController: NSViewController, NSSearchFieldDelegat
|
||||
private let empty = NSTextField(labelWithString: "No matching actions")
|
||||
private let applicationLabel = NSTextField(labelWithString: "")
|
||||
private var mouseMonitor: Any?
|
||||
private weak var coveredPill: NSView?
|
||||
private var coveredPillOpacity: Float = 1
|
||||
var uninstall: (() -> Void)?
|
||||
var closed: (() -> Void)?
|
||||
var isShown: Bool { viewIfLoaded?.superview != nil }
|
||||
@@ -38,12 +40,13 @@ final class ApplicationActionsController: NSViewController, NSSearchFieldDelegat
|
||||
row.isSelected = true
|
||||
action.isBordered = false
|
||||
action.alignment = .left
|
||||
action.font = .systemFont(ofSize: 16, weight: .medium)
|
||||
action.font = .systemFont(ofSize: 14, weight: .medium)
|
||||
action.contentTintColor = .systemRed
|
||||
action.attributedTitle = NSAttributedString(string: action.title, attributes: [
|
||||
.foregroundColor: NSColor.systemRed, .font: NSFont.systemFont(ofSize: 16, weight: .medium)
|
||||
.foregroundColor: NSColor.systemRed, .font: NSFont.systemFont(ofSize: 14, weight: .medium)
|
||||
])
|
||||
action.image = NSImage(systemSymbolName: "trash", accessibilityDescription: nil)
|
||||
action.image = NSImage(systemSymbolName: "trash", accessibilityDescription: nil)?
|
||||
.withSymbolConfiguration(NSImage.SymbolConfiguration(pointSize: 18, weight: .regular))
|
||||
action.imagePosition = .imageLeading
|
||||
action.target = self
|
||||
action.action = #selector(chooseAction)
|
||||
@@ -75,11 +78,9 @@ final class ApplicationActionsController: NSViewController, NSSearchFieldDelegat
|
||||
empty.textColor = SunsetPalette.secondaryText
|
||||
empty.font = .systemFont(ofSize: 14)
|
||||
empty.isHidden = true
|
||||
let divider = NSBox()
|
||||
divider.boxType = .separator
|
||||
content.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(content)
|
||||
for child in [background, applicationLabel, row, empty, divider, search] {
|
||||
for child in [background, applicationLabel, row, empty, search] {
|
||||
child.translatesAutoresizingMaskIntoConstraints = false
|
||||
if child !== background { content.addSubview(child) }
|
||||
}
|
||||
@@ -89,7 +90,7 @@ final class ApplicationActionsController: NSViewController, NSSearchFieldDelegat
|
||||
}
|
||||
NSLayoutConstraint.activate([
|
||||
view.widthAnchor.constraint(equalToConstant: 360),
|
||||
view.heightAnchor.constraint(equalToConstant: 148),
|
||||
view.heightAnchor.constraint(equalToConstant: 116),
|
||||
content.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
content.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
content.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
@@ -104,23 +105,20 @@ final class ApplicationActionsController: NSViewController, NSSearchFieldDelegat
|
||||
row.leadingAnchor.constraint(equalTo: content.leadingAnchor, constant: 8),
|
||||
row.trailingAnchor.constraint(equalTo: content.trailingAnchor, constant: -8),
|
||||
row.topAnchor.constraint(equalTo: applicationLabel.bottomAnchor, constant: 10),
|
||||
row.heightAnchor.constraint(equalToConstant: 44),
|
||||
action.leadingAnchor.constraint(equalTo: row.leadingAnchor, constant: 10),
|
||||
row.heightAnchor.constraint(equalToConstant: LauncherRowView.rowHeight),
|
||||
action.leadingAnchor.constraint(equalTo: row.leadingAnchor, constant: 8),
|
||||
action.centerYAnchor.constraint(equalTo: row.centerYAnchor),
|
||||
action.trailingAnchor.constraint(equalTo: returnKey.leadingAnchor, constant: -12),
|
||||
returnKey.trailingAnchor.constraint(equalTo: row.trailingAnchor, constant: -12),
|
||||
returnKey.centerYAnchor.constraint(equalTo: row.centerYAnchor),
|
||||
returnKey.widthAnchor.constraint(equalToConstant: 20),
|
||||
returnKey.heightAnchor.constraint(equalToConstant: 20),
|
||||
returnKey.widthAnchor.constraint(equalToConstant: 18),
|
||||
returnKey.heightAnchor.constraint(equalToConstant: 18),
|
||||
empty.leadingAnchor.constraint(equalTo: content.leadingAnchor, constant: 16),
|
||||
empty.centerYAnchor.constraint(equalTo: row.centerYAnchor),
|
||||
divider.leadingAnchor.constraint(equalTo: content.leadingAnchor),
|
||||
divider.trailingAnchor.constraint(equalTo: content.trailingAnchor),
|
||||
divider.bottomAnchor.constraint(equalTo: search.topAnchor, constant: -10),
|
||||
search.leadingAnchor.constraint(equalTo: content.leadingAnchor, constant: 16),
|
||||
search.trailingAnchor.constraint(equalTo: content.trailingAnchor, constant: -16),
|
||||
search.bottomAnchor.constraint(equalTo: content.bottomAnchor, constant: -12),
|
||||
search.heightAnchor.constraint(equalToConstant: 28)
|
||||
search.bottomAnchor.constraint(equalTo: content.bottomAnchor, constant: -8),
|
||||
search.heightAnchor.constraint(equalToConstant: 24)
|
||||
])
|
||||
content.layer?.borderColor = SunsetPalette.secondaryText.withAlphaComponent(0.22).cgColor
|
||||
returnKey.layer?.borderColor = SunsetPalette.secondaryText.withAlphaComponent(0.35).cgColor
|
||||
@@ -137,8 +135,12 @@ final class ApplicationActionsController: NSViewController, NSSearchFieldDelegat
|
||||
host.addSubview(view)
|
||||
NSLayoutConstraint.activate([
|
||||
view.trailingAnchor.constraint(equalTo: pill.trailingAnchor),
|
||||
view.bottomAnchor.constraint(equalTo: pill.topAnchor, constant: -8)
|
||||
view.bottomAnchor.constraint(equalTo: pill.bottomAnchor)
|
||||
])
|
||||
coveredPill = pill
|
||||
coveredPillOpacity = pill.layer?.opacity ?? 1
|
||||
pill.layer?.opacity = 0
|
||||
pill.setAccessibilityHidden(true)
|
||||
window.makeFirstResponder(search)
|
||||
(search.currentEditor() as? NSTextView)?.insertionPointColor = SunsetPalette.accent
|
||||
mouseMonitor = NSEvent.addLocalMonitorForEvents(matching: [.leftMouseDown, .rightMouseDown]) { [weak self, weak pill] event in
|
||||
@@ -158,6 +160,9 @@ final class ApplicationActionsController: NSViewController, NSSearchFieldDelegat
|
||||
guard isShown else { return }
|
||||
if let mouseMonitor { NSEvent.removeMonitor(mouseMonitor) }
|
||||
mouseMonitor = nil
|
||||
coveredPill?.layer?.opacity = coveredPillOpacity
|
||||
coveredPill?.setAccessibilityHidden(false)
|
||||
coveredPill = nil
|
||||
view.removeFromSuperview()
|
||||
closed?()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user