(XMB+Ozone) Animation corrections (#15645)

This commit is contained in:
sonninnos 2023-08-25 23:02:19 +03:00 committed by GitHub
parent 2bb955fe19
commit 2623f8d085
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 327 additions and 247 deletions

View File

@ -61,11 +61,14 @@
#include "../../content.h"
#include "../../core_info.h"
#define ANIMATION_PUSH_ENTRY_DURATION 166
#define ANIMATION_CURSOR_DURATION 133
#define ANIMATION_CURSOR_PULSE 500
#define ANIMATION_PUSH_ENTRY_DURATION 166.66667f
#define ANIMATION_CURSOR_DURATION 166.66667f
#define ANIMATION_CURSOR_PULSE 166.66667f * 3
#define OZONE_THUMBNAIL_STREAM_DELAY 5 * 16.66667f
#define OZONE_THUMBNAIL_STREAM_DELAY 16.66667f * 5
#define OZONE_EASING_ALPHA EASING_OUT_CIRC
#define OZONE_EASING_XY EASING_OUT_QUAD
#define FONT_SIZE_FOOTER 18
#define FONT_SIZE_TITLE 36
@ -1523,7 +1526,7 @@ static void ozone_animate_cursor(ozone_handle_t *ozone,
int i;
gfx_animation_ctx_entry_t entry;
entry.easing_enum = EASING_OUT_QUAD;
entry.easing_enum = OZONE_EASING_XY;
entry.tag = (uintptr_t)&ozone_default_theme;
entry.duration = ANIMATION_CURSOR_PULSE;
entry.userdata = ozone;
@ -3740,7 +3743,7 @@ static void ozone_entries_update_thumbnail_bar(
ozone->flags &= ~OZONE_FLAG_IS_STATE_SLOT;
entry.duration = ANIMATION_CURSOR_DURATION;
entry.easing_enum = EASING_OUT_QUAD;
entry.easing_enum = OZONE_EASING_XY;
entry.tag = tag;
entry.subject = &ozone->animations.thumbnail_bar_position;
@ -3890,7 +3893,7 @@ static void ozone_sidebar_update_collapse(
bool collapse = false;
uintptr_t tag = (uintptr_t)&ozone->sidebar_collapsed;
entry.easing_enum = EASING_OUT_QUAD;
entry.easing_enum = OZONE_EASING_XY;
entry.tag = tag;
entry.userdata = ozone;
entry.duration = ANIMATION_CURSOR_DURATION;
@ -3994,7 +3997,7 @@ static void ozone_go_to_sidebar(
entry.cb = NULL;
entry.duration = ANIMATION_CURSOR_DURATION;
entry.easing_enum = EASING_OUT_QUAD;
entry.easing_enum = OZONE_EASING_ALPHA;
entry.subject = &ozone->animations.cursor_alpha;
entry.tag = tag;
entry.target_value = 1.0f;
@ -4291,7 +4294,7 @@ static void ozone_leave_sidebar(
entry.cb = NULL;
entry.duration = ANIMATION_CURSOR_DURATION;
entry.easing_enum = EASING_OUT_QUAD;
entry.easing_enum = OZONE_EASING_ALPHA;
entry.subject = &ozone->animations.cursor_alpha;
entry.tag = tag;
entry.target_value = 1.0f;
@ -4304,7 +4307,6 @@ static void ozone_leave_sidebar(
#ifdef HAVE_AUDIOMIXER
audio_driver_mixer_play_scroll_sound(true);
#endif
}
static void ozone_free_node(ozone_node_t *node)
@ -4564,7 +4566,7 @@ static void ozone_sidebar_goto(
entry.cb = NULL;
entry.duration = ANIMATION_CURSOR_DURATION;
entry.easing_enum = EASING_OUT_QUAD;
entry.easing_enum = OZONE_EASING_ALPHA;
entry.subject = &ozone->animations.cursor_alpha;
entry.tag = tag;
entry.target_value = 1.0f;
@ -4575,7 +4577,7 @@ static void ozone_sidebar_goto(
/* Scroll animation */
entry.cb = NULL;
entry.duration = ANIMATION_CURSOR_DURATION;
entry.easing_enum = EASING_OUT_QUAD;
entry.easing_enum = OZONE_EASING_XY;
entry.subject = &ozone->animations.scroll_y_sidebar;
entry.tag = tag;
entry.target_value = ozone_sidebar_get_scroll_y(ozone, video_info_height);
@ -5300,7 +5302,7 @@ static void ozone_update_scroll(
entry.cb = NULL;
entry.duration = ANIMATION_CURSOR_DURATION;
entry.easing_enum = EASING_OUT_QUAD;
entry.easing_enum = OZONE_EASING_ALPHA;
entry.subject = &ozone->animations.cursor_alpha;
entry.tag = tag;
entry.target_value = 1.0f;
@ -5311,7 +5313,7 @@ static void ozone_update_scroll(
/* Scroll animation */
entry.cb = NULL;
entry.duration = ANIMATION_CURSOR_DURATION;
entry.easing_enum = EASING_OUT_QUAD;
entry.easing_enum = OZONE_EASING_ALPHA;
entry.subject = &ozone->animations.scroll_y;
entry.tag = tag;
entry.target_value = new_scroll;
@ -5326,6 +5328,27 @@ static void ozone_update_scroll(
}
}
static unsigned ozone_get_sublabel_max_width(ozone_handle_t *ozone,
unsigned video_info_width,
unsigned entry_padding)
{
settings_t *settings = config_get_ptr();
float menu_scale_factor = settings->floats.menu_scale_factor;
unsigned sublabel_max_width = video_info_width - (menu_scale_factor * (entry_padding * 2));
if (ozone->depth == 1)
sublabel_max_width -= (unsigned) ozone->dimensions_sidebar_width;
if (ozone->show_thumbnail_bar)
{
if (ozone->is_quick_menu && menu_is_running_quick_menu())
sublabel_max_width -= ozone->dimensions.thumbnail_bar_width - entry_padding * 2;
else
sublabel_max_width -= ozone->dimensions.thumbnail_bar_width - entry_padding;
}
return sublabel_max_width;
}
static void ozone_compute_entries_position(
ozone_handle_t *ozone,
bool menu_show_sublabels,
@ -5397,21 +5420,10 @@ static void ozone_compute_entries_position(
{
if (!string_is_empty(entry.sublabel))
{
int sublabel_max_width;
unsigned sublabel_max_width = ozone_get_sublabel_max_width(ozone, video_info_width, entry_padding);
char wrapped_sublabel_str[MENU_SUBLABEL_MAX_LENGTH];
wrapped_sublabel_str[0] = '\0';
node->height += ozone->dimensions.entry_spacing + 40 * scale_factor;
sublabel_max_width = video_info_width
- entry_padding * 2
- ozone->dimensions.entry_icon_padding * 2;
if (ozone->depth == 1)
sublabel_max_width -= (unsigned) ozone->dimensions_sidebar_width;
if (ozone->show_thumbnail_bar)
sublabel_max_width -= ozone->dimensions.thumbnail_bar_width - entry_padding * 2;
(ozone->word_wrap)(wrapped_sublabel_str,
sizeof(wrapped_sublabel_str),
entry.sublabel,
@ -5421,6 +5433,7 @@ static void ozone_compute_entries_position(
0);
node->sublabel_lines = ozone_count_lines(wrapped_sublabel_str);
node->height += ozone->dimensions.entry_spacing + 40 * scale_factor;
if (node->sublabel_lines > 1)
{
@ -5642,7 +5655,6 @@ border_iterate:
{
char rich_label[255];
char entry_value_ticker[255];
char wrapped_sublabel_str[MENU_SUBLABEL_MAX_LENGTH];
uintptr_t texture;
menu_entry_t entry;
gfx_animation_ctx_ticker_t ticker;
@ -5750,17 +5762,8 @@ border_iterate:
{
if (node->wrap && !string_is_empty(sublabel_str))
{
int sublabel_max_width = video_info_width - entry_padding * 2 - ozone->dimensions.entry_icon_padding * 2;
if (ozone->depth == 1)
sublabel_max_width -= (unsigned)ozone->dimensions_sidebar_width;
if (ozone->show_thumbnail_bar)
{
if (ozone->is_quick_menu && menu_is_running_quick_menu())
sublabel_max_width -= ozone->dimensions.thumbnail_bar_width - entry_padding * 2;
else
sublabel_max_width -= ozone->dimensions.thumbnail_bar_width - entry_padding;
}
unsigned sublabel_max_width = ozone_get_sublabel_max_width(ozone, video_info_width, entry_padding);
char wrapped_sublabel_str[MENU_SUBLABEL_MAX_LENGTH];
wrapped_sublabel_str[0] = '\0';
(ozone->word_wrap)(wrapped_sublabel_str,
@ -5770,6 +5773,7 @@ border_iterate:
sublabel_max_width / ozone->fonts.entries_sublabel.glyph_width,
ozone->fonts.entries_sublabel.wideglyph_width,
0);
sublabel_str = wrapped_sublabel_str;
}
}
@ -6128,8 +6132,7 @@ static void ozone_draw_thumbnail_bar(
&& gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT);
show_left_thumbnail =
(ozone->thumbnails.left.status != GFX_THUMBNAIL_STATUS_MISSING)
&& gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT)
&& (!(ozone->flags2 & OZONE_FLAG2_SELECTION_CORE_IS_VIEWER));
&& gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT);
/* Special "viewer" mode for savestate thumbnails */
if ( ((ozone->flags & OZONE_FLAG_WANT_THUMBNAIL_BAR) && !string_is_empty(ozone->savestate_thumbnail_file_path))
@ -6163,7 +6166,7 @@ static void ozone_draw_thumbnail_bar(
* and no right thumbnail is available, show a centred
* message and return immediately */
if ( (ozone->flags2 & OZONE_FLAG2_SELECTION_CORE_IS_VIEWER)
&& (!show_right_thumbnail))
&& (!show_right_thumbnail && !show_left_thumbnail))
{
ozone_draw_no_thumbnail_available(
ozone,
@ -7001,11 +7004,11 @@ static void ozone_hide_fullscreen_thumbnails(ozone_handle_t *ozone, bool animate
gfx_animation_ctx_entry_t animation_entry;
/* Configure fade out animation */
animation_entry.easing_enum = EASING_OUT_QUAD;
animation_entry.tag = alpha_tag;
animation_entry.easing_enum = OZONE_EASING_ALPHA;
animation_entry.duration = gfx_thumb_get_ptr()->fade_duration;
animation_entry.target_value = 0.0f;
animation_entry.subject = &ozone->animations.fullscreen_thumbnail_alpha;
animation_entry.tag = alpha_tag;
animation_entry.target_value = 0.0f;
animation_entry.cb = NULL;
animation_entry.userdata = NULL;
@ -7050,7 +7053,8 @@ static void ozone_show_fullscreen_thumbnails(ozone_handle_t *ozone)
{
/* imageviewer content requires special treatment,
* since only the right thumbnail is ever loaded */
if (!gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT))
if ( !gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
&& !gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
return;
}
else
@ -7090,11 +7094,11 @@ static void ozone_show_fullscreen_thumbnails(ozone_handle_t *ozone)
ozone->fullscreen_thumbnail_label[0] = '\0';
/* Configure fade in animation */
animation_entry.easing_enum = EASING_OUT_QUAD;
animation_entry.tag = alpha_tag;
animation_entry.easing_enum = OZONE_EASING_ALPHA;
animation_entry.duration = gfx_thumb_get_ptr()->fade_duration;
animation_entry.target_value = 1.0f;
animation_entry.subject = &ozone->animations.fullscreen_thumbnail_alpha;
animation_entry.tag = alpha_tag;
animation_entry.target_value = 1.0f;
animation_entry.cb = NULL;
animation_entry.userdata = NULL;
@ -7848,10 +7852,10 @@ static void ozone_toggle_metadata_override(ozone_handle_t *ozone)
gfx_animation_kill_by_tag(&alpha_tag);
/* Set common animation parameters */
animation_entry.easing_enum = EASING_OUT_QUAD;
animation_entry.tag = alpha_tag;
animation_entry.easing_enum = OZONE_EASING_ALPHA;
animation_entry.duration = gfx_thumb_get_ptr()->fade_duration;
animation_entry.subject = &ozone->animations.left_thumbnail_alpha;
animation_entry.tag = alpha_tag;
animation_entry.cb = NULL;
animation_entry.userdata = NULL;
@ -8233,6 +8237,10 @@ static enum menu_action ozone_parse_menu_entry_action(
&& (ozone->flags & OZONE_FLAG_FULLSCREEN_THUMBNAILS_AVAILABLE)
&& (ozone->show_thumbnail_bar))
{
/* Allow launch if already using "imageviewer" core */
if (string_is_equal(runloop_state_get_ptr()->system.info.library_name, "image display"))
break;
if (ozone->flags2 & OZONE_FLAG2_SHOW_FULLSCREEN_THUMBNAILS)
ozone_hide_fullscreen_thumbnails(ozone, true);
else
@ -8870,12 +8878,18 @@ static void ozone_update_thumbnail_image(void *data)
/* Left thumbnail
* > Disabled for image (and video/music) content */
if ( (!(ozone->flags2 & OZONE_FLAG2_SELECTION_CORE_IS_VIEWER))
&& (gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT)))
if ( (!(ozone->flags2 & OZONE_FLAG2_SELECTION_CORE_IS_VIEWER))
&& (gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT)))
ozone->thumbnails.pending = (ozone->thumbnails.pending == OZONE_PENDING_THUMBNAIL_RIGHT)
? OZONE_PENDING_THUMBNAIL_BOTH
: OZONE_PENDING_THUMBNAIL_LEFT;
/* Use left thumbnail as imageviewer failsafe if right is not enabled */
if ( (ozone->flags2 & OZONE_FLAG2_SELECTION_CORE_IS_VIEWER)
&& ( gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
&& (!gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)))
ozone->thumbnails.pending = OZONE_PENDING_THUMBNAIL_LEFT;
show_thumbnail_bar = ozone->show_thumbnail_bar;
want_thumbnail_bar = (ozone->flags & OZONE_FLAG_WANT_THUMBNAIL_BAR) ? true : false;
if (show_thumbnail_bar != want_thumbnail_bar)
@ -8899,11 +8913,11 @@ static void ozone_refresh_thumbnail_image(void *data, unsigned i)
/* Only refresh thumbnails if thumbnails are enabled */
if ( ( gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
|| gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
|| gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
&& (ozone->flags & OZONE_FLAG_WANT_THUMBNAIL_BAR)
&& ( (ozone->is_quick_menu)
|| (ozone->flags & OZONE_FLAG_IS_PLAYLIST)
|| (ozone->flags & OZONE_FLAG_IS_EXPLORE_LIST)))
|| (ozone->flags & OZONE_FLAG_IS_PLAYLIST)
|| (ozone->flags & OZONE_FLAG_IS_EXPLORE_LIST)))
ozone_update_thumbnail_image(ozone);
}
@ -9035,6 +9049,8 @@ static void ozone_set_layout(
settings_t *settings = config_get_ptr();
bool font_inited = false;
float scale_factor = ozone->last_scale_factor;
float font_min_size = 9.0f;
float font_size = font_min_size;
/* Calculate dimensions */
ozone->dimensions.header_height = HEADER_HEIGHT * scale_factor;
@ -9136,28 +9152,53 @@ static void ozone_set_layout(
break;
}
font_inited = ozone_init_font(&ozone->fonts.footer,
is_threaded, font_path, FONT_SIZE_FOOTER * scale_factor);
if (!(((ozone->flags & OZONE_FLAG_HAS_ALL_ASSETS) > 0) && font_inited))
ozone->flags &= ~OZONE_FLAG_HAS_ALL_ASSETS;
font_inited = ozone_init_font(&ozone->fonts.time,
is_threaded, font_path, FONT_SIZE_TIME * scale_factor);
if (!(((ozone->flags & OZONE_FLAG_HAS_ALL_ASSETS) > 0) && font_inited))
ozone->flags &= ~OZONE_FLAG_HAS_ALL_ASSETS;
font_inited = ozone_init_font(&ozone->fonts.entries_label,
is_threaded, font_path, FONT_SIZE_ENTRIES_LABEL * scale_factor);
if (!(((ozone->flags & OZONE_FLAG_HAS_ALL_ASSETS) > 0) && font_inited))
ozone->flags &= ~OZONE_FLAG_HAS_ALL_ASSETS;
font_inited = ozone_init_font(&ozone->fonts.entries_sublabel,
is_threaded, font_path, FONT_SIZE_ENTRIES_SUBLABEL * scale_factor);
if (!(((ozone->flags & OZONE_FLAG_HAS_ALL_ASSETS) > 0) && font_inited))
ozone->flags &= ~OZONE_FLAG_HAS_ALL_ASSETS;
/* Sidebar */
font_size = FONT_SIZE_SIDEBAR * scale_factor;
if (font_size < font_min_size)
font_size = font_min_size;
font_inited = ozone_init_font(&ozone->fonts.sidebar,
is_threaded, font_path, FONT_SIZE_SIDEBAR * scale_factor);
is_threaded, font_path, font_size);
if (!(((ozone->flags & OZONE_FLAG_HAS_ALL_ASSETS) > 0) && font_inited))
ozone->flags &= ~OZONE_FLAG_HAS_ALL_ASSETS;
/* Entries */
font_size = FONT_SIZE_ENTRIES_LABEL * scale_factor;
if (font_size < font_min_size)
font_size = font_min_size;
font_inited = ozone_init_font(&ozone->fonts.entries_label,
is_threaded, font_path, font_size);
if (!(((ozone->flags & OZONE_FLAG_HAS_ALL_ASSETS) > 0) && font_inited))
ozone->flags &= ~OZONE_FLAG_HAS_ALL_ASSETS;
/* Sublabels */
font_size = FONT_SIZE_ENTRIES_SUBLABEL * scale_factor;
if (font_size < font_min_size - 2)
font_size = font_min_size - 2;
font_inited = ozone_init_font(&ozone->fonts.entries_sublabel,
is_threaded, font_path, font_size);
if (!(((ozone->flags & OZONE_FLAG_HAS_ALL_ASSETS) > 0) && font_inited))
ozone->flags &= ~OZONE_FLAG_HAS_ALL_ASSETS;
/* Time */
font_size = FONT_SIZE_TIME * scale_factor;
if (font_size < font_min_size - 2)
font_size = font_min_size - 2;
font_inited = ozone_init_font(&ozone->fonts.time,
is_threaded, font_path, font_size);
if (!(((ozone->flags & OZONE_FLAG_HAS_ALL_ASSETS) > 0) && font_inited))
ozone->flags &= ~OZONE_FLAG_HAS_ALL_ASSETS;
/* Footer */
font_size = FONT_SIZE_FOOTER * scale_factor;
if (font_size < font_min_size - 2)
font_size = font_min_size - 2;
font_inited = ozone_init_font(&ozone->fonts.footer,
is_threaded, font_path, font_size);
if (!(((ozone->flags & OZONE_FLAG_HAS_ALL_ASSETS) > 0) && font_inited))
ozone->flags &= ~OZONE_FLAG_HAS_ALL_ASSETS;
@ -11591,7 +11632,7 @@ static void ozone_frame(void *data, video_frame_info_t *video_info)
entry.cb = NULL;
entry.duration = ANIMATION_PUSH_ENTRY_DURATION;
entry.easing_enum = EASING_OUT_QUAD;
entry.easing_enum = OZONE_EASING_ALPHA;
entry.subject = &ozone->animations.messagebox_alpha;
entry.tag = messagebox_tag;
entry.target_value = 1.0f;
@ -11614,7 +11655,7 @@ static void ozone_frame(void *data, video_frame_info_t *video_info)
entry.cb = ozone_messagebox_fadeout_cb;
entry.duration = ANIMATION_PUSH_ENTRY_DURATION;
entry.easing_enum = EASING_OUT_QUAD;
entry.easing_enum = OZONE_EASING_ALPHA;
entry.subject = &ozone->animations.messagebox_alpha;
entry.tag = messagebox_tag;
entry.target_value = 0.0f;
@ -11731,24 +11772,6 @@ static void ozone_list_open(
ozone->flags |= (OZONE_FLAG_DRAW_OLD_LIST);
/* Left/right animation */
if (animate)
{
ozone->animations.list_alpha = 0.0f;
entry.cb = ozone_animation_end;
entry.duration = ANIMATION_PUSH_ENTRY_DURATION;
entry.easing_enum = EASING_OUT_QUAD;
entry.subject = &ozone->animations.list_alpha;
entry.tag = (uintptr_t)NULL;
entry.target_value = 1.0f;
entry.userdata = ozone;
gfx_animation_push(&entry);
}
else
ozone->animations.list_alpha = 1.0f;
/* Sidebar animation */
ozone_sidebar_update_collapse(ozone, ozone_collapse_sidebar, animate);
@ -11769,13 +11792,17 @@ static void ozone_list_open(
{
entry.cb = NULL;
entry.duration = ANIMATION_PUSH_ENTRY_DURATION;
entry.easing_enum = EASING_OUT_QUAD;
entry.easing_enum = OZONE_EASING_XY;
entry.subject = &ozone->sidebar_offset;
entry.tag = sidebar_tag;
entry.target_value = 0.0f;
entry.userdata = NULL;
gfx_animation_push(&entry);
/* Skip "left/right" animation if animating already */
if (ozone->sidebar_offset != entry.target_value)
animate = false;
}
else
ozone->sidebar_offset = 0.0f;
@ -11788,17 +11815,39 @@ static void ozone_list_open(
entry.cb = ozone_collapse_end;
entry.duration = ANIMATION_PUSH_ENTRY_DURATION;
entry.easing_enum = EASING_OUT_QUAD;
entry.easing_enum = OZONE_EASING_XY;
entry.subject = &ozone->sidebar_offset;
entry.tag = sidebar_tag;
entry.target_value = -ozone->dimensions_sidebar_width;
entry.userdata = (void*)ozone;
entry.userdata = ozone;
gfx_animation_push(&entry);
/* Skip "left/right" animation if animating already */
if (ozone->sidebar_offset != entry.target_value)
animate = false;
}
else
ozone->sidebar_offset = -ozone->dimensions_sidebar_width;
}
/* Left/right animation */
if (animate)
{
ozone->animations.list_alpha = 0.0f;
entry.cb = ozone_animation_end;
entry.duration = ANIMATION_PUSH_ENTRY_DURATION;
entry.easing_enum = OZONE_EASING_ALPHA;
entry.subject = &ozone->animations.list_alpha;
entry.tag = (uintptr_t)NULL;
entry.target_value = 1.0f;
entry.userdata = ozone;
gfx_animation_push(&entry);
}
else
ozone->animations.list_alpha = 1.0f;
}
static void ozone_populate_entries(
@ -12082,8 +12131,6 @@ static void ozone_populate_entries(
ozone->flags &= ~OZONE_FLAG_FULLSCREEN_THUMBNAILS_AVAILABLE;
}
/* TODO: Fancy toggle animation */
static void ozone_toggle(void *userdata, bool menu_on)
{
settings_t *settings = NULL;

View File

@ -70,11 +70,12 @@
#define XMB_TAB_MAX_LENGTH 255
#ifndef XMB_DELAY
#define XMB_DELAY 166.66667f
#endif
#define XMB_THUMBNAIL_STREAM_DELAY 5 * 16.66667f
#define XMB_THUMBNAIL_STREAM_DELAY 16.66667f * 5
#define XMB_EASING_ALPHA EASING_OUT_CIRC
#define XMB_EASING_XY EASING_OUT_QUAD
/* Specifies minimum period (in usec) between
* tab switch events when input repeat is
@ -1515,6 +1516,12 @@ static void xmb_selection_pointer_changed(
menu_list_t *menu_list = menu_st->entries.list;
file_list_t *selection_buf = MENU_LIST_GET_SELECTION(menu_list, 0);
size_t selection = menu_st->selection_ptr;
settings_t *settings = config_get_ptr();
unsigned menu_xmb_animation_move_up_down
= settings->uints.menu_xmb_animation_move_up_down;
if (menu_xmb_animation_move_up_down > 1)
allow_animations = false;
if (!xmb)
return;
@ -1638,9 +1645,9 @@ static void xmb_selection_pointer_changed(
xmb_update_savestate_thumbnail_image(xmb);
}
if ( (!allow_animations)
|| (real_iy < -threshold
|| real_iy > height+threshold))
if ( !allow_animations
|| real_iy < -threshold
|| real_iy > height + threshold)
{
node->alpha = node->label_alpha = ia;
node->y = iy;
@ -1648,9 +1655,6 @@ static void xmb_selection_pointer_changed(
}
else
{
settings_t *settings = config_get_ptr();
unsigned menu_xmb_animation_move_up_down = settings->uints.menu_xmb_animation_move_up_down;
/* Move up/down animation */
gfx_animation_ctx_entry_t anim_entry;
@ -1694,8 +1698,10 @@ static void xmb_list_open_old(xmb_handle_t *xmb,
file_list_t *list, int dir, size_t current)
{
unsigned i, height;
int threshold = xmb->icon_size * 10;
size_t end = list ? list->size : 0;
int threshold = xmb->icon_size * 10;
size_t end = list ? list->size : 0;
settings_t *settings = config_get_ptr();
bool menu_horizontal_animation = settings->bools.menu_horizontal_animation;
video_driver_get_size(NULL, &height);
@ -1715,7 +1721,9 @@ static void xmb_list_open_old(xmb_handle_t *xmb,
real_y = node->y + xmb->margins_screen_top;
if (real_y < -threshold || real_y > height + threshold)
if ( !menu_horizontal_animation
|| real_y < -threshold
|| real_y > height + threshold)
{
node->alpha = ia;
node->label_alpha = 0;
@ -1725,10 +1733,12 @@ static void xmb_list_open_old(xmb_handle_t *xmb,
{
gfx_animation_ctx_entry_t anim_entry;
node->alpha /= 5;
anim_entry.duration = XMB_DELAY;
anim_entry.target_value = ia;
anim_entry.subject = &node->alpha;
anim_entry.easing_enum = EASING_OUT_QUAD;
anim_entry.easing_enum = XMB_EASING_ALPHA;
anim_entry.tag = (uintptr_t)list;
anim_entry.cb = NULL;
@ -1741,6 +1751,7 @@ static void xmb_list_open_old(xmb_handle_t *xmb,
anim_entry.target_value = xmb->icon_size * dir * -2;
anim_entry.subject = &node->x;
anim_entry.easing_enum = XMB_EASING_XY;
gfx_animation_push(&anim_entry);
}
@ -1756,9 +1767,8 @@ static void xmb_list_open_new(xmb_handle_t *xmb,
size_t end = list ? list->size : 0;
settings_t *settings = config_get_ptr();
struct menu_state *menu_st = menu_state_get_ptr();
bool savestate_thumbnail_enable = settings
? settings->bools.savestate_thumbnail_enable
: false;
bool menu_horizontal_animation = settings->bools.menu_horizontal_animation;
bool savestate_thumbnail_enable = settings->bools.savestate_thumbnail_enable;
video_driver_get_size(NULL, &height);
@ -1797,7 +1807,9 @@ static void xmb_list_open_new(xmb_handle_t *xmb,
else
ia = xmb->items_passive_alpha;
if (real_y < -threshold || real_y > height+threshold)
if ( !menu_horizontal_animation
|| real_y < -threshold
|| real_y > height + threshold)
{
node->alpha = node->label_alpha = ia;
node->x = 0;
@ -1806,10 +1818,12 @@ static void xmb_list_open_new(xmb_handle_t *xmb,
{
gfx_animation_ctx_entry_t anim_entry;
node->alpha /= 5;
anim_entry.duration = XMB_DELAY;
anim_entry.target_value = ia;
anim_entry.subject = &node->alpha;
anim_entry.easing_enum = EASING_OUT_QUAD;
anim_entry.easing_enum = XMB_EASING_ALPHA;
anim_entry.tag = (uintptr_t)list;
anim_entry.cb = NULL;
@ -1821,6 +1835,7 @@ static void xmb_list_open_new(xmb_handle_t *xmb,
anim_entry.target_value = 0;
anim_entry.subject = &node->x;
anim_entry.easing_enum = XMB_EASING_XY;
gfx_animation_push(&anim_entry);
}
@ -1851,6 +1866,7 @@ static void xmb_list_open_new(xmb_handle_t *xmb,
{
/* This shows savestate thumbnail after
* opening savestate submenu */
xmb->skip_thumbnail_reset = false;
xmb_update_savestate_thumbnail_path(xmb, (unsigned)current);
xmb_update_savestate_thumbnail_image(xmb);
}
@ -1896,11 +1912,22 @@ static void xmb_push_animations(xmb_node_t *node,
uintptr_t tag, float ia, float ix)
{
gfx_animation_ctx_entry_t anim_entry;
settings_t *settings = config_get_ptr();
bool menu_horizontal_animation = settings->bools.menu_horizontal_animation;
if (!menu_horizontal_animation)
{
node->alpha = node->label_alpha = ia;
node->x = ix;
return;
}
node->alpha /= 5;
anim_entry.duration = XMB_DELAY;
anim_entry.target_value = ia;
anim_entry.subject = &node->alpha;
anim_entry.easing_enum = EASING_OUT_QUAD;
anim_entry.easing_enum = XMB_EASING_ALPHA;
anim_entry.tag = tag;
anim_entry.cb = NULL;
@ -1912,6 +1939,7 @@ static void xmb_push_animations(xmb_node_t *node,
anim_entry.target_value = ix;
anim_entry.subject = &node->x;
anim_entry.easing_enum = XMB_EASING_XY;
gfx_animation_push(&anim_entry);
}
@ -2071,11 +2099,12 @@ static xmb_node_t* xmb_get_node(xmb_handle_t *xmb, unsigned i)
static void xmb_list_switch_horizontal_list(xmb_handle_t *xmb)
{
unsigned j;
settings_t *settings = config_get_ptr();
size_t list_size = xmb_list_get_size(xmb, MENU_LIST_HORIZONTAL)
+ xmb->system_tab_end;
settings_t *settings = config_get_ptr();
size_t list_size = xmb_list_get_size(xmb, MENU_LIST_HORIZONTAL)
+ xmb->system_tab_end;
bool menu_horizontal_animation = settings->bools.menu_horizontal_animation;
unsigned xmb_animation_horizontal_highlight =
settings->uints.menu_xmb_animation_horizontal_highlight;
settings->uints.menu_xmb_animation_horizontal_highlight;
for (j = 0; j <= list_size; j++)
{
@ -2093,11 +2122,15 @@ static void xmb_list_switch_horizontal_list(xmb_handle_t *xmb)
iz = xmb->categories_active_zoom;
}
if (!xmb->allow_horizontal_animation)
return;
/* Horizontal icon animation */
if ( !xmb->allow_horizontal_animation
|| !menu_horizontal_animation)
{
node->alpha = ia;
node->zoom = iz;
continue;
}
/* Horizontal icon highlight animation */
entry.target_value = ia;
entry.subject = &node->alpha;
/* TODO/FIXME - integer conversion resulted in change of sign */
@ -2179,17 +2212,26 @@ static void xmb_list_switch(xmb_handle_t *xmb)
xmb_list_switch_horizontal_list(xmb);
anim_entry.duration = XMB_DELAY;
anim_entry.target_value = xmb->icon_spacing_horizontal
* -(float)xmb->categories_selection_ptr;
anim_entry.subject = &xmb->categories_x_pos;
anim_entry.easing_enum = EASING_OUT_QUAD;
/* TODO/FIXME - integer conversion resulted in change of sign */
anim_entry.tag = -1;
anim_entry.cb = NULL;
/* Horizontal tab icon scroll */
if (menu_horizontal_animation)
{
anim_entry.duration = XMB_DELAY;
anim_entry.target_value = xmb->icon_spacing_horizontal
* -(float)xmb->categories_selection_ptr;
anim_entry.subject = &xmb->categories_x_pos;
anim_entry.easing_enum = XMB_EASING_XY;
/* TODO/FIXME - integer conversion resulted in change of sign */
anim_entry.tag = -1;
anim_entry.cb = NULL;
if (anim_entry.subject)
gfx_animation_push(&anim_entry);
if (anim_entry.subject)
gfx_animation_push(&anim_entry);
}
else
{
xmb->categories_x_pos = xmb->icon_spacing_horizontal
* -(float)xmb->categories_selection_ptr;
}
dir = -1;
if ( xmb->categories_selection_ptr
@ -2218,7 +2260,7 @@ static void xmb_list_switch(xmb_handle_t *xmb)
}
}
static void xmb_list_open_horizontal_list(xmb_handle_t *xmb)
static void xmb_list_open_horizontal_list(xmb_handle_t *xmb, bool animate)
{
unsigned j;
size_t list_size = xmb_list_get_size(xmb, MENU_LIST_HORIZONTAL)
@ -2238,16 +2280,21 @@ static void xmb_list_open_horizontal_list(xmb_handle_t *xmb)
else if (xmb->depth <= 1)
ia = xmb->categories_passive_alpha;
anim_entry.duration = XMB_DELAY;
anim_entry.target_value = ia;
anim_entry.subject = &node->alpha;
anim_entry.easing_enum = EASING_OUT_QUAD;
/* TODO/FIXME - integer conversion resulted in change of sign */
anim_entry.tag = -1;
anim_entry.cb = NULL;
if (animate)
{
anim_entry.duration = XMB_DELAY;
anim_entry.target_value = ia;
anim_entry.subject = &node->alpha;
anim_entry.easing_enum = XMB_EASING_ALPHA;
/* TODO/FIXME - integer conversion resulted in change of sign */
anim_entry.tag = -1;
anim_entry.cb = NULL;
if (anim_entry.subject)
gfx_animation_push(&anim_entry);
if (anim_entry.subject)
gfx_animation_push(&anim_entry);
}
else
node->alpha = ia;
}
}
@ -2449,13 +2496,13 @@ static void xmb_context_reset_horizontal_list(
len = fill_pathname_base(
sysname, path, sizeof(sysname));
/* Manually strip the extension (and dot) from sysname */
sysname[len-4] =
sysname[len-3] =
sysname[len-2] =
sysname[len-1] = '\0';
sysname[len-4] =
sysname[len-3] =
sysname[len-2] =
sysname[len-1] = '\0';
len = fill_pathname_join_special(
texturepath, iconpath, sysname,
sizeof(texturepath));
texturepath, iconpath, sysname,
sizeof(texturepath));
texturepath[ len] = '.';
texturepath[++len] = 'p';
texturepath[++len] = 'n';
@ -2463,16 +2510,15 @@ static void xmb_context_reset_horizontal_list(
texturepath[++len] = '\0';
/* If the playlist icon doesn't exist return default */
if (!path_is_valid(texturepath))
{
len = fill_pathname_join_special(texturepath, iconpath, "default",
sizeof(texturepath));
texturepath[ len] = '.';
texturepath[++len] = 'p';
texturepath[++len] = 'n';
texturepath[++len] = 'g';
texturepath[++len] = '\0';
len = fill_pathname_join_special(texturepath, iconpath, "default",
sizeof(texturepath));
texturepath[ len] = '.';
texturepath[++len] = 'p';
texturepath[++len] = 'n';
texturepath[++len] = 'g';
texturepath[++len] = '\0';
}
ti.width = 0;
@ -2593,15 +2639,15 @@ static void xmb_list_open(xmb_handle_t *xmb)
{
gfx_animation_ctx_entry_t entry;
settings_t *settings = config_get_ptr();
unsigned
menu_xmb_animation_opening_main_menu =
settings->uints.menu_xmb_animation_opening_main_menu;
int dir = 0;
struct menu_state *menu_st = menu_state_get_ptr();
menu_list_t *menu_list = menu_st->entries.list;
file_list_t *selection_buf = MENU_LIST_GET_SELECTION(menu_list, 0);
size_t selection = menu_st->selection_ptr;
settings_t *settings = config_get_ptr();
bool menu_horizontal_animation = settings->bools.menu_horizontal_animation;
unsigned menu_xmb_animation_opening_main_menu =
settings->uints.menu_xmb_animation_opening_main_menu;
struct menu_state *menu_st = menu_state_get_ptr();
menu_list_t *menu_list = menu_st->entries.list;
file_list_t *selection_buf = MENU_LIST_GET_SELECTION(menu_list, 0);
size_t selection = menu_st->selection_ptr;
int dir = 0;
xmb->depth = (int)
xmb_list_get_size(xmb, MENU_LIST_PLAIN);
@ -2613,7 +2659,7 @@ static void xmb_list_open(xmb_handle_t *xmb)
else
return; /* If menu hasn't changed, do nothing */
xmb_list_open_horizontal_list(xmb);
xmb_list_open_horizontal_list(xmb, menu_horizontal_animation);
xmb_list_open_old(xmb, &xmb->selection_buf_old,
dir, xmb->selection_ptr_old);
@ -2622,8 +2668,7 @@ static void xmb_list_open(xmb_handle_t *xmb)
dir, selection);
/* Main Menu opening animation */
entry.target_value = xmb->icon_size * -(xmb->depth*2-2);
entry.target_value = xmb->icon_size * -(xmb->depth * 2 - 2);
entry.subject = &xmb->x;
/* TODO/FIXME - integer conversion resulted in change of sign */
entry.tag = -1;
@ -2652,12 +2697,20 @@ static void xmb_list_open(xmb_handle_t *xmb)
if ( xmb->depth == 1
|| xmb->depth == 2)
{
gfx_animation_push(&entry);
if (menu_horizontal_animation)
{
gfx_animation_push(&entry);
entry.target_value = xmb->depth - 1;
entry.subject = &xmb->textures_arrow_alpha;
entry.target_value = xmb->depth - 1;
entry.subject = &xmb->textures_arrow_alpha;
gfx_animation_push(&entry);
gfx_animation_push(&entry);
}
else
{
xmb->x = xmb->icon_size * -(xmb->depth * 2 - 2);
xmb->textures_arrow_alpha = xmb->depth - 1;
}
}
xmb->old_depth = xmb->depth;
@ -3866,7 +3919,7 @@ static int xmb_draw_item(
if (menu_xmb_vertical_fade_factor)
{
float min_alpha = 0.1f;
float min_alpha = 0.01f;
float max_alpha = (i == current)
? xmb->items_active_alpha
: xmb->items_passive_alpha;
@ -3877,7 +3930,7 @@ static int xmb_draw_item(
float factor = menu_xmb_vertical_fade_factor / 100.0f / icon_ratio;
if (!xmb->use_ps3_layout)
scr_margin -= (xmb->margins_screen_top / 10);
scr_margin -= (icon_space / 8);
/* Top */
if (i < current)
@ -3892,8 +3945,8 @@ static int xmb_draw_item(
if (new_alpha > max_alpha)
new_alpha = max_alpha;
/* Horizontal animation requires breathing room on x-axis */
if (node->x > (-icon_space * 2) && node->x < (icon_space * 2))
/* Avoid adjusting animating rows */
if (new_alpha < node->alpha || node->x == 0)
node->alpha = node->label_alpha = new_alpha;
}
@ -4289,11 +4342,6 @@ static void xmb_draw_items(
if (list == &xmb->selection_buf_old)
{
xmb_node_t *node = (xmb_node_t*)list->list[current].userdata;
if (node && (uint8_t)(255 * node->alpha) == 0)
return;
/* Draw only current item for "back" icon */
first = (unsigned)current;
last = (unsigned)current;
@ -4389,13 +4437,11 @@ static void xmb_hide_fullscreen_thumbnails(
gfx_animation_ctx_entry_t animation_entry;
/* Configure fade out animation */
animation_entry.easing_enum = EASING_OUT_QUAD;
animation_entry.easing_enum = XMB_EASING_ALPHA;
animation_entry.tag = alpha_tag;
animation_entry.duration =
gfx_thumb_get_ptr()->fade_duration;
animation_entry.duration = gfx_thumb_get_ptr()->fade_duration;
animation_entry.target_value = 0.0f;
animation_entry.subject =
&xmb->fullscreen_thumbnail_alpha;
animation_entry.subject = &xmb->fullscreen_thumbnail_alpha;
animation_entry.cb = NULL;
animation_entry.userdata = NULL;
@ -4489,7 +4535,7 @@ static void xmb_show_fullscreen_thumbnails(
if (animate)
{
/* Configure fade in animation */
animation_entry.easing_enum = EASING_OUT_QUAD;
animation_entry.easing_enum = XMB_EASING_ALPHA;
animation_entry.tag = alpha_tag;
animation_entry.duration = gfx_thumb_get_ptr()->fade_duration;
animation_entry.target_value = 1.0f;
@ -4575,22 +4621,24 @@ static enum menu_action xmb_parse_menu_entry_action(
* > This is always true when scroll
* acceleration is greater than zero */
size_t scroll_accel = menu_st->scroll.acceleration;
#ifdef HAVE_AUDIOMIXER
settings_t *settings = config_get_ptr();
size_t category = xmb->categories_selection_ptr;
size_t list_size = xmb_list_get_size(xmb, MENU_LIST_HORIZONTAL) + xmb->system_tab_end;
/* We only want the scrolling sound to play if any of the following are true:
* 1. Wraparound is enabled (since the category is guaranteed to change)
* 2. We're scrolling right, but we aren't on the last category
* 3. We're scrolling left, but we aren't on the first category */
bool fail_condition = ((action == MENU_ACTION_RIGHT)
? (category == list_size)
: (category == 0)) && !(settings->bools.menu_navigation_wraparound_enable);
if (((current_time - xmb->last_tab_switch_time) >= XMB_TAB_SWITCH_REPEAT_DELAY ||
scroll_accel <= 0) && !fail_condition)
audio_driver_mixer_play_scroll_sound(action == MENU_ACTION_RIGHT);
#ifdef HAVE_AUDIOMIXER
settings_t *settings = config_get_ptr();
size_t category = xmb->categories_selection_ptr;
size_t list_size = xmb_list_get_size(xmb, MENU_LIST_HORIZONTAL) + xmb->system_tab_end;
/* We only want the scrolling sound to play if any of the following are true:
* 1. Wraparound is enabled (since the category is guaranteed to change)
* 2. We're scrolling right, but we aren't on the last category
* 3. We're scrolling left, but we aren't on the first category */
bool fail_condition = ((action == MENU_ACTION_RIGHT)
? (category == list_size)
: (category == 0)) && !(settings->bools.menu_navigation_wraparound_enable);
if ( ((current_time - xmb->last_tab_switch_time) >= XMB_TAB_SWITCH_REPEAT_DELAY || scroll_accel <= 0)
&& !fail_condition)
audio_driver_mixer_play_scroll_sound(action == MENU_ACTION_RIGHT);
#endif
if (scroll_accel > 0)
{
/* Ignore input action if tab switch period
@ -4663,6 +4711,10 @@ static enum menu_action xmb_parse_menu_entry_action(
&& xmb_fullscreen_thumbnails_available(xmb, menu_st)
&& xmb_get_system_tab(xmb, (unsigned)xmb->categories_selection_ptr) == XMB_SYSTEM_TAB_MAIN)
{
/* Allow launch if already using "imageviewer" core */
if (string_is_equal(runloop_state_get_ptr()->system.info.library_name, "image display"))
break;
if (xmb->show_fullscreen_thumbnails)
xmb_hide_fullscreen_thumbnails(xmb, true);
else
@ -5969,7 +6021,7 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
/* Left thumbnail, left side */
if (show_left_thumbnail)
{
float y_offset = ((xmb->depth != 1) ? 1.2f : 0.0f) * xmb->icon_size;
float y_offset = xmb->icon_size * 1.2f;
float thumb_width = left_thumbnail_margin_width;
float thumb_height = thumbnail_margin_height_under - xmb->margins_title_bottom - y_offset;
float scaled_thumb_width = thumb_width * thumbnail_scale_factor;
@ -6184,8 +6236,7 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
if (dispctx && dispctx->blend_begin)
dispctx->blend_begin(userdata);
/* Horizontal tab icons only needed on root depth */
if (!xmb->assets_missing && xmb->depth == 1)
if (!xmb->assets_missing)
{
for (i = 0; i <= xmb_list_get_size(xmb, MENU_LIST_HORIZONTAL)
+ xmb->system_tab_end; i++)
@ -6444,7 +6495,7 @@ static void xmb_layout_ps3(xmb_handle_t *xmb, int width)
xmb->icon_spacing_horizontal = 200.0 * scale_factor;
xmb->icon_spacing_vertical = 64.0 * scale_factor;
xmb->margins_screen_top = (256 + 32) * scale_factor;
xmb->margins_screen_top = (256 + 16) * scale_factor;
xmb->margins_screen_left = 336.0 * scale_factor;
xmb->margins_title_left = (margins_title * scale_factor) + (4 * scale_factor) + (margins_title_h_offset * scale_factor);
@ -6464,7 +6515,7 @@ static void xmb_layout_psp(xmb_handle_t *xmb, int width)
float scale_factor = xmb->last_scale_factor;
float margins_title = xmb->margins_title;
float margins_title_h_offset = xmb->margins_title_horizontal_offset;
unsigned new_font_size = 28.0 * scale_factor;
unsigned new_font_size = 24.0 * scale_factor;
xmb->above_subitem_offset = 1.5;
xmb->above_item_offset = -1.0;
@ -6497,9 +6548,9 @@ static void xmb_layout_psp(xmb_handle_t *xmb, int width)
xmb->cursor_size = 64.0 * scale_factor;
xmb->icon_size = 128.0 * scale_factor;
xmb->icon_spacing_horizontal = 250.0 * scale_factor;
xmb->icon_spacing_vertical = 108.0 * scale_factor;
xmb->icon_spacing_vertical = 96.0 * scale_factor;
xmb->margins_screen_top = (256 + 32) * scale_factor;
xmb->margins_screen_top = (256 + 16) * scale_factor;
xmb->margins_screen_left = 136.0 * scale_factor;
xmb->margins_title_left = (margins_title * scale_factor) + (4 * scale_factor) + (margins_title_h_offset * scale_factor);
@ -6704,7 +6755,7 @@ static void *xmb_init(void **userdata, bool video_is_threaded)
xmb->textures_arrow_alpha = 0;
xmb->depth = 1;
xmb->old_depth = 1;
xmb->alpha = 0;
xmb->alpha = 1.0f;
xmb->system_tab_end = 0;
xmb->tabs[xmb->system_tab_end] = XMB_SYSTEM_TAB_MAIN;
@ -7574,14 +7625,13 @@ static void xmb_list_cache(void *data, enum menu_list_type type, unsigned action
file_list_t *selection_buf = MENU_LIST_GET_SELECTION(menu_list, 0);
size_t selection = menu_st->selection_ptr;
settings_t *settings = config_get_ptr();
bool menu_horizontal_animation = settings->bools.menu_horizontal_animation;
if (!xmb)
return;
/* Check whether to enable the horizontal animation. */
if ( menu_horizontal_animation
&& xmb->allow_horizontal_animation)
/* Check whether to enable the horizontal animation.
* Deep copy required for 'previous' icon. */
if (xmb->allow_horizontal_animation)
{
unsigned first = 0, last = 0;
unsigned height = 0;
@ -7604,7 +7654,7 @@ static void xmb_list_cache(void *data, enum menu_list_type type, unsigned action
first = 0;
}
else
xmb->selection_ptr_old = 0;
xmb->selection_ptr_old = selection;
list_size = xmb_list_get_size(xmb, MENU_LIST_HORIZONTAL)
+ xmb->system_tab_end;
@ -7763,21 +7813,12 @@ static void xmb_context_destroy(void *data)
static void xmb_toggle(void *userdata, bool menu_on)
{
gfx_animation_ctx_entry_t entry;
bool tmp = false;
xmb_handle_t *xmb = (xmb_handle_t*)userdata;
struct menu_state *menu_st = menu_state_get_ptr();
if (!xmb)
if (!xmb || !menu_on)
return;
xmb->depth = (int)xmb_list_get_size(xmb, MENU_LIST_PLAIN);
if (!menu_on)
{
xmb->alpha = 0;
return;
}
/* Have to reset this, otherwise savestate
* thumbnail won't update after selecting
* 'save state' option */
@ -7789,22 +7830,10 @@ static void xmb_toggle(void *userdata, bool menu_on)
xmb->fullscreen_thumbnails_available = false;
}
entry.duration = XMB_DELAY * 2;
entry.target_value = 1.0f;
entry.subject = &xmb->alpha;
entry.easing_enum = EASING_OUT_QUAD;
/* TODO/FIXME - integer conversion resulted in change of sign */
entry.tag = -1;
entry.cb = NULL;
gfx_animation_push(&entry);
tmp = !MENU_ENTRIES_NEEDS_REFRESH(menu_st);
if (tmp)
menu_st->flags |= MENU_ST_FLAG_PREVENT_POPULATE;
if (MENU_ENTRIES_NEEDS_REFRESH(menu_st))
menu_st->flags &= ~MENU_ST_FLAG_PREVENT_POPULATE;
else
menu_st->flags &= ~MENU_ST_FLAG_PREVENT_POPULATE;
menu_st->flags |= MENU_ST_FLAG_PREVENT_POPULATE;
xmb_toggle_horizontal_list(xmb);
}

View File

@ -10971,8 +10971,8 @@ unsigned menu_displaylist_build_list(
{MENU_ENUM_LABEL_MATERIALUI_MENU_TRANSITION_ANIMATION, PARSE_ONLY_UINT, true},
{MENU_ENUM_LABEL_MENU_HORIZONTAL_ANIMATION, PARSE_ONLY_BOOL, true},
{MENU_ENUM_LABEL_MENU_XMB_ANIMATION_HORIZONTAL_HIGHLIGHT, PARSE_ONLY_UINT, false},
{MENU_ENUM_LABEL_MENU_XMB_ANIMATION_OPENING_MAIN_MENU, PARSE_ONLY_UINT, false},
{MENU_ENUM_LABEL_MENU_XMB_ANIMATION_MOVE_UP_DOWN, PARSE_ONLY_UINT, true},
{MENU_ENUM_LABEL_MENU_XMB_ANIMATION_OPENING_MAIN_MENU, PARSE_ONLY_UINT, true},
};
for (i = 0; i < ARRAY_SIZE(build_list); i++)
@ -10980,6 +10980,7 @@ unsigned menu_displaylist_build_list(
switch (build_list[i].enum_idx)
{
case MENU_ENUM_LABEL_MENU_XMB_ANIMATION_HORIZONTAL_HIGHLIGHT:
case MENU_ENUM_LABEL_MENU_XMB_ANIMATION_OPENING_MAIN_MENU:
if (menu_horizontal_animation)
build_list[i].checked = true;
break;

View File

@ -4067,6 +4067,9 @@ static void setting_get_string_representation_uint_menu_xmb_animation_move_up_do
case 1:
strlcpy(s, "Easing Out Expo", len);
break;
case 2:
strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NONE), len);
break;
}
}
@ -17381,7 +17384,7 @@ static bool setting_append_list(
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
(*list)[list_info->index - 1].get_string_representation =
&setting_get_string_representation_uint_menu_xmb_animation_move_up_down;
menu_settings_list_current_add_range(list, list_info, 0, 1, 1, true, true);
menu_settings_list_current_add_range(list, list_info, 0, 2, 1, true, true);
(*list)[list_info->index - 1].ui_type = ST_UI_TYPE_UINT_RADIO_BUTTONS;
CONFIG_UINT(