feat: F4.8c the documentation mode's image export, as Java's

ExportRun measures Java's print panel (GUIContainer.prepareExportPanel) and
image on four projects and an empty one: 10 to spare around, a light grey
footer 20 below the lowest element, 20 below it, a transparent background,
the documentation painted as in the design. The sidebar gains Java's
"Exportieren": the surface painted with Canvas 2D (an SVG with a
foreignObject taints the canvas in WebKit) and saved under the project's
name; Java's message when saving fails. Not adopted: Java's empty image of
an empty project (its footer overflows). The editor takes a projectName;
the capture export shares the download helper.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-04 11:54:09 +00:00
co-authored by Claude Opus 5.5
parent de03f6bb96
commit 7e68414bb2
20 changed files with 1803 additions and 25 deletions
+32
View File
@@ -1699,3 +1699,35 @@ Gemessen (04.10.2026):
Falle der Sonde: Der Menüpunkt „Normal“ steht in beiden Untermenüs; die
Sonde nimmt den ersten (Schriftgröße).
### Dokumentation: „Exportieren“ (F4.8c)
`ExportRun` öffnet ein Projekt, wie Javas Menü es öffnet
(`Information.reset`, `SzenarioVerwaltung.laden`, `updateViewport`,
`updateCables`), holt per Reflection das Druckpanel
(`GUIContainer.prepareExportPanel`) und liest dessen Ausschnitt
(`getClipX` … `getClipHeight`), die Grenzen seiner drei Ebenen (Netz,
Dokumentation, Fußzeile; `GUIMainArea.minX` …) und die Fußzeile. Dann malt es
mit `createNetworkImage` das Bild und misst Größe, Eckpixel, die Farben der
Fußzeile und die Füllung einer Fläche darin. Vier Projekte
(`nat_with_mapped_port`, `zwei_rechnernetze_komplett`, die Fixture
`documentation.fls`, `modem_beispiel`) und ein leeres
(`packages/editor/test/networkImage.java.json`; Javas Bilder unter
`.build/export`).
Gemessen (04.10.2026):
* Ausschnitt: alle Geräte, Kabel (die beiden Mitten mit 2 Rand) und
Dokumentationselemente, links, oben und rechts 10 Rand. Die Fußzeile steht
20 unter dem untersten Element, bündig mit dem linkesten; sie ist so breit
wie ihr Text und 20 mehr, so hoch wie ihre Schrift; unter ihr 20 Rand. Ist
die Fußzeile breiter als der Inhalt, reicht das Bild 20 über sie hinaus.
* Fußzeile: der Pfad der Datei, ohne Datei „Filius“, hellgrau (192).
* Hintergrund durchsichtig; Dokumentation unter dem Netz, gemalt wie im
Entwurf (Fläche 204 → 215, 201 → 212); nichts ausgewählt.
* Leeres Projekt: ein leeres Bild 20 × 35. Die Fußzeile landet durch einen
Überlauf (`Integer.MAX_VALUE + 10`) außerhalb. Nicht übernommen.
Falle der Sonde: Das Druckpanel nimmt Javas Geräte-Etiketten aus der
Oberfläche (eine Swing-Komponente hat nur einen Elternteil); erst
`updateViewport` legt sie zurück.