Raw UTF-8 message body was passed directly to display.print(), rendering
Polish and other accented chars as garbage on the Adafruit font.
Transliterating before wrapLines also fixes byte-count wrapping for
multi-byte UTF-8 characters.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add getCharWidth()/getLineHeight() virtual methods to DisplayDriver so
all layout math adapts to whatever font is active
- Fix Lemon font baseline offset from +8 to +6 (cap height, not FONT_ASCENT)
- Add LemonIcons.h with Private Use Area glyph table; U+E03B mute icon
rendered via drawLemonChar icon lookup
- FullscreenMsgView: compute wrap width and visible lines dynamically from
display font metrics instead of hardcoded constants
- SettingsScreen and MessagesScreen: replace hardcoded ITEM_H/VISIBLE with
members computed at render() time from getLineHeight()
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Swap left/right navigation in fullscreen view: left=newer, right=older
- Update arrow indicators to match new direction
- Remove # prefix from channel name in message and compose view titles
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Shared struct handles rendering and input for both DM and channel fullscreen
views, replacing ~80 lines of duplicated inline code. Fixes navigation arrow
indicators being swapped in channel fullscreen.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>