Files
ScarriffleandClaude Opus 5 ecb39fbe5f Eine Designschicht statt hundertfach gesetzter Zahlen
Token für Schrift, Symbolgröße, Abstand, Radius und Bewegung, dazu sieben
Bauteile, die vorher in jeder Kachel neu gebaut wurden — Karte, Abschnittstitel,
Hinweis, Pillenknopf, Regler, Ablegefläche, Haarlinie.

Symbole bekommen eine **eigene** Staffel und nicht die der Schrift: ein
9-Punkt-Symbol neben 9-Punkt-Text wirkt kleiner, nicht gleich groß. Beide in
eine Staffel zu zwingen hieße, an jeder Stelle gegen sie zu arbeiten.

Das Flächenrezept — Tint, Bänderung, Kante — stand zweimal da, einmal für das
Panel und einmal für Fenster. Es ist jetzt `OnyxStone`, generisch über die Form,
damit auch die animierende Notch-Silhouette es benutzen kann.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-05 21:04:51 +02:00

69 lines
2.4 KiB
Swift

import SwiftUI
/// Woraus die Fläche gemacht ist.
///
/// **Der Werkstoff, nicht die Form.** Ob Onyx oben als verschmolzene Notch
/// oder als schwebende Insel sitzt, entscheidet `NotchStyle`; woraus diese
/// Fläche besteht, steht hier. Beides zu vermengen hieße, eine Insel aus Glas
/// nicht bauen zu können, ohne die Notch mitzuändern.
///
/// Drei Werkstoffe und keine einzelnen Regler. Deckkraft, Glanz und Kante
/// hängen voneinander ab: viel Glanz auf einer deckenden Fläche sieht nach
/// Fettfilm aus, eine kaum sichtbare Kante auf einer durchscheinenden lässt
/// die Form ausfransen. Was man wählt, ist das Zusammenspiel — nicht drei
/// Zahlen.
public enum NotchMaterial: String, Codable, Sendable, CaseIterable {
/// Deckend schwarz. Die Voreinstellung, und die einzige, die mit der
/// Hardware-Notch verschmilzt: alles andere hätte dort eine sichtbare
/// Kante zum Gehäuse.
case stone
/// Durchscheinend — der Hintergrund ist als Weichzeichnung zu ahnen.
case blur
/// Stark durchscheinend, mit deutlichem Glanz und heller Kante.
case glass
/// Wie deckend der Tint über der Vibrancy-Ebene liegt.
public var fillOpacity: Double {
switch self {
case .stone: 1.0
case .blur: 0.72
case .glass: 0.42
}
}
/// Der Glanz von oben — die Bänderung des Steins.
///
/// Wächst mit der Durchlässigkeit: auf deckendem Schwarz genügt ein Hauch,
/// auf Glas ist er das, was die Fläche überhaupt als Körper lesbar macht.
public var sheen: Double {
switch self {
case .stone: 0.02
case .blur: 0.04
case .glass: 0.10
}
}
/// Die Kante.
///
/// Je durchlässiger die Fläche, desto mehr Arbeit muss die Kante leisten —
/// sie ist dann das Einzige, was die Form von dem trennt, was durch sie
/// hindurch zu sehen ist.
public var edge: Color {
switch self {
case .stone: Onyx.Color.hairline
case .blur: .white.opacity(0.12)
case .glass: .white.opacity(0.20)
}
}
/// Ob die Vibrancy-Ebene überhaupt etwas beiträgt.
///
/// Bei `stone` nicht — dort liegt sie vollständig unter deckendem Schwarz.
/// Das ist keine Verschwendung, sondern der Preis dafür, dass ein Wechsel
/// des Werkstoffs kein Neuaufbau des Fensters ist.
public var showsVibrancy: Bool { self != .stone }
}