diff --git a/menu/drivers/materialui.c b/menu/drivers/materialui.c index 1f4417c7cc..83fd874245 100644 --- a/menu/drivers/materialui.c +++ b/menu/drivers/materialui.c @@ -692,13 +692,13 @@ static void mui_render_label_value(mui_handle_t *mui, mui_node_t *node, ticker.str = label; ticker.selected = selected; - menu_animation_ctl(MENU_ANIMATION_CTL_TICKER, &ticker); + menu_animation_ticker(&ticker); ticker.s = value_str; ticker.len = value_len; ticker.str = value; - menu_animation_ctl(MENU_ANIMATION_CTL_TICKER, &ticker); + menu_animation_ticker(&ticker); if (menu_entry_get_sublabel(i, sublabel_str, sizeof(sublabel_str))) { @@ -1360,7 +1360,7 @@ static void mui_frame(void *data) ticker.str = title; ticker.selected = true; - menu_animation_ctl(MENU_ANIMATION_CTL_TICKER, &ticker); + menu_animation_ticker(&ticker); /* Title */ if (mui_get_core_title(title_msg, sizeof(title_msg)) == 0) @@ -1383,7 +1383,7 @@ static void mui_frame(void *data) ticker.str = title_buf_msg; ticker.selected = true; - menu_animation_ctl(MENU_ANIMATION_CTL_TICKER, &ticker); + menu_animation_ticker(&ticker); strlcpy(title_buf, title_buf_msg_tmp, sizeof(title_buf)); } diff --git a/menu/drivers/rgui.c b/menu/drivers/rgui.c index 863bf8a5ad..cba92b0771 100644 --- a/menu/drivers/rgui.c +++ b/menu/drivers/rgui.c @@ -507,7 +507,7 @@ static void rgui_render(void *data) ticker.str = title; ticker.selected = true; - menu_animation_ctl(MENU_ANIMATION_CTL_TICKER, &ticker); + menu_animation_ticker(&ticker); hover_color = HOVER_COLOR(settings); normal_color = NORMAL_COLOR(settings); @@ -599,13 +599,13 @@ static void rgui_render(void *data) ticker.str = entry_path; ticker.selected = entry_selected; - menu_animation_ctl(MENU_ANIMATION_CTL_TICKER, &ticker); + menu_animation_ticker(&ticker); ticker.s = type_str_buf; ticker.len = entry_spacing; ticker.str = entry_value; - menu_animation_ctl(MENU_ANIMATION_CTL_TICKER, &ticker); + menu_animation_ticker(&ticker); snprintf(message, sizeof(message), "%c %-*.*s %-*s", entry_selected ? '>' : ' ', diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 08979428d8..766be1e983 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -2213,7 +2213,7 @@ static void xmb_draw_items( ticker.str = ticker_str; ticker.selected = (i == current); - menu_animation_ctl(MENU_ANIMATION_CTL_TICKER, &ticker); + menu_animation_ticker(&ticker); label_offset = xmb->margins.label.top; if (i == current && width > 320 && height > 240 @@ -2244,7 +2244,7 @@ static void xmb_draw_items( ticker.str = entry_value; ticker.selected = (i == current); - menu_animation_ctl(MENU_ANIMATION_CTL_TICKER, &ticker); + menu_animation_ticker(&ticker); if (do_draw_text) xmb_draw_text(menu_disp_info, xmb, value, diff --git a/menu/drivers/zarch.c b/menu/drivers/zarch.c index 55b346c57e..1b19e0145c 100644 --- a/menu/drivers/zarch.c +++ b/menu/drivers/zarch.c @@ -350,7 +350,7 @@ static bool zarch_zui_list_item(zui_t *zui, struct zui_tabbed *tab, int x1, int ticker.str = label; ticker.selected = (bg == zui_bg_hilite || bg == zui_bg_pad_hilite); - menu_animation_ctl(MENU_ANIMATION_CTL_TICKER, &ticker); + menu_animation_ticker(&ticker); menu_display_push_quad(zui->width, zui->height, bg, x1, y1, x2, y2); zarch_zui_draw_text(zui, ZUI_FG_NORMAL, 12, y1 + 35, title_buf); diff --git a/menu/menu_animation.c b/menu/menu_animation.c index 385aa98d47..ede7979eb7 100644 --- a/menu/menu_animation.c +++ b/menu/menu_animation.c @@ -519,6 +519,45 @@ bool menu_animation_update(float delta_time) return true; } +bool menu_animation_ticker(const menu_animation_ctx_ticker_t *ticker) +{ + size_t str_len = utf8len(ticker->str); + size_t offset = 0; + + if ((size_t)str_len <= ticker->len) + { + utf8cpy(ticker->s, + PATH_MAX_LENGTH, + ticker->str, + ticker->len); + return true; + } + + if (!ticker->selected) + { + utf8cpy(ticker->s, PATH_MAX_LENGTH, ticker->str, ticker->len - 3); + strlcat(ticker->s, "...", PATH_MAX_LENGTH); + return true; + } + + if (str_len > ticker->len) + menu_animation_ticker_generic( + ticker->idx, + ticker->len, + &offset, + &str_len); + + utf8cpy( + ticker->s, + PATH_MAX_LENGTH, + utf8skip(ticker->str, offset), + str_len); + + animation_is_active = true; + + return true; +} + bool menu_animation_ctl(enum menu_animation_ctl_state state, void *data) { switch (state) @@ -629,45 +668,6 @@ bool menu_animation_ctl(enum menu_animation_ctl_state state, void *data) } } break; - case MENU_ANIMATION_CTL_TICKER: - { - menu_animation_ctx_ticker_t - *ticker = (menu_animation_ctx_ticker_t*)data; - size_t str_len = ticker ? utf8len(ticker->str) : 0; - size_t offset = 0; - - if ((size_t)str_len <= ticker->len) - { - utf8cpy(ticker->s, - PATH_MAX_LENGTH, - ticker->str, - ticker->len); - return true; - } - - if (!ticker->selected) - { - utf8cpy(ticker->s, PATH_MAX_LENGTH, ticker->str, ticker->len - 3); - strlcat(ticker->s, "...", PATH_MAX_LENGTH); - return true; - } - - if (str_len > ticker->len) - menu_animation_ticker_generic( - ticker->idx, - ticker->len, - &offset, - &str_len); - - utf8cpy( - ticker->s, - PATH_MAX_LENGTH, - utf8skip(ticker->str, offset), - str_len); - - animation_is_active = true; - } - break; case MENU_ANIMATION_CTL_IDEAL_DELTA_TIME_GET: { menu_animation_ctx_delta_t *delta = diff --git a/menu/menu_animation.h b/menu/menu_animation.h index 631e569f8e..cd5db94f31 100644 --- a/menu/menu_animation.h +++ b/menu/menu_animation.h @@ -39,7 +39,6 @@ enum menu_animation_ctl_state MENU_ANIMATION_CTL_UPDATE_TIME, MENU_ANIMATION_CTL_KILL_BY_TAG, MENU_ANIMATION_CTL_KILL_BY_SUBJECT, - MENU_ANIMATION_CTL_TICKER, MENU_ANIMATION_CTL_PUSH, MENU_ANIMATION_CTL_IDEAL_DELTA_TIME_GET }; @@ -128,6 +127,8 @@ typedef struct menu_animation_ctx_ticker bool menu_animation_update(float delta_time); +bool menu_animation_ticker(const menu_animation_ctx_ticker_t *ticker); + bool menu_animation_ctl(enum menu_animation_ctl_state state, void *data); RETRO_END_DECLS