feat: v0.4.0 migrate to lib-core.panel persistent widgets
Migrate the top toolbar, right-side Layers panel, and bottom palette strip to lib-core.panel v0.3.0 persistent widgets (W.2 of the panel-window-manager plan): map-editor.toolbar -- top strip (full width, ~290 px tall) map-editor.layers -- right side-panel (160 px wide) map-editor.palette -- bottom strip (full width, 64 px tall) All three registered as persistent=true (open from module-init, not dismissed by ESC), input_block='self' (hit-test claims clicks within own bounds; misses fall through to canvas), and chromeless=true (panel-lib skips its title-bar/border/X — widgets keep their own visual style). Existing draw_menu_bar / draw_side_panel / draw_palette and handle_click logic is wrapped via thin widget render + handle_input fns (M.draw_toolbar_widget / M.handle_toolbar_click etc.); no behavioural change to the widget interiors. Map-canvas remains module-rendered. Canvas drag-paint is now gated on panel.point_in_any_panel(mx, my) so widget clicks no longer bleed through into map paint. Removed state.show_layers_panel / show_palette and their toggle helpers (panel-lib manages widget visibility; Window menu items now flip panel.is_open/toggle on the widget ids directly). Modals stay module-rendered + module-routed (handled by handle_modal_click before panel.update). Manifest bumped 0.3.4 -> 0.4.0; lib-core.panel dep added at 0.3.0.
This commit is contained in:
28
README.md
28
README.md
@@ -153,3 +153,31 @@ cells are structurally blind to their cell-tile neighbours.
|
||||
|
||||
See `sporel-meta/docs/superpowers/specs/2026-06-01-map-editor-cell-tile-mode-design.md`
|
||||
for the full design rationale and the Boris-taxonomy background.
|
||||
|
||||
## Panel-Lib Migration (v0.4.0)
|
||||
|
||||
The top toolbar, right-side Layers panel, and bottom palette strip
|
||||
have been migrated to `lib-core.panel` v0.3.0 persistent widgets
|
||||
(W.2 of the panel-window-manager plan):
|
||||
|
||||
| Widget ID | Layout slot | Role |
|
||||
|-----------|-------------|------|
|
||||
| `map-editor.toolbar` | top strip (full width, 290 px) | Menu bar + mode-pill + open-dropdown |
|
||||
| `map-editor.layers` | right side-panel (160 px wide) | Layer rows + roof toggle |
|
||||
| `map-editor.palette` | bottom strip (full width, 64 px) | Tile-thumbnail swatches |
|
||||
|
||||
All three are registered as `persistent=true` (open from module-init,
|
||||
not dismissed by ESC), `input_block="self"` (hit-test claims clicks
|
||||
within own bounds; misses fall through to canvas), and `chromeless=true`
|
||||
(panel-lib skips its title-bar / border / close-X — the widgets paint
|
||||
their own existing style). The map-canvas is NOT a panel widget — it
|
||||
remains module-rendered between `camera.begin/finish`. Canvas drag-paint
|
||||
is gated on `panel.point_in_any_panel(mx, my)` so widget clicks no
|
||||
longer bleed through into the underlying map cells.
|
||||
|
||||
The Window menu's `Layers Panel` / `Palette` toggles now flip the
|
||||
persistent widgets' open-state via `panel.toggle(id)` directly.
|
||||
|
||||
Modals (cheatsheet, save-as, map-properties, about) and the bottom-left
|
||||
status chip stay module-rendered (drawn AFTER `panel.render()` so they
|
||||
appear on top of widget panels).
|
||||
|
||||
Reference in New Issue
Block a user