6767#define OZONE_THUMBNAIL_STREAM_DELAY 16.66667f * 3
6868
6969#define OZONE_EASING_ALPHA EASING_OUT_CIRC
70+ #define OZONE_EASING_ALPHA_IN EASING_IN_QUAD
7071#define OZONE_EASING_XY EASING_OUT_QUAD
7172
7273#define FONT_SIZE_FOOTER 18
@@ -1581,6 +1582,7 @@ static ozone_theme_t *ozone_default_theme = &ozone_theme_dark; /* also used as
15811582static float ozone_last_framebuffer_opacity = -1.0f ;
15821583
15831584/* Forward declarations */
1585+ static void ozone_animation_list_alpha (ozone_handle_t * ozone , bool fade_in );
15841586static void ozone_cursor_animation_cb (void * userdata );
15851587static void ozone_selection_changed (ozone_handle_t * ozone , bool allow_animation );
15861588static void ozone_unload_thumbnail_textures (void * data );
@@ -8698,6 +8700,12 @@ static enum menu_action ozone_parse_menu_entry_action(
86988700 new_action = MENU_ACTION_ACCESSIBILITY_SPEAK_LABEL ;
86998701 break ;
87008702 }
8703+
8704+ /* Make transition smoother for single-click playlist launching */
8705+ if ( settings -> bools .input_menu_singleclick_playlists
8706+ && ( ozone -> flags & OZONE_FLAG_IS_PLAYLIST
8707+ || ozone -> flags & OZONE_FLAG_IS_EXPLORE_LIST ))
8708+ ozone -> animations .list_alpha = 0.0f ;
87018709 break ;
87028710 case MENU_ACTION_CANCEL :
87038711 ozone -> flags &= ~OZONE_FLAG_CURSOR_MODE ;
@@ -8970,6 +8978,24 @@ static enum menu_action ozone_parse_menu_entry_action(
89708978 break ;
89718979 }
89728980
8981+ switch (new_action )
8982+ {
8983+ case MENU_ACTION_UP :
8984+ case MENU_ACTION_DOWN :
8985+ case MENU_ACTION_LEFT :
8986+ case MENU_ACTION_RIGHT :
8987+ case MENU_ACTION_CANCEL :
8988+ if ( settings -> bools .input_menu_singleclick_playlists
8989+ && ozone -> animations .list_alpha < 1.0f )
8990+ {
8991+ ozone_animation_list_alpha (ozone , true);
8992+ new_action = MENU_ACTION_NOOP ;
8993+ }
8994+ break ;
8995+ default :
8996+ break ;
8997+ }
8998+
89738999 return new_action ;
89749000}
89759001
@@ -9310,6 +9336,8 @@ static void ozone_refresh_thumbnail_image(void *data, size_t i)
93109336 ozone -> flags &= ~OZONE_FLAG_SKIP_THUMBNAIL_RESET ;
93119337 ozone_unload_thumbnail_textures (ozone );
93129338
9339+ ozone -> flags |= OZONE_FLAG_FIRST_FRAME ;
9340+
93139341 /* Refresh metadata */
93149342 if (!i )
93159343 ozone_update_content_metadata (ozone );
@@ -11950,15 +11978,6 @@ static void ozone_frame(void *data, video_frame_info_t *video_info)
1195011978 }
1195111979 }
1195211980
11953- if (ozone -> flags & OZONE_FLAG_FIRST_FRAME )
11954- {
11955- menu_input_get_pointer_state (& ozone -> pointer );
11956-
11957- ozone -> cursor_x_old = ozone -> pointer .x ;
11958- ozone -> cursor_y_old = ozone -> pointer .y ;
11959- ozone -> flags &= ~OZONE_FLAG_FIRST_FRAME ;
11960- }
11961-
1196211981 /* OSK Fade detection */
1196311982 if (draw_osk != draw_osk_old )
1196411983 {
@@ -12337,6 +12356,21 @@ static void ozone_animation_end(void *userdata)
1233712356 ozone -> animations .cursor_alpha = 1.0f ;
1233812357}
1233912358
12359+ static void ozone_animation_list_alpha (ozone_handle_t * ozone , bool fade_in )
12360+ {
12361+ struct gfx_animation_ctx_entry entry ;
12362+
12363+ entry .cb = ozone_animation_end ;
12364+ entry .duration = ANIMATION_PUSH_ENTRY_DURATION ;
12365+ entry .easing_enum = (fade_in ) ? OZONE_EASING_ALPHA_IN : OZONE_EASING_ALPHA ;
12366+ entry .subject = & ozone -> animations .list_alpha ;
12367+ entry .tag = (uintptr_t )NULL ;
12368+ entry .target_value = (fade_in ) ? 1.0f : 0.0f ;
12369+ entry .userdata = ozone ;
12370+
12371+ gfx_animation_push (& entry );
12372+ }
12373+
1234012374static void ozone_list_open (
1234112375 ozone_handle_t * ozone ,
1234212376 bool ozone_collapse_sidebar ,
@@ -12347,6 +12381,9 @@ static void ozone_list_open(
1234712381
1234812382 ozone -> flags |= OZONE_FLAG_DRAW_OLD_LIST ;
1234912383
12384+ if (ozone -> flags & OZONE_FLAG_FIRST_FRAME )
12385+ animate = false;
12386+
1235012387 /* Sidebar animation */
1235112388 ozone_sidebar_update_collapse (ozone , ozone_collapse_sidebar , animate );
1235212389
@@ -12386,8 +12423,6 @@ static void ozone_list_open(
1238612423 {
1238712424 if (animate )
1238812425 {
12389- struct gfx_animation_ctx_entry entry ;
12390-
1239112426 entry .cb = ozone_collapse_end ;
1239212427 entry .duration = ANIMATION_PUSH_ENTRY_DURATION ;
1239312428 entry .easing_enum = OZONE_EASING_XY ;
@@ -12406,14 +12441,13 @@ static void ozone_list_open(
1240612441 ozone -> sidebar_offset = - ozone -> dimensions_sidebar_width ;
1240712442 }
1240812443
12409- /* Left/right animation */
1241012444 if (animate )
1241112445 {
1241212446 ozone -> animations .list_alpha = 0.0f ;
1241312447
1241412448 entry .cb = ozone_animation_end ;
12415- entry .duration = ANIMATION_PUSH_ENTRY_DURATION ;
12416- entry .easing_enum = OZONE_EASING_ALPHA ;
12449+ entry .duration = ANIMATION_PUSH_ENTRY_DURATION / 2 ;
12450+ entry .easing_enum = OZONE_EASING_ALPHA_IN ;
1241712451 entry .subject = & ozone -> animations .list_alpha ;
1241812452 entry .tag = (uintptr_t )NULL ;
1241912453 entry .target_value = 1.0f ;
@@ -12604,6 +12638,15 @@ static void ozone_populate_entries(
1260412638 if (ozone -> categories_selection_ptr == ozone -> categories_active_idx_old )
1260512639 ozone_list_open (ozone , ozone_collapse_sidebar , (!(ozone -> flags & OZONE_FLAG_FIRST_FRAME )));
1260612640
12641+ if (ozone -> flags & OZONE_FLAG_FIRST_FRAME )
12642+ {
12643+ menu_input_get_pointer_state (& ozone -> pointer );
12644+
12645+ ozone -> cursor_x_old = ozone -> pointer .x ;
12646+ ozone -> cursor_y_old = ozone -> pointer .y ;
12647+ ozone -> flags &= ~OZONE_FLAG_FIRST_FRAME ;
12648+ }
12649+
1260712650 /* Reset savestate thumbnails always */
1260812651 ozone_update_savestate_thumbnail_path (ozone , (unsigned )menu_st -> selection_ptr );
1260912652 ozone_update_savestate_thumbnail_image (ozone );
@@ -12753,6 +12796,9 @@ static void ozone_toggle(void *userdata, bool menu_on)
1275312796 gfx_animation_push (& entry );
1275412797 }
1275512798
12799+ /* Reset */
12800+ ozone -> animations .list_alpha = 1.0f ;
12801+
1275612802 /* Have to reset this, otherwise savestate
1275712803 * thumbnail won't update after selecting
1275812804 * 'save state' option */
0 commit comments