Menüleistensymbol als Template-Bild

Das Glyph besteht aus zehn deckenden Pfaden in sehr dunklen Tönen (#1c1f1f bis
#000000). Im App-Icon liegt es auf blauem Verlauf und liest sich als Kristall;
allein auf einer dunklen Menüleiste war es schwarz auf schwarz.

macOS färbt ausschließlich Template-Bilder ein, und die benutzen nur den
Alphakanal — die Facetten verschmelzen dabei zu einer Silhouette. Das ist der
bewusste Tausch: erkennbare Form in hellen wie dunklen Menüleisten statt
Facetten, die man in keiner von beiden sieht.

Eine Fassung mit durchsichtigen Facettenfugen behielte beides. Dafür muss das
SVG entsprechend gezeichnet sein — als Outline statt als Flächen.
This commit is contained in:
Guido Schmit
2026-08-10 21:13:18 +02:00
parent 433cdcc3dd
commit 95bc3b1931

View File

@@ -174,9 +174,19 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
///
/// Geladen wird dieselbe SVG-Datei, aus der auch das App-Icon gebaut wird
/// NSImage liest sie als Vektor (`_NSSVGImageRep`), sie skaliert also
/// verlustfrei. Bewusst **kein** Template-Bild: als Schablone bliebe vom
/// Kristall eine schwarze Silhouette. Der Preis ist, dass er sich nicht
/// automatisch an helle und dunkle Menüleisten anpasst.
/// verlustfrei.
///
/// **Als Template-Bild.** Das Glyph besteht aus zehn deckenden Pfaden in
/// sehr dunklen Tönen (#1c1f1f bis #000000). Im App-Icon liegt es auf
/// blauem Verlauf und liest sich als Kristall; allein auf einer dunklen
/// Menüleiste ist es schwarz auf schwarz. macOS färbt ausschließlich
/// Template-Bilder ein, und die benutzen nur den Alphakanal die Facetten
/// verschmelzen dabei zu einer Silhouette.
///
/// Das ist der bewusste Tausch: erkennbare Form in hellen wie dunklen
/// Menüleisten statt Facetten, die man in keiner von beiden sieht. Eine
/// Fassung mit durchsichtigen Facettenfugen behielte beides dafür müsste
/// das SVG entsprechend gezeichnet sein.
///
/// 18 pt ist die übliche Höhe; die Leiste ist 22 pt hoch und braucht oben
/// und unten Luft.
@@ -189,14 +199,17 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
glyph.draw(in: rect, from: .zero, operation: .sourceOver, fraction: 1)
return true
}
image.isTemplate = true
image.accessibilityDescription = "Onyx"
return image
}
// Ein Menüleisteneintrag ohne Bild wäre unsichtbar und die App darüber
// unerreichbar deshalb ein Rückfall statt eines leeren Knopfs.
return NSImage(systemSymbolName: "circle.hexagongrid.fill",
accessibilityDescription: "Onyx") ?? NSImage()
let fallback = NSImage(systemSymbolName: "circle.hexagongrid.fill",
accessibilityDescription: "Onyx") ?? NSImage()
fallback.isTemplate = true
return fallback
}
private func observeMenuBarPreference() {