Alle Kacheln, Popovers und Fenster auf die Designschicht umgestellt: rund hundert gesetzte Schriftgrößen und 159 gesetzte Abstände und Radien sind jetzt Token. Übrig bleibt `spacing: 0` — das ist eine Aussage, keine geratene Zahl. Die Einstellungen bekommen eine Seitenleiste statt sieben Reitern, deren deutsche Beschriftungen zusammen 880 Punkte brauchten. Panel-Token stehen nicht mehr in Fenstern: dort gilt Systemsemantik, damit der Hellmodus nicht schwarz auf schwarz endet. Neu ist ein Schaufenster, das alle Bauteile nebeneinander zeigt — ohne das lässt sich eine Änderung an einem Token nur prüfen, indem man die App bedient, bis jede Kachel einmal zu sehen war. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
27 lines
1.1 KiB
Swift
27 lines
1.1 KiB
Swift
import AppKit
|
|
|
|
/// Wohin ein Fenster von Onyx gehört.
|
|
///
|
|
/// `NSWindow.center()` setzt etwas **oberhalb** der Bildschirmmitte. Bei einem
|
|
/// nicht sehr hohen Fenster landet der Schließknopf damit knapp unter der
|
|
/// Menüleiste — wer ihn treffen will, fährt durch die Auslösefläche der Notch
|
|
/// und hat plötzlich das Panel vor sich.
|
|
///
|
|
/// Das gilt für jedes Fenster, das Onyx aufmacht, nicht nur für die
|
|
/// Einstellungen. Deshalb steht es hier und nicht in einem der Controller.
|
|
enum OnyxWindowPlacement {
|
|
|
|
/// Wirklich mittig, nicht „etwas unterhalb der Notch".
|
|
///
|
|
/// Ein erster Versuch mit 60 Punkten Abstand zur Oberkante war zu zaghaft:
|
|
/// der Titelbalken lag weiter so hoch, dass man auf dem Weg zu seinen
|
|
/// Knöpfen durch die Auslösefläche fuhr.
|
|
static func center(_ window: NSWindow) {
|
|
guard let screen = window.screen ?? NSScreen.main else { window.center(); return }
|
|
let visible = screen.visibleFrame
|
|
let size = window.frame.size
|
|
window.setFrameOrigin(NSPoint(x: visible.midX - size.width / 2,
|
|
y: visible.midY - size.height / 2))
|
|
}
|
|
}
|