diff --git a/menu/drivers/materialui.c b/menu/drivers/materialui.c index 685b269553..8edef549b8 100644 --- a/menu/drivers/materialui.c +++ b/menu/drivers/materialui.c @@ -123,7 +123,9 @@ typedef struct mui_handle } categories; font_data_t *font; - video_font_raster_block_t list_block; + font_data_t *font2; + video_font_raster_block_t raster_block; + video_font_raster_block_t raster_block2; float scroll_y; } mui_handle_t; @@ -568,7 +570,7 @@ static void mui_render(void *data) } static void mui_render_label_value(mui_handle_t *mui, - int y, unsigned width, unsigned height, + int i, int y, unsigned width, unsigned height, uint64_t index, uint32_t color, bool selected, const char *label, const char *value, float *label_color) { @@ -580,10 +582,11 @@ static void mui_render_label_value(mui_handle_t *mui, 1.00, 1.00, 1.00, 1.00, }; - menu_animation_ctx_ticker_t ticker; char label_str[255]; + char sublabel_str[255]; char value_str[255]; + float label_offset = 0; bool switch_is_on = true; int value_len = utf8len(value); int ticker_limit = 0; @@ -591,7 +594,7 @@ static void mui_render_label_value(mui_handle_t *mui, bool do_draw_text = false; size_t usable_width = width - (mui->margin * 2); - label_str[0] = value_str[0] = '\0'; + label_str[0] = value_str[0] = sublabel_str[0] = '\0'; if (value_len * mui->glyph_width > usable_width / 2) value_len = (usable_width/2) / mui->glyph_width; @@ -612,9 +615,19 @@ static void mui_render_label_value(mui_handle_t *mui, menu_animation_ctl(MENU_ANIMATION_CTL_TICKER, &ticker); + label_offset = mui->font->size / 3; + if (menu_entry_get_sublabel(i, sublabel_str, sizeof(sublabel_str))) + { + label_offset = -mui->font->size / 3; + menu_display_draw_text(mui->font2, sublabel_str, + mui->margin, + y + mui->line_height / 2 + mui->font->size / 1, + width, height, 0x888888ff, TEXT_ALIGN_LEFT, 1.0f, false, 0); + } + menu_display_draw_text(mui->font, label_str, mui->margin, - y + mui->line_height / 2 + mui->font->size / 3, + y + mui->line_height / 2 + label_offset, width, height, color, TEXT_ALIGN_LEFT, 1.0f, false, 0); if (string_is_equal(value, "disabled") || string_is_equal(value, "off")) @@ -709,7 +722,8 @@ static void mui_render_menu_list(mui_handle_t *mui, header_height = menu_display_get_header_height(); - mui->list_block.carr.coords.vertices = 0; + mui->raster_block.carr.coords.vertices = 0; + mui->raster_block2.carr.coords.vertices = 0; menu_entries_ctl(MENU_ENTRIES_CTL_START_GET, &i); @@ -739,11 +753,12 @@ static void mui_render_menu_list(mui_handle_t *mui, mui_render_label_value( mui, + i, y, width, height, *frame_count / 20, - entry_selected ? font_hover_color : font_normal_color, + font_hover_color, entry_selected, rich_label, entry_value, @@ -1164,7 +1179,8 @@ static void mui_frame(void *data) &highlighted_entry_color[0] ); - menu_display_font_bind_block(mui->font, &mui->list_block); + menu_display_font_bind_block(mui->font, &mui->raster_block); + menu_display_font_bind_block(mui->font2, &mui->raster_block2); mui_render_menu_list( mui, @@ -1176,6 +1192,7 @@ static void mui_frame(void *data) ); menu_display_font_flush_block(mui->font); + menu_display_font_flush_block(mui->font2); menu_animation_ctl(MENU_ANIMATION_CTL_SET_ACTIVE, NULL); /* header */ @@ -1304,7 +1321,7 @@ static void mui_frame(void *data) static void mui_layout(mui_handle_t *mui) { float scale_factor; - int new_font_size; + int new_font_size, new_font_size2; unsigned width, height, new_header_height; video_driver_get_size(&width, &height); @@ -1319,11 +1336,12 @@ static void mui_layout(mui_handle_t *mui) new_header_height = scale_factor / 3; new_font_size = scale_factor / 9; + new_font_size2 = scale_factor / 12; mui->shadow_height = scale_factor / 36; mui->scrollbar_width = scale_factor / 36; mui->tabs_height = scale_factor / 3; - mui->line_height = scale_factor / 3; + mui->line_height = scale_factor / 2.5; mui->margin = scale_factor / 9; mui->icon_size = scale_factor / 3; @@ -1335,6 +1353,9 @@ static void mui_layout(mui_handle_t *mui) mui->font = menu_display_font(APPLICATION_SPECIAL_DIRECTORY_ASSETS_MATERIALUI_FONT, new_font_size); + mui->font2 = menu_display_font(APPLICATION_SPECIAL_DIRECTORY_ASSETS_MATERIALUI_FONT, + new_font_size2); + if (mui->font) /* calculate a more realistic ticker_limit */ { unsigned m_width = @@ -1380,7 +1401,8 @@ static void mui_free(void *data) if (!mui) return; - video_coord_array_free(&mui->list_block.carr); + video_coord_array_free(&mui->raster_block.carr); + video_coord_array_free(&mui->raster_block2.carr); font_driver_bind_block(NULL, NULL); }