Anmeldung zeigt dasselbe Wappen, und der Rahmen sitzt eng

Auf dem Anmeldebildschirm steht jetzt dieselbe Biene wie in der Leiste und im
Tab, nur gross — ein Geraet, ein Zeichen. Die 3/4-Ansicht wird nirgends mehr
ausgeliefert; sie bleibt als schraeg() im Werkzeug liegen.

Dazu sitzt der SVG-Rahmen jetzt auf dem, was wirklich gefuellt ist. Das Raster
ist quadratisch, die Biene nicht — unten blieb ein Viertel Luft, und die kostet
ueberall Groesse, wo das Bild in einen Kasten gelegt wird.

tools/biene.py schreibt die Zeile in honeybar.js jetzt selbst mit: Drei Kopien,
die von Hand gepflegt werden, laufen genau einmal auseinander.
This commit is contained in:
marc committed 2026-09-02 10:41:19 +02:00
1 parent ff413864a9
commit 8ca16aec84
9 files changed
+40 -33

No files matched your search

+24 -9
View File
@@ -16,6 +16,7 @@ einen Buchstaben ändern, danach stimmen wieder alle Fassungen überein.
"""
import json
import pathlib
import re
import struct
import zlib
@@ -61,8 +62,10 @@ BIENE = [
# ── Die 3/4-Ansicht ──────────────────────────────────────────────────────
#
# Nur für den Anmeldebildschirm: groß, einmal am Tag, mit Zeit zum Hinsehen.
# Unter 64 px zerfällt sie — zu viele Kanten auf zu wenig Pixeln.
# Liegt in der Schublade: HoneyOS zeigt überall dasselbe Wappen von der Seite,
# also wird sie zurzeit nirgends ausgeliefert. Wer sie doch braucht (ein großes
# Startbild, ein Aufkleber), ruft `schraeg()` und reicht das Ergebnis an `svg()`
# oder `png()`. Unter 64 px zerfällt sie — zu viele Kanten auf zu wenig Pixeln.
#
# Ein Würfel hat in Pixelkunst die Steigung 2:1: zwei Pixel nach rechts, einer
# nach unten. Von Hand wird das krumm, also werden die drei sichtbaren Flächen
@@ -133,6 +136,11 @@ def svg(raster):
"""Waagerechte Läufe gleicher Farbe werden ein Rechteck — dieselbe Idee wie
bei den Pixelsymbolen in web/js/glyphs.js, nur mit Farbe statt currentColor.
Der Rahmen wird auf das gesetzt, was wirklich gefüllt ist: Das Raster ist
quadratisch, die Biene ist es nicht. Mit dem vollen Quadrat als viewBox
bliebe unten ein Viertel Luft — und die kostet überall Größe, wo das Bild in
einen Kasten gelegt wird: in der Leiste, im Tab, auf dem Anmeldebildschirm.
Warum SVG und nicht PNG für die Leisten: Die HoneyBar läuft in *fremden*
Apps. Ein <img> holt dort eine Datei von HoneyOS, und ob das erlaubt ist,
entscheidet die CSP der fremden App. Markup kann niemand blockieren."""
@@ -150,8 +158,12 @@ def svg(raster):
r, g, b = FARBEN[z]
teile.append(f'<rect x="{x}" y="{y}" width="{lauf}" height="1" fill="#{r:02x}{g:02x}{b:02x}"/>')
x += lauf
n = len(raster)
return (f'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 {n} {n}" '
voll = [(x, y) for y, z in enumerate(raster) for x, c in enumerate(z) if c in FARBEN]
x0 = min(x for x, _ in voll)
y0 = min(y for _, y in voll)
breite = max(x for x, _ in voll) - x0 + 1
hoehe = max(y for _, y in voll) - y0 + 1
return (f'<svg xmlns="http://www.w3.org/2000/svg" viewBox="{x0} {y0} {breite} {hoehe}" '
'shape-rendering="crispEdges" aria-hidden="true">' + "".join(teile) + "</svg>")
@@ -198,10 +210,6 @@ def main():
zeichen = text(BIENE)
(WURZEL / "web/img/biene.svg").write_text(bild + "\n")
# Für die Anmeldung: einmal groß, in Schrägsicht.
drei = schraeg()
(WURZEL / "web/img/biene-3d.svg").write_text(svg(drei) + "\n")
png(drei, 8, WURZEL / "web/img/biene-3d-256.png")
png(BIENE, 16, WURZEL / "web/img/biene-256.png")
png(BIENE, 2, WURZEL / "web/img/biene-32.png")
@@ -218,8 +226,15 @@ def main():
f"export const BIENE_SVG = '{bild}';\n\n"
f"export const BIENE_ASCII = {json.dumps(zeichen)};\n"
)
bar = WURZEL / "web/honeybar/honeybar.js"
alt = bar.read_text()
neu = re.sub(r" const WAPPEN = '[^\n]*';", f" const WAPPEN = '{bild}';", alt)
if neu != alt:
bar.write_text(neu)
print("web/honeybar/honeybar.js: Wappen ersetzt")
print(text(BIENE))
print(f"\nweb/img/biene.svg ({len(bild)} Zeichen), biene-3d.svg, drei PNG, web/js/biene.js")
print(f"\nweb/img/biene.svg ({len(bild)} Zeichen), biene-256.png, biene-32.png, web/js/biene.js")
if __name__ == "__main__":