Eigenes Symbol für den Mixer in der Menüleiste
Die Datei lag im Projektstamm; von dort wird nichts mitgeliefert. Jetzt in Onyx/ und damit im Bundle. Gezeichnet wird sie in `labelColor`, nicht in Weiß: unter einer hellen Menüleiste wäre ein weißes Symbol unsichtbar. Auf dunklem Grund ist labelColor weiß, also genau das Gewünschte — und auf hellem Grund schwarz, statt zu verschwinden. Eigene Vorlagen lassen sich nicht wie SF-Symbole einfärben: dort greift die Symbolkonfiguration nicht, und `color.set()` allein färbt ein Template-Bild ohnehin nicht. Der Weg ist, das Bild zu zeichnen und die Farbe mit `sourceAtop` darüberzulegen — das trifft die deckenden Bildpunkte und lässt den Rest frei. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -78,6 +78,31 @@ public enum MenuBarText {
|
||||
return fittedSize(of: image, height: height).width
|
||||
}
|
||||
|
||||
/// Zeichnet ein beliebiges Bild in der gewünschten Farbe.
|
||||
///
|
||||
/// Für eigene Vorlagen statt SF-Symbole: dort greift die
|
||||
/// Symbolkonfiguration nicht, und `color.set()` allein färbt ein
|
||||
/// Template-Bild nicht. Der Weg ist, das Bild zu zeichnen und die Farbe
|
||||
/// mit `sourceAtop` darüberzulegen — das trifft genau die deckenden
|
||||
/// Bildpunkte und lässt den Rest frei.
|
||||
public static func drawTemplate(_ image: NSImage, color: NSColor, in rect: NSRect) {
|
||||
let natural = image.size
|
||||
let fitted: NSSize = natural.height > 0
|
||||
? NSSize(width: (natural.width / natural.height) * rect.height, height: rect.height)
|
||||
: rect.size
|
||||
let target = NSRect(x: rect.midX - fitted.width / 2,
|
||||
y: rect.midY - fitted.height / 2,
|
||||
width: fitted.width, height: fitted.height)
|
||||
|
||||
let tinted = NSImage(size: target.size, flipped: false) { bounds in
|
||||
image.draw(in: bounds, from: .zero, operation: .sourceOver, fraction: 1)
|
||||
color.set()
|
||||
bounds.fill(using: .sourceAtop)
|
||||
return true
|
||||
}
|
||||
tinted.draw(in: target)
|
||||
}
|
||||
|
||||
private static func symbol(_ name: String, color: NSColor, height: CGFloat) -> NSImage? {
|
||||
guard let image = NSImage(systemSymbolName: name, accessibilityDescription: nil)
|
||||
else { return nil }
|
||||
|
||||
Reference in New Issue
Block a user