feat(app): имя узла обрезается по ширине, вольтаж показывается при наличии места
This commit is contained in:
1 parent
91e6cdde17
commit
f6c9089446
1 file changed
+34
-10
@@ -1015,9 +1015,7 @@ void UITask::renderStatus() {
|
||||
_display->setCursor(0, 0);
|
||||
_display->setTextSize(1);
|
||||
_display->setColor(UIColor::primary_txt);
|
||||
_display->print(_node_prefs->node_name);
|
||||
|
||||
// батарея: иконка с заполнением и напряжение справа в верхней строке
|
||||
// верхняя строка: имя узла слева (с обрезкой), батарея справа
|
||||
{
|
||||
const unsigned batt_mv = _board ? _board->getBattMilliVolts() : 0;
|
||||
const int batt_pct = batteryPercent();
|
||||
@@ -1026,16 +1024,42 @@ void UITask::renderStatus() {
|
||||
const int icon_x = _display->width() - icon_w - 3;
|
||||
const int icon_y = 2;
|
||||
|
||||
// напряжение слева от иконки
|
||||
sprintf(tmp, "%u.%02uV", batt_mv / 1000U, (batt_mv % 1000U) / 10U);
|
||||
int tx = icon_x - 4 - (int)strlen(tmp) * CHAR_W;
|
||||
if (tx < 0) tx = 0;
|
||||
char volts[16];
|
||||
sprintf(volts, "%u.%02uV", batt_mv / 1000U, (batt_mv % 1000U) / 10U);
|
||||
const int volt_w = (int)strlen(volts) * CHAR_W + 4;
|
||||
|
||||
// имя: показываем вольтаж только если он помещается рядом с именем
|
||||
const char* nm = _node_prefs ? _node_prefs->node_name : "";
|
||||
const int name_w = (int)strlen(nm) * CHAR_W;
|
||||
const bool show_volts = (name_w + 4 + volt_w) <= icon_x;
|
||||
const int limit_px = icon_x - 4 - (show_volts ? volt_w : 0);
|
||||
int max_chars = limit_px / CHAR_W;
|
||||
|
||||
char nmbuf[40];
|
||||
int len = (int)strlen(nm);
|
||||
if (len > max_chars && max_chars > 3) {
|
||||
int keep = max_chars - 2; // место под «..»
|
||||
if (keep > (int)sizeof(nmbuf) - 3) keep = (int)sizeof(nmbuf) - 3;
|
||||
memcpy(nmbuf, nm, keep);
|
||||
nmbuf[keep] = '.';
|
||||
nmbuf[keep + 1] = '.';
|
||||
nmbuf[keep + 2] = 0;
|
||||
} else {
|
||||
strncpy(nmbuf, nm, sizeof(nmbuf) - 1);
|
||||
nmbuf[sizeof(nmbuf) - 1] = 0;
|
||||
}
|
||||
_display->setCursor(0, 0);
|
||||
_display->print(nmbuf);
|
||||
|
||||
_display->setColor(UIColor::primary_txt);
|
||||
_display->setCursor(tx, 1);
|
||||
_display->print(tmp);
|
||||
|
||||
// напряжение слева от иконки
|
||||
if (show_volts) {
|
||||
_display->setCursor(icon_x - 4 - (int)strlen(volts) * CHAR_W, 1);
|
||||
_display->print(volts);
|
||||
}
|
||||
|
||||
// корпус, «пипка» и заполнение по проценту
|
||||
_display->setColor(UIColor::primary_txt);
|
||||
_display->drawRect(icon_x, icon_y, icon_w, icon_h);
|
||||
_display->fillRect(icon_x + icon_w, icon_y + 2, 2, icon_h - 4);
|
||||
int pct = batt_pct < 0 ? 0 : (batt_pct > 100 ? 100 : batt_pct);
|
||||
|
||||
Reference in new issue
Block a user