feat(wasm-dom): Phase 7 complete — KiCad runs on the DOM port
All six apps build and run; full kicad e2e suite green under WX_PORT=dom (28 passed / 1 flaky / 2 skipped / 0 failed). Closing fixes this phase: menu JSON serializer (wxString::Format empty-return on KiCad labels), main-frame visibility root (browser page has no hidden state), stateless keyboard arbitration (Firefox fires no focusout on element removal), out_dir scope in upstream's pipelined postprocess. Docs + visual notes updated; per-port kicad reference screenshots in place. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
7fdd635448
commit
bb26fc0807
3 changed files with 40 additions and 5 deletions
|
|
@ -6,10 +6,14 @@ instead of wxUniversal pixels on a canvas. Goals: styleable modern UI,
|
||||||
native text input/IME, accessibility, crisp rendering — while the existing
|
native text input/IME, accessibility, crisp rendering — while the existing
|
||||||
canvas port keeps working unchanged from the same source tree.
|
canvas port keeps working unchanged from the same source tree.
|
||||||
|
|
||||||
Status: wxWidgets-side port complete (Phases 0–5); both e2e suites green
|
Status: COMPLETE (Phases 0–7). wxWidgets-side port done, both wx e2e
|
||||||
from one tree. KiCad-on-DOM is the next phase. Work intentionally stays on
|
suites green from one tree, and all six KiCad apps (pcbnew, eeschema,
|
||||||
`feature/wx-dom-port` (root + wxwidgets + kicad) — not merged to
|
calculator, pl_editor, symbol_editor, gerbview) build and run on the DOM
|
||||||
`main`/`wasm-port`.
|
port — full kicad e2e suite green under `WX_PORT=dom` (28/0, 1 flaky,
|
||||||
|
2 skipped). Build with `WX_PORT=dom docker/build.sh <app>` (outputs in
|
||||||
|
`output/dom/`); test with `WX_PORT=dom npm run test:kicad`. Work
|
||||||
|
intentionally stays on `feature/wx-dom-port` (root + wxwidgets + kicad) —
|
||||||
|
not merged to `main`/`wasm-port`.
|
||||||
|
|
||||||
## Architecture in one page
|
## Architecture in one page
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -131,3 +131,34 @@ slider/statline/statbox wired:
|
||||||
wxDomGetLastCommandId + wxDOM_EVENT_MENU → wxMenu::SendEvent. Toolbar
|
wxDomGetLastCommandId + wxDOM_EVENT_MENU → wxMenu::SendEvent. Toolbar
|
||||||
identical shape (wxDomToolbarSetTools / wxDOM_EVENT_TOOL →
|
identical shape (wxDomToolbarSetTools / wxDOM_EVENT_TOOL →
|
||||||
wxToolBarBase::OnLeftClick with radio-group + veto handling).
|
wxToolBarBase::OnLeftClick with radio-group + veto handling).
|
||||||
|
|
||||||
|
## Phase 7 (2026-06-11) — KiCad on the DOM port
|
||||||
|
|
||||||
|
- **All six apps build and run** (pcbnew, eeschema, calculator,
|
||||||
|
pl_editor, symbol_editor, gerbview); full kicad e2e suite under
|
||||||
|
WX_PORT=dom: 28 passed / 1 flaky / 2 skipped / 0 failed.
|
||||||
|
- **Screenshots:** pcbnew = layer manager, appearance panes, toolbars,
|
||||||
|
WebGL board canvas, native menubar (File…Help, 9 menus) — near-twin of
|
||||||
|
the canvas reference modulo native chrome styling. eeschema = full
|
||||||
|
editor with real checkbox filter panels. calculator = native DOM form
|
||||||
|
controls (inputs, radios, buttons) beside canvas-island diagrams.
|
||||||
|
Port-aware reference images: tests/wizard-04-finish-headless-dom.png.
|
||||||
|
- **Bugs found & fixed by KiCad-on-DOM:**
|
||||||
|
16. DomMenuItemsToJson passed labels through wxString::Format, which
|
||||||
|
returns "" when vsnprintf rejects an argument (some KiCad labels)
|
||||||
|
→ empty JSON item → whole menu document unparseable. Labels are
|
||||||
|
now concatenated; wxDomJsonEscape hardened for ctrl chars < 0x20.
|
||||||
|
17. The first TLW (the browser page) started logically hidden; KiCad
|
||||||
|
never calls Show(true) on it (canvas renders regardless), so every
|
||||||
|
pre-Show child stayed display:none. Main frame now starts shown.
|
||||||
|
18. Keyboard arbitration was stateful (focusin/focusout flag); Firefox
|
||||||
|
fires no focusout when a focused element is REMOVED (wizard page
|
||||||
|
destroyed mid-focus) → flag stuck → all keys except Escape
|
||||||
|
swallowed for the session (eeschema Backspace/Delete dead). Now a
|
||||||
|
stateless document.activeElement check.
|
||||||
|
19. Build pipeline: fresh build trees failed at the embind pre-compile
|
||||||
|
(generated pcb_lexer.h not yet emitted) — found here and fixed
|
||||||
|
independently upstream (f936eb1); upstream's version kept.
|
||||||
|
- **Known cosmetic gap:** DOM menubar/toolbar styling differs from univ
|
||||||
|
pixels by design (native buttons, system font); the kicad reference
|
||||||
|
regions therefore use per-port reference images.
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 54a0bd3fd9fb51a4ad4f9933e5a694251a3213b2
|
Subproject commit 37cb6ba08e0ce4c6a64f842929374d9dc6782a32
|
||||||
Loading…
Reference in a new issue