Menüleiste zeigt das Glyph, nicht das ganze App-Icon

Das vollständige App-Icon bringt die abgerundete Kachel samt Farbverlauf mit.
Die gehört in Dock und Finder; in der Menüleiste steht sie als farbiger Klotz
zwischen lauter Strichsymbolen.

Geladen wird jetzt dieselbe SVG-Datei, aus der auch das App-Icon gebaut wird.
NSImage liest sie als Vektor (_NSSVGImageRep), sie skaliert also verlustfrei
auf die 18 pt der Menüleiste.

Der Weg dorthin ist ein Kopierschritt und keine zweite Datei: actool kompiliert
das .icon-Bündel zu .icns und Assets.car und legt nichts Lesbares ins Bundle,
und eine einzelne Datei aus dem Bündel lässt sich nicht als Ressource
referenzieren — XcodeGen bricht dabei ab. Ein Build-Schritt kopiert sie
stattdessen, damit es bei einer Quelldatei bleibt.

Weiterhin kein Template-Bild: als Schablone bliebe vom Kristall nur eine
schwarze Silhouette.
This commit is contained in:
Guido Schmit
2026-08-10 20:55:40 +02:00
parent 4b559ba840
commit 03dd7b945e
4 changed files with 385 additions and 332 deletions

View File

