Skip to content

Slice B: visual fidelity foundation — render-any-state Skia, parity tests, node visual properties, legacy mirror retirement #106

Description

@ScottMorris

Part of the rich menu editor epic. Plan: docs/rich-menu-editor-plan.md §4 Slice B. Blocked by Slice A.

What you author is what the disc shows; richer still imagery; single authored model.

  • Skia renders any button state (normal/focus/activate) including shadows/glows (ButtonShadowType is currently authored + DOM-previewed but never drawn by skia/scene.rs)
  • Group node rendering in both renderers (position offset + z-order container)
  • Authoring/interaction extraction recursively flattens grouped buttons with accumulated offsets — AuthorableMenuRef::buttons() only scans top-level scene.nodes today, so nested buttons would render without spumux rectangles/navigation
  • Shared visual properties on positioned nodes — opacity, rotation, corner radius (shape/image), 2-stop linear gradient fill, image fit/crop — implemented in both renderers in the same PR
  • Renderer-parity golden tests (render-preview export vs canvas snapshot) wired into CI
  • SceneNode::Video gains width/height; poster-frame rendering in both renderers
  • Retire the legacy Menu.buttons mirror: migrate planner/validation/compiler-fallback readers onto authored_document, keep the one-time migrate_to_document lift on load, delete the write-back sync in project-store.ts; move legacy-only fields onto MenuDocument (notably motion_audio_asset_id, which resolved_motion_audio_asset_id() reads only from the legacy Menu)

Intersects #28, #29, #53, #55, #63, #64.

Metadata

Metadata

Assignees

No one assigned

    Labels

    backendRust backend, commands, and native runtime behaviourfrontendFrontend UI, styling, and webview behaviourmenusMenu layout, navigation, and button behaviour

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions