Yep. AI rewrote the whole thing.
This commit is contained in:
107
Downterm/CommandNotch/Views/GeneralSettingsView.swift
Normal file
107
Downterm/CommandNotch/Views/GeneralSettingsView.swift
Normal file
@@ -0,0 +1,107 @@
|
||||
import AppKit
|
||||
import SwiftUI
|
||||
|
||||
struct GeneralSettingsView: View {
|
||||
@ObservedObject private var settingsController = AppSettingsController.shared
|
||||
|
||||
private var maxOpenWidth: Double {
|
||||
let currentWidth = settingsController.settings.display.openWidth
|
||||
let screenWidth = NSScreen.screens.map { $0.frame.width - 40 }.max() ?? 1600
|
||||
return max(currentWidth, Double(screenWidth.rounded()))
|
||||
}
|
||||
|
||||
private var maxOpenHeight: Double {
|
||||
let currentHeight = settingsController.settings.display.openHeight
|
||||
let screenHeight = NSScreen.screens.map { $0.frame.height - 20 }.max() ?? 900
|
||||
return max(currentHeight, Double(screenHeight.rounded()))
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
Form {
|
||||
Section("Display") {
|
||||
Toggle("Show on all displays", isOn: settingsController.binding(\.display.showOnAllDisplays))
|
||||
Toggle("Show menu bar icon", isOn: settingsController.binding(\.display.showMenuBarIcon))
|
||||
Toggle("Launch at login", isOn: settingsController.binding(\.display.launchAtLogin))
|
||||
.onChange(of: settingsController.settings.display.launchAtLogin) { _, newValue in
|
||||
LaunchAtLoginHelper.setEnabled(newValue)
|
||||
}
|
||||
}
|
||||
|
||||
Section("Hover Behavior") {
|
||||
Toggle("Open notch on hover", isOn: settingsController.binding(\.behavior.openNotchOnHover))
|
||||
if settingsController.settings.behavior.openNotchOnHover {
|
||||
HStack {
|
||||
Text("Hover delay")
|
||||
Slider(value: settingsController.binding(\.behavior.minimumHoverDuration), in: 0.0...2.0, step: 0.05)
|
||||
Text(String(format: "%.2fs", settingsController.settings.behavior.minimumHoverDuration))
|
||||
.monospacedDigit()
|
||||
.frame(width: 50)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section("Gestures") {
|
||||
Toggle("Enable gestures", isOn: settingsController.binding(\.behavior.enableGestures))
|
||||
if settingsController.settings.behavior.enableGestures {
|
||||
HStack {
|
||||
Text("Sensitivity")
|
||||
Slider(value: settingsController.binding(\.behavior.gestureSensitivity), in: 0.1...1.0, step: 0.05)
|
||||
Text(String(format: "%.2f", settingsController.settings.behavior.gestureSensitivity))
|
||||
.monospacedDigit()
|
||||
.frame(width: 50)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section("Closed Notch Size") {
|
||||
Picker("Notch screens", selection: settingsController.binding(\.display.notchHeightMode)) {
|
||||
ForEach(NotchHeightMode.allCases) { mode in
|
||||
Text(mode.label).tag(mode.rawValue)
|
||||
}
|
||||
}
|
||||
if settingsController.settings.display.notchHeightMode == NotchHeightMode.custom.rawValue {
|
||||
HStack {
|
||||
Text("Custom height")
|
||||
Slider(value: settingsController.binding(\.display.notchHeight), in: 16...64, step: 1)
|
||||
Text("\(Int(settingsController.settings.display.notchHeight))pt")
|
||||
.monospacedDigit()
|
||||
.frame(width: 50)
|
||||
}
|
||||
}
|
||||
|
||||
Picker("Non-notch screens", selection: settingsController.binding(\.display.nonNotchHeightMode)) {
|
||||
ForEach(NonNotchHeightMode.allCases) { mode in
|
||||
Text(mode.label).tag(mode.rawValue)
|
||||
}
|
||||
}
|
||||
if settingsController.settings.display.nonNotchHeightMode == NonNotchHeightMode.custom.rawValue {
|
||||
HStack {
|
||||
Text("Custom height")
|
||||
Slider(value: settingsController.binding(\.display.nonNotchHeight), in: 16...64, step: 1)
|
||||
Text("\(Int(settingsController.settings.display.nonNotchHeight))pt")
|
||||
.monospacedDigit()
|
||||
.frame(width: 50)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section("Open Notch Size") {
|
||||
HStack {
|
||||
Text("Width")
|
||||
Slider(value: settingsController.binding(\.display.openWidth), in: 320...maxOpenWidth, step: 10)
|
||||
Text("\(Int(settingsController.settings.display.openWidth))pt")
|
||||
.monospacedDigit()
|
||||
.frame(width: 60)
|
||||
}
|
||||
HStack {
|
||||
Text("Height")
|
||||
Slider(value: settingsController.binding(\.display.openHeight), in: 140...maxOpenHeight, step: 10)
|
||||
Text("\(Int(settingsController.settings.display.openHeight))pt")
|
||||
.monospacedDigit()
|
||||
.frame(width: 60)
|
||||
}
|
||||
}
|
||||
}
|
||||
.formStyle(.grouped)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user