/** * Baut die drei App-Symbol-Vorlagen als SVG. * * Gewaehlt wurde Entwurf 3 bei 54 % Fahrzeuggroesse: DataMetric oben, das * CI-Fahrzeug in der Mitte, 360 in Audi-Rot unten, auf Nacht-Grund. * * WARUM DIE SCHRIFTEN EINGEBETTET WERDEN * -------------------------------------- * Eine SVG-Datei, die nur `font-family: "Audi Type"` nennt, sieht nur dort * richtig aus, wo die Schrift installiert ist. Auf einem anderen Rechner - und * in jedem Rasterisierer - faellt sie auf eine Ersatzschrift zurueck, und das * faellt erst am fertigen Symbol auf. Die woff2-Dateien stecken deshalb als * data:-URI in der Datei; sie ist damit fuer sich allein vollstaendig. * * DIE DREI AUSFUEHRUNGEN VON iOS 18 * --------------------------------- * hell - die Kachel wie entworfen, mit eigenem Grund. * dunkel - ohne Grund. iOS legt seinen eigenen dunklen Verlauf darunter; ein * mitgeliefertes Schwarz wuerde darauf als Kasten sichtbar bleiben. * getoent - ohne Grund und ohne Farbe. iOS faerbt das Bild selbst nach der * Wahl des Nutzers ein und wertet dafuer die Helligkeit aus - das * Rot der 360 wird deshalb zu einem helleren Grau als der Rest, * damit die Zahl auch getoent noch abgesetzt bleibt. * * MASSE * ----- * Alles als Anteil der Kantenlaenge, hergeleitet aus dem freigegebenen * Entwurf (Flex-Spalte, Abstand 0,02 - siehe index.html): * * Wort 0,095 | Abstand 0,02 | Fahrzeug 0,54 | Abstand 0,02 | Zahl 0,17 * zusammen 0,845, der Rest verteilt sich gleichmaessig oben und unten. */ const fs = require("fs") const path = require("path") const SCHRIFTEN = path.join(__dirname, "..", "src", "assets", "audi", "schriften") /* Das CI-Fahrzeug kommt aus dem Panel selbst - eine zweite Kopie des Pfades waere eine zweite Quelle fuer dieselbe Form. */ const PANEL = path.join( __dirname, "..", "..", "custom_components", "audi_dashboard", "frontend", "audi-dashboard-app.js", ) const MARKE = "audi: '` } /** * @param {object} o * @param {string|null} o.grund Hintergrund, oder null fuer keinen * @param {string} o.vorn Wort und Fahrzeug * @param {string} o.akzent die 360 */ function symbol({ grund, vorn, akzent }) { return ` ${grund ? ` \n` : ""}\ DataMetric ${fahrzeug(vorn)} 360 ` } const AUSFUEHRUNGEN = { /* Nacht-Canvas und Audi-Rot aus den Tokens des Projekts. */ hell: { grund: "#0C1014", vorn: "#FFFFFF", akzent: "#F50537" }, dunkel: { grund: null, vorn: "#FFFFFF", akzent: "#F50537" }, /* Getoent wertet iOS die Helligkeit aus: Weiss fuer Wort und Fahrzeug, ein helles Grau fuer die Zahl - so bleibt sie abgesetzt, ohne eine Farbe zu behaupten, die es getoent nicht gibt. */ getoent: { grund: null, vorn: "#FFFFFF", akzent: "#B4B4B8" }, } const ZIEL = path.join(__dirname, "..", "native", "logo") fs.mkdirSync(ZIEL, { recursive: true }) for (const [name, o] of Object.entries(AUSFUEHRUNGEN)) { const datei = path.join(ZIEL, `AppIcon-${name}.svg`) fs.writeFileSync(datei, symbol(o), "utf8") console.log(`${path.basename(datei)} ${(fs.statSync(datei).size / 1024).toFixed(0)} KB`) } console.log("") console.log("Masse bei 1024:") console.log(` Wort Mitte y=${wortMitte.toFixed(1)} Groesse ${(A.wort * S).toFixed(1)}`) console.log(` Fahrzeug oben y=${autoOben.toFixed(1)} Kante ${autoKante.toFixed(1)}`) console.log(` Zahl Mitte y=${zahlMitte.toFixed(1)} Groesse ${(A.zahl * S).toFixed(1)}`)