• v0.16.0 — modal-feel polish round

    funman300 released this 2026-05-06 00:52:08 +00:00 | 460 commits to master since this release

    Five small polish items that together meaningfully tighten how
    every overlay screen feels. Originated from a smoke-test report
    that the Achievements list didn't scroll; the sweep that followed
    found four other modals with the same problem plus three smaller
    modal-feel gaps.

    Added

    • Pointer cursor on hover for every interactive Button entity
      (modal buttons, HUD action bar, mode-launcher cards, settings
      toggles, Stats selectors). update_cursor_icon's branch order
      is Grabbing → Pointer → Grab → Default.
    • Click-outside-to-dismiss for the six read-only modals: Stats,
      Achievements, Help, Profile, Leaderboard, Home. New
      ScrimDismissible marker on ModalScrim opts a modal in;
      dismiss_modal_on_scrim_click despawns the topmost dismissible
      scrim on a scrim-click outside every card. Settings, Onboarding,
      Pause, Forfeit confirm, ConfirmNewGame intentionally don't opt
      in — they carry unsaved or destructive state.

    Fixed

    • Achievements / Help / Stats / Profile / Leaderboard now scroll
      when their content overflows the 800x600 minimum window. Each
      body Node carries Overflow::scroll_y() + a max_height +
      per-plugin marker; sibling scroll_*_panel systems route
      MouseWheel into ScrollPosition. Mirrors the existing
      SettingsPanelScrollable pattern.
    • Modal focus arrives on the same frame the modal opens.
      attach_focusable_to_modal_buttons + auto_focus_on_modal_open
      moved from Update to PostUpdate so the schedule boundary
      supplies the sync point — every modal spawned anywhere in
      Update is materialised before attach runs, FocusedButton is
      populated before app.update() returns, and the very first
      Tab/Enter press lands on a populated resource instead of wasting
      itself moving focus from None to the primary.

    By the numbers: 1196 passing tests (was 1178 at v0.15.0), zero
    clippy warnings.

    Downloads