Commit Graph
10 Commits
Author SHA1 Message Date
alex 5be2c1b561 feat(boot): add enable-logo and enable-animation to the graphical menu (#123) 2026-10-04 14:36:35 -07:00
alex afc6d87b91 fix(boot): use more of the graphical menu for titles (#122) 2026-10-04 14:27:46 -07:00
alex c6cb96fb79 fix(boot): only redraw what changed in the graphical menu (#121)
Each frame redrew the whole screen and blitted the entire framebuffer. The static background and panel are now cached, and only the changed regions are blitted.
2026-10-04 14:22:43 -07:00
alex 9ac55ada50 fix(boot): make the graphical menu mouse opt-in
Add menu-styles.graphical.enable-mouse, which is off by default. Without it, or without a pointing device, the cursor is not drawn and the hint only mentions the keyboard.
2026-10-04 14:03:34 -07:00
alex 5b345c82d1 feat(eficore): find the extended boot loader partition on the disk of a partition
Look for a filesystem on the same disk whose GPT partition type is the
XBOOTLDR type, using the partition info protocol. open_shared moves to
the handle module so the graphical menu and the discovery share it.
2026-10-03 20:23:57 -07:00
alex 27d2a5c56e feat(menu): inset the graphical menu in a panel with the logo above it
Entries now sit in a centered panel instead of spanning the screen, and only
the selected entry gets a pill. The logo and name are in a header above the
panel and always show. Long titles end in an ellipsis, and a scrollbar and
position show when the list doesn't fit. Text scale is capped so 1440p
displays aren't dominated by the titles.
2026-10-03 18:05:12 -07:00
alex 1bebcd2ecc fix(menu): draw the graphical menu to every display
The first graphics output may not be a display anyone is looking at. Open
each output that has a device path, and skip the console splitter's output
unless it is the only one. The cursor is shown at the same relative place on
each display, and hovering over an entry on any of them selects it.
2026-10-03 18:05:12 -07:00
alex 795e310ae7 fix(menu): open the graphics output shared to keep the text console connected 2026-10-03 18:05:12 -07:00
alex e12e5dd7cf fix(menu): open the pointers shared so the graphical menu doesn't hang
An exclusive open makes the firmware disconnect the drivers that use the
protocol, and on some firmware that call never returns. Prefer the pointer
on the console input handle, which belongs to the console splitter.
2026-10-03 18:05:12 -07:00
alex 5e8fe7c783 feat(menu): add a graphical boot menu (#106)
* feat(menu): add a graphical boot menu

Adds the graphical menu style, selected with menu-style = "graphical" or
--menu-style=graphical. It draws to the graphics output with the existing
framebuffer, using a built-in 8x8 font, and takes input from the keyboard
and from relative or absolute pointers. The Sprout logo is drawn in the
bottom right corner. If there is no graphics output, the simple menu is
used, which still falls back to the basic menu.

The logo is converted from assets/logo-small.png to raw pixels by the build
crate, which adds the png crate as a build-time dependency only.

The default menu style is still simple. Pointer input is untested, as
OVMF has no mouse driver.

* fix(build): only build the logo conversion on the host

CI builds the whole workspace for the UEFI target, which also builds the
build crate for UEFI. The png dependency pulls in simd-adler32, which
crashes LLVM on that target. The logo conversion only runs in build
scripts on the host, so png and the conversion are now left out when
targeting UEFI.
2026-10-03 17:01:48 -07:00