@@ -90,6 +90,7 @@ class HomeScreen : public UIScreen {
9090 bool _shutdown_init;
9191 AdvertPath recent[UI_RECENT_LIST_SIZE];
9292
93+
9394 void renderBatteryIndicator (DisplayDriver& display, uint16_t batteryMilliVolts) {
9495 // Convert millivolts to percentage
9596 const int minMilliVolts = 3000 ; // Minimum voltage (e.g., 3.0V)
@@ -157,10 +158,12 @@ class HomeScreen : public UIScreen {
157158 int render (DisplayDriver& display) override {
158159 char tmp[80 ];
159160 // node name
160- display.setCursor (0 , 0 );
161161 display.setTextSize (1 );
162162 display.setColor (DisplayDriver::GREEN);
163- display.print (_node_prefs->node_name );
163+ char filtered_name[sizeof (_node_prefs->node_name )];
164+ display.translateUTF8ToBlocks (filtered_name, _node_prefs->node_name , sizeof (filtered_name));
165+ display.setCursor (0 , 0 );
166+ display.print (filtered_name);
164167
165168 // battery voltage
166169 renderBatteryIndicator (display, _task->getBattMilliVolts ());
@@ -199,8 +202,6 @@ class HomeScreen : public UIScreen {
199202 for (int i = 0 ; i < UI_RECENT_LIST_SIZE; i++, y += 11 ) {
200203 auto a = &recent[i];
201204 if (a->name [0 ] == 0 ) continue ; // empty slot
202- display.setCursor (0 , y);
203- display.print (a->name );
204205 int secs = _rtc->getCurrentTime () - a->recv_timestamp ;
205206 if (secs < 60 ) {
206207 sprintf (tmp, " %ds" , secs);
@@ -209,7 +210,14 @@ class HomeScreen : public UIScreen {
209210 } else {
210211 sprintf (tmp, " %dh" , secs / (60 *60 ));
211212 }
212- display.setCursor (display.width () - display.getTextWidth (tmp) - 1 , y);
213+
214+ int timestamp_width = display.getTextWidth (tmp);
215+ int max_name_width = display.width () - timestamp_width - 1 ;
216+
217+ char filtered_recent_name[sizeof (a->name )];
218+ display.translateUTF8ToBlocks (filtered_recent_name, a->name , sizeof (filtered_recent_name));
219+ display.drawTextEllipsized (0 , y, max_name_width, filtered_recent_name);
220+ display.setCursor (display.width () - timestamp_width - 1 , y);
213221 display.print (tmp);
214222 }
215223 } else if (_page == HomePage::RADIO) {
@@ -427,11 +435,15 @@ class MsgPreviewScreen : public UIScreen {
427435
428436 display.setCursor (0 , 14 );
429437 display.setColor (DisplayDriver::YELLOW);
430- display.print (p->origin );
438+ char filtered_origin[sizeof (p->origin )];
439+ display.translateUTF8ToBlocks (filtered_origin, p->origin , sizeof (filtered_origin));
440+ display.print (filtered_origin);
431441
432442 display.setCursor (0 , 25 );
433443 display.setColor (DisplayDriver::LIGHT);
434- display.printWordWrap (p->msg , display.width ());
444+ char filtered_msg[sizeof (p->msg )];
445+ display.translateUTF8ToBlocks (filtered_msg, p->msg , sizeof (filtered_msg));
446+ display.printWordWrap (filtered_msg, display.width ());
435447
436448#if AUTO_OFF_MILLIS==0 // probably e-ink
437449 return 10000 ; // 10 s
0 commit comments