ui/requester: fix clamping

Fixes the selection outline disappearing for a single frame when
navigating beyond the last visible row.
This commit is contained in:
Marcin Kurczewski 2025-04-19 09:05:22 +02:00
parent 83bee31c0c
commit 0676fbdd4d
2 changed files with 5 additions and 16 deletions

View file

@ -41,14 +41,9 @@ int32_t UI_Requester_Control(UI_REQUESTER_STATE *const s)
s->sel_row = s->max_rows - 1;
}
}
CLAMP(s->vis_row, s->sel_row - s->vis_rows + 1, s->sel_row);
}
if (s->sel_row > s->vis_row + s->vis_rows) {
s->vis_row++;
}
if (s->sel_row < s->vis_row) {
s->vis_row = s->sel_row;
}
CLAMP(s->vis_row, 0, s->max_rows - s->vis_rows);
if (s->is_selectable) {
@ -62,8 +57,7 @@ int32_t UI_Requester_Control(UI_REQUESTER_STATE *const s)
return UI_REQUESTER_NO_CHOICE;
}
void UI_Requester_SetMaxRows(
UI_REQUESTER_STATE *const s, const int32_t max_rows)
void UI_Requester_SetMaxRows(UI_REQUESTER_STATE *const s, const size_t max_rows)
{
s->max_rows = max_rows;
}
@ -72,15 +66,10 @@ void UI_Requester_SetVisibleRows(
UI_REQUESTER_STATE *const s, const size_t visible_rows)
{
s->vis_rows = visible_rows;
CLAMP(s->vis_rows, 0, s->max_rows);
CLAMPL(s->vis_rows, 0);
if (s->sel_row != -1) {
if (s->vis_row > s->sel_row) {
s->vis_row = s->sel_row;
} else if (s->sel_row > s->vis_row + s->vis_rows) {
s->vis_row = s->sel_row - s->vis_rows + 1;
}
CLAMP(s->vis_row, s->sel_row - s->vis_rows + 1, s->sel_row);
}
CLAMP(s->vis_row, 0, s->max_rows - s->vis_rows);
}

View file

@ -25,7 +25,7 @@ void UI_Requester_Init(
bool is_selectable);
void UI_Requester_Free(UI_REQUESTER_STATE *s);
int32_t UI_Requester_Control(UI_REQUESTER_STATE *s);
void UI_Requester_SetMaxRows(UI_REQUESTER_STATE *s, int32_t max_rows);
void UI_Requester_SetMaxRows(UI_REQUESTER_STATE *s, size_t max_rows);
void UI_Requester_SetVisibleRows(UI_REQUESTER_STATE *s, size_t visible_rows);
int32_t UI_Requester_GetFirstRow(const UI_REQUESTER_STATE *s);
int32_t UI_Requester_GetLastRow(const UI_REQUESTER_STATE *s);