@@ -1,490 +1,491 @@
{
"sourceLanguage": "en",
"strings": {
"menu.openPanel": {
"extractionState": "stale",
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Panel öffnen"
"sourceLanguage" : "en",
"strings" : {
"menu.openPanel" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Panel öffnen"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Open Panel"
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Open Panel"
}
}
}
},
"menu.quit": {
"extractionState": "stale",
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Onyx beenden"
"menu.quit" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Onyx beenden"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Quit Onyx"
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Quit Onyx"
}
}
}
},
"menu.settings": {
"extractionState": "stale",
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Einstellungen …"
"menu.settings" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Einstellungen …"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Settings…"
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Settings…"
}
}
}
},
"settings.display.all": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Allen Displays"
"settings.display.all" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Allen Displays"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "All displays"
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "All displays"
}
}
}
},
"settings.display.builtInOnly": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Nur dem internen Display"
"settings.display.builtInOnly" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Nur dem internen Display"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Built-in display only"
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Built-in display only"
}
}
}
},
"settings.display.hint": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Auf Displays ohne echte Notch erscheint oben mittig ein Balken, der sich genauso verhält. Ist der Deckel geschlossen und kein internes Display vorhanden, erscheint das Panel trotzdem auf einem externen — sonst wäre Onyx nicht erreichbar."
"settings.display.hint" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Auf Displays ohne echte Notch erscheint oben mittig ein Balken, der sich genauso verhält. Ist der Deckel geschlossen und kein internes Display vorhanden, erscheint das Panel trotzdem auf einem externen — sonst wäre Onyx nicht erreichbar."
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "On displays without a real notch, a bar appears at the top centre and behaves the same. With the lid closed and no built-in display present, the panel still appears on an external one — otherwise Onyx would be unreachable."
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "On displays without a real notch, a bar appears at the top centre and behaves the same. With the lid closed and no built-in display present, the panel still appears on an external one — otherwise Onyx would be unreachable."
}
}
}
},
"settings.display.menuBarIcon": {
"extractionState": "stale",
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Symbol in der Menüleiste anzeigen"
"settings.display.menuBarIcon" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Symbol in der Menüleiste anzeigen"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Show icon in the menu bar"
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Show icon in the menu bar"
}
}
}
},
"settings.display.menuBarIcon.hint": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Über das Symbol erreichst du Panel, Einstellungen und Beenden. Ohne es kommst du nur über die Notch an Onyx heran."
"settings.display.menuBarIcon.hint" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Über das Symbol erreichst du Panel, Einstellungen und Beenden. Ohne es kommst du nur über die Notch an Onyx heran."
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "The icon gives you the panel, settings and quit. Without it, the notch is the only way to reach Onyx."
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "The icon gives you the panel, settings and quit. Without it, the notch is the only way to reach Onyx."
}
}
}
},
"settings.display.policy": {
"extractionState": "stale",
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Panel anzeigen auf"
"settings.display.policy" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Panel anzeigen auf"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Show panel on"
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Show panel on"
}
}
}
},
"settings.permissions.calendar": {
"extractionState": "stale",
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Kalender"
"settings.permissions.calendar" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Kalender"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Calendar"
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Calendar"
}
}
}
},
"settings.permissions.calendar.why": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Onyx zeigt deine Termine im Kalender-Widget an. Es wird ausschließlich gelesen, nie geschrieben."
"settings.permissions.calendar.why" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Onyx zeigt deine Termine im Kalender-Widget an. Es wird ausschließlich gelesen, nie geschrieben."
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Onyx shows your events in the calendar widget. It only ever reads, never writes."
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Onyx shows your events in the calendar widget. It only ever reads, never writes."
}
}
}
},
"settings.permissions.granted": {
"extractionState": "stale",
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Erteilt"
"settings.permissions.granted" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Erteilt"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Granted"
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Granted"
}
}
}
},
"settings.permissions.openSystem": {
"extractionState": "stale",
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Systemeinstellungen öffnen"
"settings.permissions.location" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Standort"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Open System Settings"
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Location"
}
}
}
},
"settings.permissions.request": {
"extractionState": "stale",
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Anfragen"
"settings.permissions.location.why" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Onyx zeigt das Wetter an deinem aktuellen Standort. Ohne Zugriff kannst du stattdessen einen festen Ort wählen."
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Request"
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Onyx shows the weather for your current location. Without access you can pick a fixed place instead."
}
}
}
},
"settings.size.large": {
"extractionState": "stale",
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Groß (2×2)"
"settings.permissions.openSystem" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Systemeinstellungen öffnen"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Large (2×2)"
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Open System Settings"
}
}
}
},
"settings.size.medium": {
"extractionState": "stale",
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Mittel (2×1)"
"settings.permissions.request" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Anfragen"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Medium (2×1)"
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Request"
}
}
}
},
"settings.size.small": {
"extractionState": "stale",
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Klein (1×1)"
"settings.size.large" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Groß (2×2)"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Small (1×1)"
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Large (2×2)"
}
}
}
},
"settings.size.wide": {
"extractionState": "stale",
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Breit (4×1)"
"settings.size.medium" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Mittel (2×1)"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Wide (4×1)"
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Medium (2×1)"
}
}
}
},
"settings.tab.display": {
"extractionState": "stale",
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Anzeige"
"settings.size.small" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Klein (1×1)"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Display"
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Small (1×1)"
}
}
}
},
"settings.tab.permissions": {
"extractionState": "stale",
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Berechtigungen"
"settings.size.wide" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Breit (4×1)"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Permissions"
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Wide (4×1)"
}
}
}
},
"settings.tab.widgets": {
"extractionState": "stale",
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Widgets"
"settings.tab.display" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Anzeige"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Widgets"
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Display"
}
}
}
},
"settings.widgets.add": {
"extractionState": "stale",
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Hinzufügen"
"settings.tab.permissions" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Berechtigungen"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Add"
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Permissions"
}
}
}
},
"settings.widgets.available": {
"extractionState": "stale",
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Verfügbar"
"settings.tab.widgets" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Widgets"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Available"
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Widgets"
}
}
}
},
"settings.widgets.empty": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Keine Widgets im Panel. Das Panel bleibt leer, bis du eins hinzufügst."
"settings.widgets.add" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Hinzufügen"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "No widgets in the panel. It stays empty until you add one."
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Add"
}
}
}
},
"settings.widgets.hint": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Die Reihenfolge bestimmt die Anordnung im Panel. Jedes Widget rückt an die erste Stelle, an die es passt."
"settings.widgets.available" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Verfügbar"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "The order determines the arrangement in the panel. Each widget takes the first spot it fits into."
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Available"
}
}
}
},
"settings.widgets.inPanel": {
"extractionState": "stale",
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Im Panel"
"settings.widgets.empty" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Keine Widgets im Panel. Das Panel bleibt leer, bis du eins hinzufügst."
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "In the panel"
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "No widgets in the panel. It stays empty until you add one."
}
}
}
},
"settings.widgets.remove": {
"extractionState": "stale",
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Aus dem Panel entfernen"
"settings.widgets.hint" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Die Reihenfolge bestimmt die Anordnung im Panel. Jedes Widget rückt an die erste Stelle, an die es passt."
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Remove from panel"
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "The order determines the arrangement in the panel. Each widget takes the first spot it fits into."
}
}
}
},
"settings.permissions.location": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Standort"
"settings.widgets.inPanel" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Im Panel"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Location"
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "In the panel"
}
}
}
},
"settings.permissions.location.why": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Onyx zeigt das Wetter an deinem aktuellen Standort. Ohne Zugriff kannst du stattdessen einen festen Ort wählen."
"settings.widgets.remove" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Aus dem Panel entfernen"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Onyx shows the weather for your current location. Without access you can pick a fixed place instead."
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Remove from panel"
}
}
}
}
},
"version": "1.0"
"version" : "1.0"
}