Blitz fadet, Einstellungsfenster mittig und veränderbar

Der Blitz fadet beim Laden zwischen Weiß und Schwarz — so gewünscht, und
ich hätte vorher fragen sollen statt eine eigene Lösung zu bauen und sie
hinterher zu begründen.

Über den Kosinus statt linear: ein linearer Ping-Pong knickt an den
Umkehrpunkten sichtbar. Der Zeitgeber läuft mit 30 Bildern je Sekunde und
nur, solange geladen wird — steht das Kabel nicht drin, läuft gar nichts.
Der Stecker für „am Netz, lädt nicht" bleibt ausgestanzt; dort bewegt sich
ohnehin nichts.

Das Einstellungsfenster lässt sich jetzt vergrößern und startet mit
620 × 620 statt 520 × 420. Der Bereich „Displays" passt mit der Vorschau
der Auslösefläche nicht mehr in die alte Höhe, und ein Fenster, in dem man
scrollt, obwohl der Bildschirm frei ist, ist eine Zumutung. Die feste Größe
in der View musste dafür weichen — sonst wächst das Fenster und der Inhalt
bleibt stehen.

Und es öffnet jetzt wirklich mittig. Mein erster Versuch mit 60 Punkten
Abstand von oben war zu zaghaft: der Titelbalken lag weiter so hoch, dass
man auf dem Weg zu seinen Knöpfen durch die Auslösefläche fuhr.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-08-13 12:52:21 +02:00
parent a84e5a0c8e
commit 8f0831391e
6 changed files with 146 additions and 44 deletions

View File

@@ -155,3 +155,40 @@ struct BatteryBoltSplitTests {
}
}
}
@Suite("Blitz beim Laden")
struct BatteryBoltFadeTests {
@Test("Die Kurve läuft von Weiß nach Schwarz und zurück")
func fadeIsAPingPong() {
#expect(BatteryGlyph.fadeAmount(phase: 0) == 0)
#expect(BatteryGlyph.fadeAmount(phase: 0.5) == 1)
#expect(abs(BatteryGlyph.fadeAmount(phase: 1) - 0) < 0.0001)
}
@Test("Sie ist an den Umkehrpunkten weich")
func endsAreSmooth() {
// Ein linearer Ping-Pong knickt an den Enden sichtbar. Der Kosinus
// wird dort flach das Faden wirkt dadurch ruhig statt gehetzt.
let nearStart = BatteryGlyph.fadeAmount(phase: 0.02)
let nearMiddle = BatteryGlyph.fadeAmount(phase: 0.5)
- BatteryGlyph.fadeAmount(phase: 0.48)
#expect(nearStart < nearMiddle)
}
@Test("Die Phase läuft rundherum weiter")
func phaseWrapsAround() {
// Sonst gäbe es nach einer Umdrehung einen Sprung.
#expect(abs(BatteryGlyph.fadeAmount(phase: 1.25)
- BatteryGlyph.fadeAmount(phase: 0.25)) < 0.0001)
}
@Test("Die Enden sind wirklich Schwarz und Weiß")
func extremesAreBlackAndWhite() {
// Genau darum geht es: bei wenig Ladung sitzt der Blitz im leeren Teil
// und braucht Weiß, über der Füllung braucht er Schwarz. Ein Faden
// dazwischen ist in beiden Fällen irgendwann lesbar.
#expect(BatteryGlyph.boltWhiteness(phase: 0) == 1)
#expect(BatteryGlyph.boltWhiteness(phase: 0.5) == 0)
}
}