-
Notifications
You must be signed in to change notification settings - Fork 4
ui task
File: examples/companion_radio/ui-new/UITask.cpp
Two independent directions: (1) adaptive HomeScreen layout for displays of different widths, (2) redesign of the unread message preview screen.
All HomeScreen pages (MSGS, RECENT, RADIO, BLUETOOTH, ADVERT, GPS, SENSORS, SHUTDOWN) have been migrated from hardcoded coordinates to computed metrics:
int hdr_size = (display.width() >= 200) ? 2 : 1; // header font size
int hdr_line_h = 8 * hdr_size; // header line height
int dot_y = hdr_line_h + 5; // Y of page indicator
int content_y = hdr_line_h + 14; // Y of content start
int line_h = 8 * hdr_size + 3; // line spacing-
Narrow displays (< 200 px):
hdr_size=1, behavior as before. -
Wide displays (≥ 200 px):
hdr_size=2, larger font in header and content. -
RADIOpage: forhdr_size=2, shortened string formats are used (FQ:%.3f SF:%dinstead ofFQ: %06.3f SF: %d). - All elements are positioned relative to
content_yanddisplay.height()instead of absolute values likey=18,y=64-11, etc.
When navigating to the RECENT page, the call to _task->showAlert("Recent adverts", 800) has been removed — it was redundant.
Before:
char origin[62]; // formatted string "(D) name:" or "(N) name:"
char msg[78];After:
uint8_t path_len; // 0xFF = direct, otherwise hop count
char from_name[32]; // sender / channel name
char msg[MAX_TEXT_LEN];Data is stored unformatted; formatting has been moved to render().
Removed sprintf for origin; replaced with direct copying of path_len and from_name via strncpy with NUL guarantee.
-
Metrics:
hdr_sizebased on display width,msg_start_y = hdr_line_h + 3. -
Body font size selection: word-wrap is simulated at
size=2; if the message fits —body_size=2is used, otherwisebody_size=1. -
Header:
#N (D)name(direct) or#N [hops]name(group) on the left + timeXs/Xm/Xhon the right, both inhdr_size. -
Divider: horizontal line at
hdr_line_h + 2. -
Body:
printWordWrap()inbody_size. - Removed rendering of
"Unread: N"and the old layout withorigin.
Файл: examples/companion_radio/ui-new/UITask.cpp
Два независимых направления: (1) адаптивная раскладка HomeScreen под дисплеи разной ширины, (2) переработка экрана предпросмотра непрочитанных сообщений.
Все страницы HomeScreen (MSGS, RECENT, RADIO, BLUETOOTH, ADVERT, GPS, SENSORS, SHUTDOWN) переведены с хардкод-координат на вычисляемые метрики:
int hdr_size = (display.width() >= 200) ? 2 : 1; // размер шрифта заголовка
int hdr_line_h = 8 * hdr_size; // высота строки заголовка
int dot_y = hdr_line_h + 5; // Y индикатора страницы
int content_y = hdr_line_h + 14; // Y начала контента
int line_h = 8 * hdr_size + 3; // межстрочный интервал-
Узкие дисплеи (< 200 px):
hdr_size=1, поведение как прежде. -
Широкие дисплеи (≥ 200 px):
hdr_size=2, крупный шрифт в заголовке и контенте. - Страница
RADIO: дляhdr_size=2используются укороченные форматы строк (FQ:%.3f SF:%dвместоFQ: %06.3f SF: %d). - Все элементы позиционируются относительно
content_yиdisplay.height()вместо абсолютныхy=18,y=64-11и т.д.
При навигации на страницу RECENT убран вызов _task->showAlert("Recent adverts", 800) — был лишним.
До:
char origin[62]; // форматированная строка "(D) name:" или "(N) name:"
char msg[78];После:
uint8_t path_len; // 0xFF = direct, иначе hop count
char from_name[32]; // имя отправителя / канала
char msg[MAX_TEXT_LEN];Данные хранятся неформатированными, форматирование перенесено в render().
Убрано sprintf для origin; вместо него — прямое копирование path_len и from_name через strncpy с NUL-гарантией.
-
Метрики:
hdr_sizeпо ширине дисплея,msg_start_y = hdr_line_h + 3. -
Выбор размера шрифта тела: симулируется перенос по словам при
size=2; если сообщение умещается — используетсяbody_size=2, иначеbody_size=1. -
Заголовок:
#N (D)name(direct) или#N [hops]name(group) слева + времяXs/Xm/Xhсправа, оба вhdr_size. -
Разделитель: горизонтальная линия на
hdr_line_h + 2. -
Тело:
printWordWrap()вbody_size. - Убрана отрисовка
"Unread: N"и старый layout сorigin.