mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-07-26 14:58:12 +00:00
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:
@@ -332,28 +332,19 @@ struct NodePrefs { // persisted to file
|
||||
// and the misc-fixed font (src/helpers/ui/MiscFixedFont.h) for on-screen
|
||||
// rendering — every alphabet here must be in its U+0020-04FF range.
|
||||
//
|
||||
// The Latin-diacritic entries (Polish..Nordic) replace what used to be a
|
||||
// single combined "Ext.Latin" curated subset — each is now its own full,
|
||||
// linguistically-correct set of that language's non-ASCII letters instead
|
||||
// of a shared partial one. Not a schema change: keyboard_alt_alphabet is
|
||||
// still just an index into keyboardAlphabetLabel()/KeyboardWidget's tables,
|
||||
// so widening KB_ALPHABET_COUNT needs no persisted-data migration — only
|
||||
// note that an index of 3 now means Polish, not the old combined Ext.Latin.
|
||||
// Latin-diacritic letters (Polish/Czech/Slovak/German/French/Spanish/
|
||||
// Portuguese/Nordic) used to each be their own full alt-alphabet page here;
|
||||
// they're now reached instead by holding Enter on a Latin letter that has
|
||||
// accented variants (see KeyboardWidget.h's KB_ACCENT_VARIANTS), so this
|
||||
// enum only covers actual non-Latin scripts. Not a schema change: an old
|
||||
// saved value of 3+ (one of the removed languages) just clamps to 0 (Latin)
|
||||
// via DataStore.cpp's existing `>= KB_ALPHABET_COUNT` range check.
|
||||
static const uint8_t KB_ALPHABET_LATIN_ONLY = 0;
|
||||
static const uint8_t KB_ALPHABET_CYRILLIC = 1;
|
||||
static const uint8_t KB_ALPHABET_GREEK = 2;
|
||||
static const uint8_t KB_ALPHABET_POLISH = 3; // ą ć ę ł ń ó ś ź ż
|
||||
static const uint8_t KB_ALPHABET_CZECH = 4; // á č ď é ě í ň ó ř š ť ú ů ý ž
|
||||
static const uint8_t KB_ALPHABET_SLOVAK = 5; // á ä č ď é í ĺ ľ ň ó ô ŕ š ť ú ý ž
|
||||
static const uint8_t KB_ALPHABET_GERMAN = 6; // ä ö ü ß
|
||||
static const uint8_t KB_ALPHABET_FRENCH = 7; // à â ç é è ê ë î ï ô ù û ü ÿ œ
|
||||
static const uint8_t KB_ALPHABET_SPANISH = 8; // á é í ñ ó ú ü
|
||||
static const uint8_t KB_ALPHABET_PORTUGUESE = 9; // á à â ã ç é ê í ó ô õ ú
|
||||
static const uint8_t KB_ALPHABET_NORDIC = 10; // å ä æ ö ø (Danish/Norwegian/Swedish share this set)
|
||||
static const uint8_t KB_ALPHABET_COUNT = 11;
|
||||
static const uint8_t KB_ALPHABET_COUNT = 3;
|
||||
static const char* keyboardAlphabetLabel(uint8_t idx) {
|
||||
static const char* L[KB_ALPHABET_COUNT] = { "Latin", "Cyrillic", "Greek", "Polish", "Czech",
|
||||
"Slovak", "German", "French", "Spanish", "Portuguese", "Nordic" };
|
||||
static const char* L[KB_ALPHABET_COUNT] = { "Latin", "Cyrillic", "Greek" };
|
||||
return L[idx < KB_ALPHABET_COUNT ? idx : 0];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user