From b851102801ed2982781abed795965a0c2a57921e Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sun, 30 Apr 2023 22:10:00 +0100 Subject: [PATCH] Add cstr version of elements_scrollable_text_line --- applications/services/gui/elements.c | 18 +++++++++++++++--- applications/services/gui/elements.h | 9 +++++++++ applications/services/gui/modules/menu.c | 7 +++---- firmware/targets/f7/api_symbols.csv | 1 + 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/applications/services/gui/elements.c b/applications/services/gui/elements.c index ffe52d354..fb64c482c 100644 --- a/applications/services/gui/elements.c +++ b/applications/services/gui/elements.c @@ -573,16 +573,16 @@ void elements_string_fit_width(Canvas* canvas, FuriString* string, uint8_t width } } -void elements_scrollable_text_line( +void elements_scrollable_text_line_str( Canvas* canvas, uint8_t x, uint8_t y, uint8_t width, - FuriString* string, + const char* string, size_t scroll, bool ellipsis, bool centered) { - FuriString* line = furi_string_alloc_set(string); + FuriString* line = furi_string_alloc_set_str(string); size_t len_px = canvas_string_width(canvas, furi_string_get_cstr(line)); if(len_px > width) { @@ -631,6 +631,18 @@ void elements_scrollable_text_line( furi_string_free(line); } +void elements_scrollable_text_line( + Canvas* canvas, + uint8_t x, + uint8_t y, + uint8_t width, + FuriString* string, + size_t scroll, + bool ellipsis, + bool centered) { + elements_scrollable_text_line_str(canvas, x, y, width, furi_string_get_cstr(string), scroll, ellipsis, centered); + } + void elements_text_box( Canvas* canvas, uint8_t x, diff --git a/applications/services/gui/elements.h b/applications/services/gui/elements.h index 00bffc9a6..7cab3a67f 100644 --- a/applications/services/gui/elements.h +++ b/applications/services/gui/elements.h @@ -220,6 +220,15 @@ void elements_string_fit_width(Canvas* canvas, FuriString* string, uint8_t width * @param[in] ellipsis The ellipsis flag: true to add ellipse * @param[in] centered The centered flag: true to center text on x and y */ +void elements_scrollable_text_line_str( + Canvas* canvas, + uint8_t x, + uint8_t y, + uint8_t width, + const char* string, + size_t scroll, + bool ellipsis, + bool centered); void elements_scrollable_text_line( Canvas* canvas, uint8_t x, diff --git a/applications/services/gui/modules/menu.c b/applications/services/gui/modules/menu.c index 191c0e874..899d340de 100644 --- a/applications/services/gui/modules/menu.c +++ b/applications/services/gui/modules/menu.c @@ -47,9 +47,9 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { size_t items_count = MenuItemArray_size(model->items); if(items_count) { MenuItem* item; - FuriString* name = furi_string_alloc(); size_t shift_position; if(XTREME_SETTINGS()->wii_menu) { + FuriString* name = furi_string_alloc(); if(position < 2) { shift_position = 0; } else if(position >= items_count - 2 + (items_count % 2)) { @@ -99,6 +99,7 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { elements_frame(canvas, 0 + x_off, 0 + y_off, 40, 30); } } + furi_string_free(name); } else { // First line canvas_set_font(canvas, FontSecondary); @@ -129,8 +130,7 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { } else { scroll_counter -= 1; } - furi_string_set(name, item->label); - elements_scrollable_text_line(canvas, 22, 36, 98, name, scroll_counter, false, false); + elements_scrollable_text_line_str(canvas, 22, 36, 98, item->label, scroll_counter, false, false); // Third line canvas_set_font(canvas, FontSecondary); shift_position = (2 + position + items_count - 1) % items_count; @@ -147,7 +147,6 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { elements_frame(canvas, 0, 21, 128 - 5, 21); elements_scrollbar(canvas, position, items_count); } - furi_string_free(name); } else { canvas_draw_str(canvas, 2, 32, "Empty"); elements_scrollbar(canvas, 0, 0); diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 37d2b916f..6e1781f75 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -853,6 +853,7 @@ Function,+,elements_multiline_text_framed,void,"Canvas*, uint8_t, uint8_t, const Function,+,elements_progress_bar,void,"Canvas*, uint8_t, uint8_t, uint8_t, float" Function,+,elements_progress_bar_with_text,void,"Canvas*, uint8_t, uint8_t, uint8_t, float, const char*" Function,+,elements_scrollable_text_line,void,"Canvas*, uint8_t, uint8_t, uint8_t, FuriString*, size_t, _Bool, _Bool" +Function,+,elements_scrollable_text_line_str,void,"Canvas*, uint8_t, uint8_t, uint8_t, const char*, size_t, _Bool, _Bool" Function,+,elements_scrollbar,void,"Canvas*, uint16_t, uint16_t" Function,+,elements_scrollbar_pos,void,"Canvas*, uint8_t, uint8_t, uint8_t, uint16_t, uint16_t" Function,+,elements_slightly_rounded_box,void,"Canvas*, uint8_t, uint8_t, uint8_t, uint8_t"