/* Die Pixelsymbole von HoneyOS. * * Die Raster selbst stehen in `web/glyphs.json` — **an genau einer Stelle**, * absichtlich als Daten statt als Quelltext: Der Schreibtisch holt sie hier, * die HoneyBar in fremden Apps bekommt sie vom Server mit der App-Liste * mitgeliefert (siehe main.go). Vorher standen sie zweimal da, und die * Wettersymbole waren schon einmal auseinandergelaufen. * * Das Laden geschieht mit `await` auf oberster Ebene: Wer dieses Modul * einbindet, bekommt fertige Symbole und darf sie überall gerade heraus * benutzen — sonst müsste jede Zeichenfunktion asynchron werden. */ /** 12×12-Raster als Zeichenketten, ein `#` ist ein Pixel. */ export const GLYPHS = await ladeGlyphen(); async function ladeGlyphen() { try { const res = await fetch(new URL("../glyphs.json", import.meta.url), { cache: "no-store" }); if (res.ok) return await res.json(); } catch { /* fällt unten auf ein leeres Raster zurück */ } // Ohne Symbole ist der Schreibtisch hässlich, aber benutzbar — ein leerer // Bildschirm wäre schlimmer. Passieren kann es nur, wenn der eigene Server // gerade nicht antwortet; dann ist ohnehin nichts zu holen. console.warn("HoneyOS: glyphs.json nicht geladen — Symbole fehlen."); return {}; } export function glyphSvg(name) { return rasterSvg(GLYPHS[name] || GLYPHS.box); } /** Baut aus einem 12×12-Raster ein SVG. Waagerechte Läufe werden * zusammengefasst: weniger Rechtecke, gleiches Bild. */ export function rasterSvg(grid) { if (!grid) return ""; const rects = []; grid.forEach((row, y) => { let run = 0; for (let x = 0; x <= row.length; x++) { if (row[x] === "#") { run++; } else if (run) { rects.push(``); run = 0; } } }); return ``; }