Files
onyx/Packages/OnyxKit/Sources/OnyxDesign/OnyxLabelStyle.swift
Scarriffle 0df566d531 Symbole folgen der Akzentfarbe, nicht der des Systems
SwiftUI zeichnet Symbole in Listen und Formularen auf macOS in der
Akzentfarbe des Systems — nicht in der des Fensters. `.tint` an der Wurzel
half deshalb nur der Reiterleiste; die Widget-Liste blieb systemgrün neben
einer blauen Leiste, obwohl beides derselben Einstellung folgen soll.

Ein eigener Label-Stil setzt die Farbe am Symbol. Er vererbt sich über die
Umgebung, also genügt eine Zeile an denselben vier Wurzeln, an denen auch der
Farbton gesetzt wird: Panel, Popovers, Einstellungen, Einrichtung.

Ein Symbol, das seine Farbe selbst mitbringt, behält sie — die innere Angabe
schlägt die äußere. Der grüne Haken für „erteilt" bringt sie jetzt am Symbol
mit statt am ganzen Label: Grün heißt dort „erteilt" und ist keine
Geschmacksfrage.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-14 13:48:57 +02:00

31 lines
1.1 KiB
Swift

import SwiftUI
/// Färbt das Symbol eines `Label` in der eingestellten Akzentfarbe.
///
/// **Nötig, weil `.tint` hier nicht greift.** SwiftUI zeichnet Symbole in
/// Listen und Formularen auf macOS in der Akzentfarbe des *Systems* nicht in
/// der des Fensters. Das Ergebnis war eine Widget-Liste in Systemgrün neben
/// einer Reiterleiste in Onyx-Blau, obwohl beides derselben Einstellung folgen
/// soll.
///
/// Ein Stil statt einer Farbe an jeder Fundstelle: er vererbt sich über die
/// Umgebung, also genügt eine Zeile an der Wurzel. Ein Symbol, das seine Farbe
/// selbst mitbringt etwa der grüne Haken für erteilt" , behält sie: die
/// innere Angabe schlägt die äußere.
public struct OnyxAccentLabelStyle: LabelStyle {
public init() {}
public func makeBody(configuration: Configuration) -> some View {
Label {
configuration.title
} icon: {
configuration.icon.foregroundStyle(Onyx.Color.accent)
}
}
}
public extension LabelStyle where Self == OnyxAccentLabelStyle {
static var onyx: OnyxAccentLabelStyle { OnyxAccentLabelStyle() }
}