mirror of
https://github.com/libretro/RetroArch
synced 2025-02-07 03:40:24 +00:00
(XMB+Ozone) Animation corrections (#15645)
This commit is contained in:
parent
2bb955fe19
commit
2623f8d085
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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(
|
||||
|
Loading…
x
Reference in New Issue
Block a user