Boot manager: Niveus window, keys and wells, Instrument Sans, pointer, other systems, working power entries
The F8 menu is redrawn in the Niveus language: a window with three lights, bevelled keys with a lit edge, wells for panels, anti-aliased corners and a soft shadow, set in Instrument Sans rasterised into include/gfx/nvfont.h (tools/python/mknvfont.py, make nvfont). Scale doubles on screens 1400 px tall or more. Lists taller than the screen scroll. The keyboard still drives everything, and a mouse, touchpad or tablet does too: both UEFI pointer protocols are polled, hover moves the highlight, a click activates. The cursor stays hidden until the pointer has really done something, since the firmware installs a pointer protocol with or without a mouse. The 'keep this resolution?' countdown is one ten-second budget however many times the pointer moves. Loaders found at well-known paths on any volume (Windows, Ubuntu, Debian, Fedora, Arch, openSUSE, systemd-boot, rEFInd, other BOOTX64.EFI) are listed and chain-loaded with LoadImage/StartImage. 'Reboot to firmware' used to halt; it now sets OsIndications and restarts, and Restart and Shut Down call ResetSystem. Checked under QEMU+OVMF: menu, resolution list (incl. 2560x1600 at double scale), system information, shut down, firmware setup, chain-loading a copy of the loader from a second disk, and a full boot of the ISO to the login prompt. Pointer hover and click were checked only with synthetic events: in this setup a USB mouse or tablet delivered no event to the loader (one USB I/O handle appeared but no pointer protocol came from it), and why was not established. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EVRhxi9zpdW2uDUN4FVcao
This commit is contained in:
parent
020aa6113c
commit
dee3affa3b
11 changed files with 9304 additions and 208 deletions
|
|
@ -77,6 +77,21 @@ void ui_splash(const char *subtitle);
|
|||
void ui_menu(const char *title, const char *const *items, int n, int selected,
|
||||
const char *hint);
|
||||
|
||||
/* Repaint only the keys that changed when the highlight moves (a full paint
|
||||
* redraws the screen). Returns without effect on a panel. */
|
||||
void ui_menu_select(int selected);
|
||||
|
||||
/* Which key is under a point, or -1. A panel has one key, index 0. */
|
||||
int ui_menu_hit(int x, int y);
|
||||
|
||||
/* The pointer: drawn on top of everything, with what is under it saved and put
|
||||
* back. Menus hide it while they repaint and show it again afterwards. */
|
||||
void ui_cursor(int x, int y, int show);
|
||||
|
||||
/* A message in the same window as the panels, with one button. */
|
||||
void ui_notice(const char *title, const char *const *lines, int n,
|
||||
const char *button, const char *hint);
|
||||
|
||||
/* A panel of label/value rows -- the system information screen. */
|
||||
void ui_panel(const char *title, const char *const *labels,
|
||||
const char *const *values, int n, const char *hint);
|
||||
|
|
|
|||
Loading…
Reference in a new issue