[Bugfix] lua FS#13940 - FONT_UI using last selected font instead of the UI font

FONT_UI is a placeholder when it gets assigned it isn't resolved
immediately

when its time to resolve the font it is processed with font_get(int font)
first it sets it to the last slot
and then decrements till it gets a valid font

Change-Id: I3c203d58ed2d813d206f5b435e6b55ed196cf213
This commit is contained in:
William Wilgus 2026-06-29 01:06:34 -04:00
parent d9b1819e0b
commit b99b2e98df
2 changed files with 24 additions and 2 deletions

View file

@ -71,6 +71,12 @@ int splash_scroller(int timeout, const char* str)
struct viewport *last_vp = rb->lcd_set_viewport(&vp);
int fontnum = vp.font;
if (fontnum == FONT_UI)
{
fontnum = rb->global_status->font_id[SCREEN_MAIN];
if (fontnum == FONT_SYSFIXED)
fontnum = FONT_UI;
}
font_getstringsize("W", &ch_w, &ch_h, fontnum);
const int max_w = LCD_WIDTH;

View file

@ -1575,6 +1575,14 @@ static inline struct viewport* opt_viewport(lua_State *L,
vp->height = check_tablevalue(L, "height", narg);
}
vp->font = check_tablevalue_def(L, "font", narg, FONT_UI);
if (vp->font == FONT_UI)
{
vp->font = rb->global_status->font_id[SCREEN_MAIN];
if (vp->font == FONT_SYSFIXED)
vp->font = FONT_UI;
}
vp->drawmode = check_tablevalue_def(L, "drawmode", narg, DRMODE_SOLID);
#if LCD_DEPTH == 2
@ -1618,9 +1626,11 @@ RB_WRAP(font_getstringsize)
int w, h, result;
if (fontnumber == FONT_UI)
{
fontnumber = rb->global_status->font_id[SCREEN_MAIN];
else if (fontnumber < 0)
fontnumber = FONT_SYSFIXED;
if (fontnumber == FONT_SYSFIXED)
fontnumber = FONT_UI;
}
if lua_isnoneornil(L, 2)
result = RB_SCREENS(L, 3, getstringsize, str, &w, &h);
@ -1648,6 +1658,12 @@ RB_WRAP(lcd_framebuffer)
RB_WRAP(lcd_setfont)
{
int font = (int) luaL_checkint(L, 1);
if (font == FONT_UI)
{
font = rb->global_status->font_id[SCREEN_MAIN];
if (font == FONT_SYSFIXED)
font = FONT_UI;
}
RB_SCREENS(L, 2, setfont, font);
return 0;
}