Der Farbwechsel kommt jetzt auch an

Farbton und Symbolfarbe standen beim **Erzeugen** der Fenster, also außerhalb
jeder View. Damit wird der Wert genau einmal gelesen und SwiftUI erfährt nie,
dass er sich geändert hat: die Reiter, Knöpfe und Symbole blieben in der
Farbe stehen, die beim Öffnen galt, während der Farbwähler daneben schon die
neue zeigte.

Jetzt stehen beide im Rumpf der jeweiligen View — Panel, Einstellungen,
Einrichtung. Dort registriert SwiftUI den Zugriff und zeichnet neu.

Bei den Popovers blieb es beim Erzeugen: die entstehen bei jedem Öffnen neu,
lesen also ohnehin den aktuellen Wert.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-08-14 14:18:06 +02:00
parent 1432ef3a6f
commit c94c6166f5
5 changed files with 17 additions and 12 deletions

View File

@@ -82,6 +82,9 @@ struct OnboardingView: View {
footer
}
.frame(width: 520, height: 520)
// Im Rumpf gelesen, damit ein Farbwechsel ankommt.
.tint(Onyx.Color.accent)
.labelStyle(.onyx)
.task {
calendarGranted = calendarModel.hasAccess
fanControl.refreshInstallState()

View File

@@ -44,9 +44,7 @@ final class OnboardingWindowController: NSObject, NSWindowDelegate {
rootView: OnboardingView(
calendarModel: calendarModel, weatherModel: weatherModel,
mixer: mixer, fanControl: fanControl, launchAtLogin: launchAtLogin,
onFinish: { [weak self] in self?.finish() })
.tint(Onyx.Color.accent)
.labelStyle(.onyx))
onFinish: { [weak self] in self?.finish() }))
let window = NSWindow(contentViewController: hosting)
window.title = "Onyx"

View File

@@ -76,9 +76,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
NotchHostingView(
rootView: NotchContainer(presentation: presentation) {
NotchPanelContent(model: model)
}
.tint(Onyx.Color.accent)
.labelStyle(.onyx),
},
presentation: presentation)
}
coordinator.start()
@@ -366,5 +364,8 @@ private struct NotchPanelContent: View {
var body: some View {
WidgetGrid(placements: model.layout, availableWidth: AppModel.availableWidth)
// Im Rumpf gelesen, damit ein Farbwechsel ankommt.
.tint(Onyx.Color.accent)
.labelStyle(.onyx)
}
}

View File

@@ -71,6 +71,14 @@ struct SettingsView: View {
// Systems, und die beiden liegen in Dunkelgrau ein, zwei Prozent
// auseinander. Sichtbar wurde das als Kante quer durchs Fenster.
.background(Color(nsColor: .windowBackgroundColor))
// Farbton und Symbolfarbe hier und nicht beim Erzeugen des Fensters.
//
// Beim Erzeugen wird der Wert **einmal** gelesen, außerhalb jeder
// View SwiftUI erfährt nie, dass er sich geändert hat. Die Reiter
// und Knöpfe blieben deshalb in der Farbe stehen, die beim Öffnen
// galt, während der Farbwähler daneben schon die neue zeigte.
.tint(Onyx.Color.accent)
.labelStyle(.onyx)
// Nur ein Mindestmaß, keine feste Größe: sonst kann das Fenster
// wachsen, der Inhalt aber nicht mit.
.frame(minWidth: 740, minHeight: 460)

View File

@@ -61,12 +61,7 @@ final class SettingsWindowController: NSObject, NSWindowDelegate {
showOnboarding: showOnboarding,
selectedTab: Binding(
get: { [weak self] in self?.selectedTab ?? .widgets },
set: { [weak self] in self?.selectedTab = $0 }))
// Ohne das folgen Haken, Regler und Auswahlfelder der
// Systemfarbe statt der eingestellten. Genau daher kam das
// Grün, das in Onyx sonst nirgends vorkommt.
.tint(Onyx.Color.accent)
.labelStyle(.onyx))
set: { [weak self] in self?.selectedTab = $0 })))
let window = NSWindow(contentViewController: hosting)
window.title = "Onyx"