diff --git a/src/menu/ui_components/common.c b/src/menu/ui_components/common.c index 3ff1c90d..3b1b149b 100644 --- a/src/menu/ui_components/common.c +++ b/src/menu/ui_components/common.c @@ -202,7 +202,7 @@ void ui_components_actions_bar_text_draw (rdpq_align_t align, rdpq_valign_t vali } void ui_components_main_text_draw_location (float x, float y, char *fmt, ...) { - char buffer[1024]; + char buffer[256]; size_t nbytes = sizeof(buffer); va_list va; @@ -234,7 +234,38 @@ void ui_components_main_text_draw_location (float x, float y, char *fmt, ...) { } -void ui_components_tabs_draw(const char** text, int count, int selected ) { + +static void ui_components_main_text_draw_tab (float x, float y, float width, char *fmt, ...) { + char buffer[256]; + size_t nbytes = sizeof(buffer); + + va_list va; + va_start(va, fmt); + char *formatted = vasnprintf(buffer, &nbytes, fmt, va); + va_end(va); + + rdpq_text_printn( + &(rdpq_textparms_t) { + .width = width, + .height = LAYOUT_ACTIONS_SEPARATOR_Y - OVERSCAN_HEIGHT - (TEXT_MARGIN_VERTICAL * 2), + .align = ALIGN_CENTER, + .valign = VALIGN_TOP, + .wrap = WRAP_ELLIPSES, + .line_spacing = TEXT_OFFSET_VERTICAL, + }, + FNT_DEFAULT, + x, + y, + formatted, + nbytes + ); + + if (formatted != buffer) { + free(formatted); + } +} + +void ui_components_tabs_draw(const char** text, int count, int selected, int width ) { ui_components_box_draw( VISIBLE_AREA_X0, @@ -244,10 +275,12 @@ void ui_components_tabs_draw(const char** text, int count, int selected ) { BORDER_COLOR ); - int x = VISIBLE_AREA_X0; - int y = OVERSCAN_HEIGHT; - int width = 14 * 8; + int starting_x = VISIBLE_AREA_X0 + 4; + + int x = starting_x; + int y = OVERSCAN_HEIGHT; int height = TAB_HEIGHT; + int half_width = width / 2; // first draw the tabs that are not selected for(int i=0;i< count;i++) { @@ -269,7 +302,7 @@ void ui_components_tabs_draw(const char** text, int count, int selected ) { TAB_INACTIVE_BORDER_COLOR ); - ui_components_main_text_draw_location(x + 8, y, (char*)text[i]); + ui_components_main_text_draw_tab(x + 4, y, width, (char*)text[i]); } x += width; @@ -277,7 +310,7 @@ void ui_components_tabs_draw(const char** text, int count, int selected ) { // draw the selected tab if(selected >= 0 && selected < count) { - x = VISIBLE_AREA_X0 + (width * selected); + x = starting_x + (width * selected); ui_components_box_draw( x, @@ -295,6 +328,7 @@ void ui_components_tabs_draw(const char** text, int count, int selected ) { TAB_ACTIVE_BORDER_COLOR ); - ui_components_main_text_draw_location(x + 8, y, (char*)text[selected]); + + ui_components_main_text_draw_tab(x + 4, y, width, (char*)text[selected]); } } diff --git a/src/menu/ui_components/constants.h b/src/menu/ui_components/constants.h index 7074c078..a352e9e4 100644 --- a/src/menu/ui_components/constants.h +++ b/src/menu/ui_components/constants.h @@ -41,7 +41,7 @@ #define VISIBLE_AREA_HEIGHT (VISIBLE_AREA_Y1 - VISIBLE_AREA_Y0) - +// 400 #define LAYOUT_ACTIONS_SEPARATOR_Y (400) /** @brief The seek bar height. */ @@ -111,7 +111,7 @@ #define LIST_SCROLLBAR_Y (VISIBLE_AREA_Y0) /** @brief The maximum amount of file list entries. */ -#define LIST_ENTRIES (18) +#define LIST_ENTRIES (17) /** @brief The maximum width available for a file list entry. */ #define FILE_LIST_MAX_WIDTH (480) #define FILE_LIST_HIGHLIGHT_WIDTH (VISIBLE_AREA_X1 - VISIBLE_AREA_X0 - LIST_SCROLLBAR_WIDTH) diff --git a/src/menu/ui_components/tabs.c b/src/menu/ui_components/tabs.c index 4b7470bd..7f025eb0 100644 --- a/src/menu/ui_components/tabs.c +++ b/src/menu/ui_components/tabs.c @@ -11,5 +11,5 @@ static const char* tabs[3] = void ui_compontents_tabs_common_draw(int selected) { - ui_components_tabs_draw(tabs, 3, selected); + ui_components_tabs_draw(tabs, 3, selected, 189); } \ No newline at end of file