feat(keyboard): hold-Enter accent popup; relocate cursor-mode trigger

Replaces the 8 separate Latin-diacritic alt-alphabet pages (Polish, Czech,
Slovak, German, French, Spanish, Portuguese, Nordic) with one popup: Hold
Enter on a Latin letter that has accented variants (a c d e i l n o r s
t u y z) opens a floating horizontal strip of that letter's accents,
anchored over its own row so the grid stays visible underneath (LEFT/
RIGHT picks, Enter inserts via a new shared insertGlyph() helper, Cancel
dismisses). Holding a letter with no variants is a no-op. Cyrillic/Greek
remain full alt-alphabet pages; NodePrefs::keyboard_alt_alphabet shrinks
from 11 to 3 values accordingly -- an old saved Polish..Nordic value just
clamps to Latin via DataStore.cpp's existing range check, no migration
code needed.

Freeing Hold-Enter on letter cells required moving cursor-mode's own
trigger: UP from the top letter row now enters it instead of wrapping to
the special row. To keep that wrap reachable, cursor mode's UP/DOWN
(Home/End) continue the wrap once already at that boundary -- UP again
lands on the special row, DOWN again back on the letter grid -- reusing
the same proportional column mapping the old direct wrap used.

Diagnostics' font-coverage sample swaps its 8 per-language lines for one
line sampling the new accent table. Docs (message_screen, settings_screen,
solo_ui_framework) and release-notes updated to match.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Jakub
2026-07-17 20:28:11 +02:00
co-authored by Claude Sonnet 5
parent ce1fde4fdb
commit 694bbcd68b
7 changed files with 193 additions and 192 deletions
@@ -175,20 +175,14 @@ class DiagnosticsScreen : public UIScreen {
// One sample line per script/keyboard alphabet the UI font claims to cover
// (all inside the U+0020-04FF glyph range the OLED misc-fixed / e-ink Lemon
// fonts carry), so the font's coverage can be checked by eye on real
// hardware. Per-language lines use the same 2-letter codes as
// KeyboardWidget::altAlphabetHint and each shows that language's own
// non-ASCII letters (see KeyboardWidget.h's KB_*_CHARS tables).
// hardware. "Acc" samples one variant from each KeyboardWidget.h
// KB_ACCENT_VARIANTS group (the Hold-Enter accent popup that replaced the
// old per-language alt-alphabet pages) so every accented letter actually
// reachable in the UI still gets an eyeball check.
void buildFontLines() {
_line_count = 0;
addLine("Latin ABCabc xyz");
addLine("PL ąćęłńóśźż");
addLine("CZ áčďéěíňóřš");
addLine("SK áäčďíĺľňôŕ");
addLine("DE äöüß");
addLine("FR àâçéèêëîïœ");
addLine("ES áéíñóúü");
addLine("PT áàâãçéêíóôõú");
addLine("ND åäæöø");
addLine("Acc áçďéíłñóřśťúýź");
addLine("Grk ΑΒΓ αβγξω"); // ΑΒΓ αβγξω
addLine("Cyr АБВ абвжя"); // АБВ абвжя
addLine("Num 0123456789");