From 01b63b0a460a15af3b464374e0ae8be8e60458dc Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 9 Aug 2023 22:31:27 +0200 Subject: [PATCH] Mirror some submenu and varitemlist code/behavior --- applications/services/gui/modules/submenu.c | 2 +- .../services/gui/modules/variable_item_list.c | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/applications/services/gui/modules/submenu.c b/applications/services/gui/modules/submenu.c index 368f5be28..9915a1cc8 100644 --- a/applications/services/gui/modules/submenu.c +++ b/applications/services/gui/modules/submenu.c @@ -99,7 +99,7 @@ static void submenu_view_draw_callback(Canvas* canvas, void* _model) { const size_t item_position = position - model->window_position; const size_t items_on_screen = submenu_items_on_screen(!furi_string_empty(model->header), model->is_vertical); - uint8_t y_offset = furi_string_empty(model->header) ? 0 : 16; + uint8_t y_offset = furi_string_empty(model->header) ? 0 : item_height; if(item_position < items_on_screen) { if(position == model->position) { diff --git a/applications/services/gui/modules/variable_item_list.c b/applications/services/gui/modules/variable_item_list.c index 9b22ac2f0..644e8361f 100644 --- a/applications/services/gui/modules/variable_item_list.c +++ b/applications/services/gui/modules/variable_item_list.c @@ -45,14 +45,14 @@ static void variable_item_list_draw_callback(Canvas* canvas, void* _model) { VariableItemListModel* model = _model; const uint8_t item_height = 16; - const uint8_t item_width = 123; + uint8_t item_width = canvas_width(canvas) - 5; canvas_clear(canvas); + canvas_set_font(canvas, FontSecondary); + uint8_t position = 0; VariableItemArray_it_t it; - - canvas_set_font(canvas, FontSecondary); for(VariableItemArray_it(it, model->items); !VariableItemArray_end_p(it); VariableItemArray_next(it)) { uint8_t item_position = position - model->window_position; @@ -139,7 +139,9 @@ void variable_item_list_set_selected_item(VariableItemList* variable_item_list, VariableItemListModel * model, { uint8_t position = index; - if(position >= VariableItemArray_size(model->items)) { + const size_t items_size = VariableItemArray_size(model->items); + + if(position >= items_size) { position = 0; } @@ -150,11 +152,14 @@ void variable_item_list_set_selected_item(VariableItemList* variable_item_list, model->window_position -= 1; } - if(VariableItemArray_size(model->items) <= 4) { + uint8_t items_on_screen = 4; + + if(items_size <= items_on_screen) { model->window_position = 0; } else { - if(model->window_position >= (VariableItemArray_size(model->items) - 4)) { - model->window_position = (VariableItemArray_size(model->items) - 4); + const size_t pos = items_size - items_on_screen; + if(model->window_position > pos) { + model->window_position = pos; } } },