Public Access
Fn+h on any screen, text fields included, and ? outside Text Entry, open a panel over the content area: the screen's own keys, then the ones that work everywhere. Every App declares its keys for the state it is in (pages, viewers, dialogs and text fields answer for themselves); the App manager opens the panel and takes every key while it is open. About 30 hint lines are gone, from every App. What stays on a screen is state. The first-start Setup keeps its hints and teaches the key; a device set up before gets one Toast, once. The guide and the FAQ open with it. `key help` over the consoles. 476 host tests (8 new). Checked on the device with key help and screenshots: the Launcher, all nine Apps and several of their states. 8.5 KB of flash and 40 bytes of static RAM. Decisions Q196 to Q203 in docs/milestones/U1.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EhqxQ49eCju4CzKYNjZzwT
43 lines
833 B
C++
43 lines
833 B
C++
#pragma once
|
|
|
|
#include <cstdint>
|
|
|
|
namespace roro {
|
|
|
|
// Logical keys, already translated from the physical keyboard (Fn combos, Esc position, etc.).
|
|
enum class Key : uint8_t {
|
|
Char, // a printable character in `ch` (Unicode code point, accents already composed)
|
|
Up,
|
|
Down,
|
|
Left,
|
|
Right,
|
|
Select,
|
|
Back,
|
|
Home,
|
|
Tab,
|
|
Delete,
|
|
Help, // Fn+h anywhere, or ? outside Text Entry: the keys of this screen (issue #69)
|
|
};
|
|
|
|
struct KeyEvent {
|
|
Key key = Key::Char;
|
|
uint32_t ch = 0;
|
|
bool shift = false;
|
|
bool ctrl = false;
|
|
bool alt = false;
|
|
|
|
static KeyEvent of(Key key) {
|
|
KeyEvent e;
|
|
e.key = key;
|
|
return e;
|
|
}
|
|
|
|
static KeyEvent character(uint32_t codePoint) {
|
|
KeyEvent e;
|
|
e.ch = codePoint;
|
|
return e;
|
|
}
|
|
};
|
|
|
|
} // namespace roro
|