Pausenzeichen wieder ausgestanzt
„Weiß mit dünnem Rand" war für den Blitz bestellt, nicht für das Pausenzeichen — ich hatte es auf beide angewendet. Bei fast vollem Akku liegt das Zeichen auf weißer Füllung: das Weiß verschwindet darin, übrig bleiben die dunklen Ränder als zwei Striche. Das Pausenzeichen ist damit wieder ein Loch in der Füllung. Der Blitz bleibt weiß mit Rand und fadend. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -174,12 +174,24 @@ public enum BatteryGlyph {
|
|||||||
let glyphRect = CGRect(x: body.midX - glyphWidth / 2,
|
let glyphRect = CGRect(x: body.midX - glyphWidth / 2,
|
||||||
y: rect.midY - glyphHeight / 2,
|
y: rect.midY - glyphHeight / 2,
|
||||||
width: glyphWidth, height: glyphHeight)
|
width: glyphWidth, height: glyphHeight)
|
||||||
// Weiß mit dünnem schwarzem Rand — und beim Laden fadend.
|
guard isCharging else {
|
||||||
|
// Das Pausenzeichen wird **ausgestanzt**: ein Loch in der Füllung.
|
||||||
//
|
//
|
||||||
// Der Rand ist immer die Gegenfarbe zur Füllung. Damit bleibt das
|
// Weiß mit Rand funktioniert hier nicht — bei fast vollem Akku
|
||||||
// Zeichen in **jedem** Moment des Fadens lesbar: über der hellen
|
// liegt es auf weißer Füllung, das Weiß verschwindet darin und
|
||||||
// Füllung trägt es der Rand, über dem leeren Teil die Füllung selbst.
|
// übrig bleiben die dunklen Ränder als zwei Striche.
|
||||||
let whiteness = isCharging ? boltWhiteness(phase: fadePhase) : 1
|
NSGraphicsContext.saveGraphicsState()
|
||||||
|
glyph.draw(in: glyphRect, from: .zero, operation: .destinationOut, fraction: 1)
|
||||||
|
NSGraphicsContext.restoreGraphicsState()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Der Blitz: weiß mit dünnem dunklem Rand, und fadend.
|
||||||
|
//
|
||||||
|
// Der Rand ist immer die Gegenfarbe zur Füllung. Damit bleibt er in
|
||||||
|
// **jedem** Moment des Fadens lesbar: über der hellen Füllung trägt ihn
|
||||||
|
// der Rand, über dem leeren Teil die Füllung selbst.
|
||||||
|
let whiteness = boltWhiteness(phase: fadePhase)
|
||||||
if let outline = tint(glyph, with: NSColor(white: 1 - whiteness, alpha: 1)) {
|
if let outline = tint(glyph, with: NSColor(white: 1 - whiteness, alpha: 1)) {
|
||||||
outline.draw(in: outlineRect(glyphRect), from: .zero,
|
outline.draw(in: outlineRect(glyphRect), from: .zero,
|
||||||
operation: .sourceOver, fraction: 1)
|
operation: .sourceOver, fraction: 1)
|
||||||
@@ -239,13 +251,12 @@ public struct BatteryGlyphView: View {
|
|||||||
if let name = indicator.symbolName {
|
if let name = indicator.symbolName {
|
||||||
// `TimelineView` gibt die Zeit her, ohne dass hier ein
|
// `TimelineView` gibt die Zeit her, ohne dass hier ein
|
||||||
// Zeitgeber laufen muss.
|
// Zeitgeber laufen muss.
|
||||||
TimelineView(.animation) { context in
|
|
||||||
let phase = isCharging
|
|
||||||
? context.date.timeIntervalSinceReferenceDate / BatteryGlyph.fadeDuration
|
|
||||||
: 0
|
|
||||||
let whiteness = isCharging
|
|
||||||
? BatteryGlyph.boltWhiteness(phase: phase) : 1
|
|
||||||
let size = BatteryGlyph.glyphHeight(for: indicator, in: height)
|
let size = BatteryGlyph.glyphHeight(for: indicator, in: height)
|
||||||
|
if isCharging {
|
||||||
|
TimelineView(.animation) { context in
|
||||||
|
let phase = context.date.timeIntervalSinceReferenceDate
|
||||||
|
/ BatteryGlyph.fadeDuration
|
||||||
|
let whiteness = BatteryGlyph.boltWhiteness(phase: phase)
|
||||||
ZStack {
|
ZStack {
|
||||||
Image(systemName: name)
|
Image(systemName: name)
|
||||||
.font(.system(size: size + 2 * BatteryGlyph.outlineWidth))
|
.font(.system(size: size + 2 * BatteryGlyph.outlineWidth))
|
||||||
@@ -255,6 +266,11 @@ public struct BatteryGlyphView: View {
|
|||||||
.foregroundStyle(Color(white: whiteness))
|
.foregroundStyle(Color(white: whiteness))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
Image(systemName: name)
|
||||||
|
.font(.system(size: size))
|
||||||
|
.blendMode(.destinationOut)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.compositingGroup()
|
.compositingGroup()
|
||||||
|
|||||||
Reference in New Issue
Block a user