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 footer
} }
.frame(width: 520, height: 520) .frame(width: 520, height: 520)
// Im Rumpf gelesen, damit ein Farbwechsel ankommt.
.tint(Onyx.Color.accent)
.labelStyle(.onyx)
.task { .task {
calendarGranted = calendarModel.hasAccess calendarGranted = calendarModel.hasAccess
fanControl.refreshInstallState() fanControl.refreshInstallState()

View File

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

View File

@@ -76,9 +76,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
NotchHostingView( NotchHostingView(
rootView: NotchContainer(presentation: presentation) { rootView: NotchContainer(presentation: presentation) {
NotchPanelContent(model: model) NotchPanelContent(model: model)
} },
.tint(Onyx.Color.accent)
.labelStyle(.onyx),
presentation: presentation) presentation: presentation)
} }
coordinator.start() coordinator.start()
@@ -366,5 +364,8 @@ private struct NotchPanelContent: View {
var body: some View { var body: some View {
WidgetGrid(placements: model.layout, availableWidth: AppModel.availableWidth) 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 // Systems, und die beiden liegen in Dunkelgrau ein, zwei Prozent
// auseinander. Sichtbar wurde das als Kante quer durchs Fenster. // auseinander. Sichtbar wurde das als Kante quer durchs Fenster.
.background(Color(nsColor: .windowBackgroundColor)) .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 // Nur ein Mindestmaß, keine feste Größe: sonst kann das Fenster
// wachsen, der Inhalt aber nicht mit. // wachsen, der Inhalt aber nicht mit.
.frame(minWidth: 740, minHeight: 460) .frame(minWidth: 740, minHeight: 460)

View File

@@ -61,12 +61,7 @@ final class SettingsWindowController: NSObject, NSWindowDelegate {
showOnboarding: showOnboarding, showOnboarding: showOnboarding,
selectedTab: Binding( selectedTab: Binding(
get: { [weak self] in self?.selectedTab ?? .widgets }, get: { [weak self] in self?.selectedTab ?? .widgets },
set: { [weak self] in self?.selectedTab = $0 })) 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))
let window = NSWindow(contentViewController: hosting) let window = NSWindow(contentViewController: hosting)
window.title = "Onyx" window.title = "Onyx"