diff --git a/gfx/gfx_widgets.c b/gfx/gfx_widgets.c index 7cef9068df..58eddb4034 100644 --- a/gfx/gfx_widgets.c +++ b/gfx/gfx_widgets.c @@ -325,7 +325,7 @@ static void gfx_widgets_free(dispgfx_widget_t *p_dispwidget); static void gfx_widgets_layout(dispgfx_widget_t *p_dispwidget, bool is_threaded, const char *dir_assets, char *font_path); -dispgfx_widget_t *dispwidget_get_ptr(void) +void *dispwidget_get_ptr(void) { /* TODO/FIXME - static global state - perhaps move outside this file */ static dispgfx_widget_t dispwidget_st; @@ -334,31 +334,31 @@ dispgfx_widget_t *dispwidget_get_ptr(void) bool gfx_widgets_active(void) { - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)dispwidget_get_ptr(); return p_dispwidget->widgets_active; } void gfx_widgets_set_persistence(bool persist) { - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)dispwidget_get_ptr(); p_dispwidget->widgets_persisting = persist; } -gfx_widget_font_data_t* gfx_widgets_get_font_regular(void) +gfx_widget_font_data_t* gfx_widgets_get_font_regular(void *data) { - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)data; return &p_dispwidget->gfx_widget_fonts.regular; } -gfx_widget_font_data_t* gfx_widgets_get_font_bold(void) +gfx_widget_font_data_t* gfx_widgets_get_font_bold(void *data) { - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)data; return &p_dispwidget->gfx_widget_fonts.bold; } -gfx_widget_font_data_t* gfx_widgets_get_font_msg_queue(void) +gfx_widget_font_data_t* gfx_widgets_get_font_msg_queue(void *data) { - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)data; return &p_dispwidget->gfx_widget_fonts.msg_queue; } @@ -374,21 +374,21 @@ float* gfx_widgets_get_backdrop_orig(void) /* Messages queue */ -gfx_animation_ctx_tag gfx_widgets_get_generic_tag(void) +gfx_animation_ctx_tag gfx_widgets_get_generic_tag(void *data) { - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)data; return p_dispwidget->gfx_widgets_generic_tag; } -unsigned gfx_widgets_get_padding(void) +unsigned gfx_widgets_get_padding(void *data) { - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)data; return p_dispwidget->simple_widget_padding; } -unsigned gfx_widgets_get_height(void) +unsigned gfx_widgets_get_height(void *data) { - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)data; return p_dispwidget->simple_widget_height; } @@ -412,7 +412,7 @@ unsigned gfx_widgets_get_last_video_height(void *data) size_t gfx_widgets_get_msg_queue_size(void) { - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)dispwidget_get_ptr(); return p_dispwidget->current_msgs ? p_dispwidget->current_msgs->size : 0; } @@ -448,7 +448,7 @@ void gfx_widgets_msg_queue_push( bool menu_is_alive) { menu_widget_msg_t *msg_widget = NULL; - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)dispwidget_get_ptr(); if (!p_dispwidget->widgets_active) return; @@ -632,7 +632,7 @@ void gfx_widgets_msg_queue_push( static void gfx_widgets_unfold_end(void *userdata) { menu_widget_msg_t *unfold = (menu_widget_msg_t*)userdata; - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)dispwidget_get_ptr(); unfold->unfolding = false; p_dispwidget->widgets_moving = false; @@ -640,7 +640,7 @@ static void gfx_widgets_unfold_end(void *userdata) static void gfx_widgets_move_end(void *userdata) { - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)dispwidget_get_ptr(); if (userdata) { @@ -765,7 +765,7 @@ static void gfx_widgets_msg_queue_free( static void gfx_widgets_msg_queue_kill_end(void *userdata) { - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)dispwidget_get_ptr(); menu_widget_msg_t *msg = (menu_widget_msg_t*) p_dispwidget->current_msgs->list[p_dispwidget->msg_queue_kill].userdata; @@ -1024,7 +1024,7 @@ void gfx_widgets_iterate( { size_t i; float scale_factor; - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)dispwidget_get_ptr(); if (!p_dispwidget->widgets_active) return; @@ -1055,7 +1055,9 @@ void gfx_widgets_iterate( const gfx_widget_t* widget = widgets[i]; if (widget->iterate) - widget->iterate(width, height, fullscreen, dir_assets, font_path, is_threaded); + widget->iterate(p_dispwidget, + width, height, fullscreen, + dir_assets, font_path, is_threaded); } /* Messages queue */ @@ -1633,7 +1635,7 @@ void gfx_widgets_frame(void *data) #ifdef HAVE_CHEEVOS int scissor_me_timbers = 0; #endif - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)dispwidget_get_ptr(); if (!p_dispwidget->widgets_active) return; @@ -2036,7 +2038,8 @@ bool gfx_widgets_init( unsigned width, unsigned height, bool fullscreen, const char *dir_assets, char *font_path) { - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*) + dispwidget_get_ptr(); #ifdef HAVE_CHEEVOS p_dispwidget->cheevo_popup_queue_read_index = -1; #endif @@ -2096,7 +2099,7 @@ error: void gfx_widgets_deinit(void) { - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)dispwidget_get_ptr(); if (!p_dispwidget->widgets_inited) return; @@ -2446,7 +2449,7 @@ static void gfx_widgets_achievement_free_current(dispgfx_widget_t *p_dispwidget) static void gfx_widgets_achievement_next(void* userdata) { - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)dispwidget_get_ptr(); SLOCK_LOCK(p_dispwidget->cheevo_popup_queue_lock); gfx_widgets_achievement_free_current(p_dispwidget); @@ -2540,7 +2543,7 @@ static void gfx_widgets_free(dispgfx_widget_t *p_dispwidget) bool gfx_widgets_set_fps_text(const char *new_fps_text) { - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)dispwidget_get_ptr(); if (!p_dispwidget->widgets_active) return false; @@ -2553,13 +2556,13 @@ bool gfx_widgets_set_fps_text(const char *new_fps_text) #ifdef HAVE_TRANSLATE int gfx_widgets_ai_service_overlay_get_state(void) { - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)dispwidget_get_ptr(); return p_dispwidget->ai_service_overlay_state; } bool gfx_widgets_ai_service_overlay_set_state(int state) { - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)dispwidget_get_ptr(); p_dispwidget->ai_service_overlay_state = state; return true; } @@ -2568,7 +2571,7 @@ bool gfx_widgets_ai_service_overlay_load( char* buffer, unsigned buffer_len, enum image_type_enum image_type) { - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)dispwidget_get_ptr(); if (p_dispwidget->ai_service_overlay_state == 0) { @@ -2587,7 +2590,7 @@ bool gfx_widgets_ai_service_overlay_load( void gfx_widgets_ai_service_overlay_unload(void) { - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)dispwidget_get_ptr(); if (p_dispwidget->ai_service_overlay_state == 1) { @@ -2608,7 +2611,7 @@ static void gfx_widgets_end_load_content_animation(void *userdata) void gfx_widgets_cleanup_load_content_animation(void) { - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)dispwidget_get_ptr(); p_dispwidget->load_content_animation_running = false; if (p_dispwidget->load_content_animation_content_name) free(p_dispwidget->load_content_animation_content_name); @@ -2624,7 +2627,7 @@ void gfx_widgets_start_load_content_animation( int i; gfx_animation_ctx_entry_t entry; gfx_timer_ctx_entry_t timer_entry; - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)dispwidget_get_ptr(); float icon_color[16] = COLOR_HEX_TO_FLOAT(0x0473C9, 1.0f); /* TODO: random color */ unsigned timing = 0; @@ -2734,7 +2737,7 @@ void gfx_widgets_start_load_content_animation( static void gfx_widgets_achievement_dismiss(void *userdata) { gfx_animation_ctx_entry_t entry; - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)dispwidget_get_ptr(); /* Slide up animation */ entry.cb = gfx_widgets_achievement_next; @@ -2751,7 +2754,7 @@ static void gfx_widgets_achievement_dismiss(void *userdata) static void gfx_widgets_achievement_fold(void *userdata) { gfx_animation_ctx_entry_t entry; - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)dispwidget_get_ptr(); /* Fold */ entry.cb = gfx_widgets_achievement_dismiss; @@ -2769,7 +2772,7 @@ static void gfx_widgets_achievement_unfold(void *userdata) { gfx_timer_ctx_entry_t timer; gfx_animation_ctx_entry_t entry; - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)dispwidget_get_ptr(); /* Unfold */ entry.cb = NULL; @@ -2823,7 +2826,7 @@ static void gfx_widgets_start_achievement_notification( void gfx_widgets_push_achievement(const char *title, const char *badge) { - dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); + dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)dispwidget_get_ptr(); int start_notification = 1; if (!p_dispwidget->widgets_active) diff --git a/gfx/gfx_widgets.h b/gfx/gfx_widgets.h index 9f998fb74e..0419454d4a 100644 --- a/gfx/gfx_widgets.h +++ b/gfx/gfx_widgets.h @@ -78,7 +78,7 @@ struct gfx_widget /* called every frame on the main thread * -> update the widget logic here */ - void (*iterate)( + void (*iterate)(void *user_data, unsigned width, unsigned height, bool fullscreen, const char *dir_assets, char *font_path, bool is_threaded); @@ -103,19 +103,19 @@ typedef struct size_t usage_count; } gfx_widget_font_data_t; -gfx_animation_ctx_tag gfx_widgets_get_generic_tag(void); +gfx_animation_ctx_tag gfx_widgets_get_generic_tag(void *data); float* gfx_widgets_get_pure_white(void); -unsigned gfx_widgets_get_padding(void); +unsigned gfx_widgets_get_padding(void *data); -unsigned gfx_widgets_get_height(void); +unsigned gfx_widgets_get_height(void *data); -gfx_widget_font_data_t* gfx_widgets_get_font_regular(void); +gfx_widget_font_data_t* gfx_widgets_get_font_regular(void *data); -gfx_widget_font_data_t* gfx_widgets_get_font_bold(void); +gfx_widget_font_data_t* gfx_widgets_get_font_bold(void *data); -gfx_widget_font_data_t* gfx_widgets_get_font_msg_queue(void); +gfx_widget_font_data_t* gfx_widgets_get_font_msg_queue(void *data); float* gfx_widgets_get_backdrop_orig(void); @@ -186,7 +186,8 @@ void gfx_widgets_iterate( const char *dir_assets, char *font_path, bool is_threaded); -void gfx_widget_screenshot_taken(const char *shotname, const char *filename); +void gfx_widget_screenshot_taken(void *data, + const char *shotname, const char *filename); /* AI Service functions */ #ifdef HAVE_TRANSLATE @@ -212,13 +213,17 @@ void gfx_widgets_push_achievement(const char *title, const char *badge); void gfx_widget_set_message(char *message); /* Warning: not thread safe! */ -void gfx_widget_set_libretro_message(const char *message, unsigned duration); +void gfx_widget_set_libretro_message( + void *data, + const char *message, unsigned duration); /* All the functions below should be called in * the video driver - once they are all added, set * enable_menu_widgets to true for that driver */ void gfx_widgets_frame(void *data); +void *dispwidget_get_ptr(void); + bool gfx_widgets_set_fps_text(const char *new_fps_text); extern const gfx_widget_t gfx_widget_screenshot; diff --git a/gfx/widgets/gfx_widget_generic_message.c b/gfx/widgets/gfx_widget_generic_message.c index 34771677e5..9f5d36ba65 100644 --- a/gfx/widgets/gfx_widget_generic_message.c +++ b/gfx/widgets/gfx_widget_generic_message.c @@ -94,7 +94,7 @@ static void gfx_widget_generic_message_frame(void* data, void *user_data) unsigned video_height = video_info->height; unsigned height = gfx_widgets_get_generic_message_height(user_data); unsigned text_color = COLOR_TEXT_ALPHA(0xffffffff, (unsigned)(state->alpha*255.0f)); - gfx_widget_font_data_t* font_regular = gfx_widgets_get_font_regular(); + gfx_widget_font_data_t* font_regular = gfx_widgets_get_font_regular(user_data); size_t msg_queue_size = gfx_widgets_get_msg_queue_size(); gfx_display_set_alpha(gfx_widgets_get_backdrop_orig(), state->alpha); diff --git a/gfx/widgets/gfx_widget_libretro_message.c b/gfx/widgets/gfx_widget_libretro_message.c index cf4b72ec58..ac0a147e2f 100644 --- a/gfx/widgets/gfx_widget_libretro_message.c +++ b/gfx/widgets/gfx_widget_libretro_message.c @@ -61,12 +61,13 @@ static void gfx_widget_libretro_message_fadeout(void *userdata) gfx_animation_push(&entry); } -void gfx_widget_set_libretro_message(const char *msg, unsigned duration) +void gfx_widget_set_libretro_message(void *data, + const char *msg, unsigned duration) { gfx_timer_ctx_entry_t timer; gfx_widget_libretro_message_state_t* state = gfx_widget_libretro_message_get_state(); gfx_animation_ctx_tag tag = (uintptr_t) &state->timer; - gfx_widget_font_data_t* font_regular = gfx_widgets_get_font_regular(); + gfx_widget_font_data_t* font_regular = gfx_widgets_get_font_regular(data); strlcpy(state->message, msg, sizeof(state->message)); @@ -83,7 +84,7 @@ void gfx_widget_set_libretro_message(const char *msg, unsigned duration) gfx_timer_start(&state->timer, &timer); /* Compute text width */ - state->width = font_driver_get_message_width(font_regular->font, msg, (unsigned)strlen(msg), 1) + gfx_widgets_get_padding() * 2; + state->width = font_driver_get_message_width(font_regular->font, msg, (unsigned)strlen(msg), 1) + gfx_widgets_get_padding(data) * 2; } static void gfx_widget_libretro_message_frame(void *data, void *user_data) @@ -100,7 +101,7 @@ static void gfx_widget_libretro_message_frame(void *data, void *user_data) unsigned height = gfx_widgets_get_generic_message_height(user_data); float* backdrop_orign = gfx_widgets_get_backdrop_orig(); unsigned text_color = COLOR_TEXT_ALPHA(0xffffffff, (unsigned)(state->alpha*255.0f)); - gfx_widget_font_data_t* font_regular = gfx_widgets_get_font_regular(); + gfx_widget_font_data_t* font_regular = gfx_widgets_get_font_regular(user_data); size_t msg_queue_size = gfx_widgets_get_msg_queue_size(); gfx_display_set_alpha(backdrop_orign, state->alpha); @@ -113,7 +114,7 @@ static void gfx_widget_libretro_message_frame(void *data, void *user_data) backdrop_orign); gfx_widgets_draw_text(font_regular, state->message, - gfx_widgets_get_padding(), + gfx_widgets_get_padding(user_data), video_height - height/2 + font_regular->line_centre_offset, video_width, video_height, text_color, TEXT_ALIGN_LEFT, diff --git a/gfx/widgets/gfx_widget_screenshot.c b/gfx/widgets/gfx_widget_screenshot.c index e1cb09acc7..5ceb64991a 100644 --- a/gfx/widgets/gfx_widget_screenshot.c +++ b/gfx/widgets/gfx_widget_screenshot.c @@ -81,14 +81,14 @@ static void gfx_widget_screenshot_fadeout(void *userdata) entry.duration = SCREENSHOT_DURATION_OUT; entry.easing_enum = EASING_OUT_QUAD; entry.subject = &state->alpha; - entry.tag = gfx_widgets_get_generic_tag(); + entry.tag = gfx_widgets_get_generic_tag(userdata); entry.target_value = 0.0f; entry.userdata = NULL; gfx_animation_push(&entry); } -static void gfx_widgets_play_screenshot_flash(void) +static void gfx_widgets_play_screenshot_flash(void *data) { gfx_widget_screenshot_state_t* state = gfx_widget_screenshot_get_ptr(); gfx_animation_ctx_entry_t entry; @@ -97,17 +97,19 @@ static void gfx_widgets_play_screenshot_flash(void) entry.duration = SCREENSHOT_DURATION_IN; entry.easing_enum = EASING_IN_QUAD; entry.subject = &state->alpha; - entry.tag = gfx_widgets_get_generic_tag(); + entry.tag = gfx_widgets_get_generic_tag(data); entry.target_value = 1.0f; - entry.userdata = NULL; + entry.userdata = data; gfx_animation_push(&entry); } -void gfx_widget_screenshot_taken(const char *shotname, const char *filename) +void gfx_widget_screenshot_taken( + void *data, + const char *shotname, const char *filename) { gfx_widget_screenshot_state_t* state = gfx_widget_screenshot_get_ptr(); - gfx_widgets_play_screenshot_flash(); + gfx_widgets_play_screenshot_flash(data); strlcpy(state->filename, filename, sizeof(state->filename)); strlcpy(state->shotname, shotname, sizeof(state->shotname)); } @@ -129,7 +131,7 @@ static void gfx_widget_screenshot_end(void *userdata) entry.duration = MSG_QUEUE_ANIMATION_DURATION; entry.easing_enum = EASING_OUT_QUAD; entry.subject = &state->y; - entry.tag = gfx_widgets_get_generic_tag(); + entry.tag = gfx_widgets_get_generic_tag(userdata); entry.target_value = -((float)state->height); entry.userdata = NULL; @@ -149,7 +151,7 @@ static void gfx_widget_screenshot_frame(void* data, void *user_data) void *userdata = video_info->userdata; unsigned video_width = video_info->width; unsigned video_height = video_info->height; - gfx_widget_font_data_t* font_regular = gfx_widgets_get_font_regular(); + gfx_widget_font_data_t* font_regular = gfx_widgets_get_font_regular(user_data); float* pure_white = gfx_widgets_get_pure_white(); gfx_widget_screenshot_state_t* state = gfx_widget_screenshot_get_ptr(); int padding = (state->height - (font_regular->line_height * 2.0f)) / 2.0f; @@ -225,14 +227,16 @@ static void gfx_widget_screenshot_frame(void* data, void *user_data) } } -static void gfx_widget_screenshot_iterate(unsigned width, +static void gfx_widget_screenshot_iterate( + void *user_data, + unsigned width, unsigned height, bool fullscreen, const char *dir_assets, char *font_path, bool is_threaded) { gfx_widget_screenshot_state_t* state = gfx_widget_screenshot_get_ptr(); - unsigned padding = gfx_widgets_get_padding(); - gfx_widget_font_data_t* font_regular = gfx_widgets_get_font_regular(); + unsigned padding = gfx_widgets_get_padding(user_data); + gfx_widget_font_data_t* font_regular = gfx_widgets_get_font_regular(user_data); /* Load screenshot and start its animation */ if (state->filename[0] != '\0') @@ -264,7 +268,7 @@ static void gfx_widget_screenshot_iterate(unsigned width, timer.cb = gfx_widget_screenshot_end; timer.duration = SCREENSHOT_NOTIFICATION_DURATION; - timer.userdata = NULL; + timer.userdata = user_data; gfx_timer_start(&state->timer, &timer); diff --git a/gfx/widgets/gfx_widget_volume.c b/gfx/widgets/gfx_widget_volume.c index bffa592ebf..2e9144c90b 100644 --- a/gfx/widgets/gfx_widget_volume.c +++ b/gfx/widgets/gfx_widget_volume.c @@ -100,72 +100,74 @@ static void gfx_widget_volume_frame(void* data, void *user_data) char msg[255]; char percentage_msg[255]; video_frame_info_t *video_info = (video_frame_info_t*)data; - gfx_widget_font_data_t* font_regular = gfx_widgets_get_font_regular(); + gfx_widget_font_data_t* font_regular = gfx_widgets_get_font_regular(user_data); - void *userdata = video_info->userdata; - unsigned video_width = video_info->width; - unsigned video_height = video_info->height; + void *userdata = video_info->userdata; + unsigned video_width = video_info->width; + unsigned video_height = video_info->height; - unsigned padding = gfx_widgets_get_padding(); + unsigned padding = gfx_widgets_get_padding(user_data); - float* backdrop_orig = gfx_widgets_get_backdrop_orig(); - float* pure_white = gfx_widgets_get_pure_white(); + float* backdrop_orig = gfx_widgets_get_backdrop_orig(); + float* pure_white = gfx_widgets_get_pure_white(); - uintptr_t volume_icon = 0; - unsigned icon_size = state->textures[ICON_MED] ? state->widget_height : padding; - unsigned text_color = COLOR_TEXT_ALPHA(0xffffffff, (unsigned)(state->text_alpha*255.0f)); - unsigned text_color_db = COLOR_TEXT_ALPHA(TEXT_COLOR_FAINT, (unsigned)(state->text_alpha*255.0f)); + uintptr_t volume_icon = 0; + unsigned icon_size = state->textures[ICON_MED] ? state->widget_height : padding; + unsigned text_color = COLOR_TEXT_ALPHA(0xffffffff, (unsigned)(state->text_alpha*255.0f)); + unsigned text_color_db = COLOR_TEXT_ALPHA(TEXT_COLOR_FAINT, (unsigned)(state->text_alpha*255.0f)); - unsigned bar_x = icon_size; - unsigned bar_height = font_regular->line_height / 2; - unsigned bar_width = state->widget_width - bar_x - padding; - unsigned bar_y = state->widget_height / 2 + bar_height; + unsigned bar_x = icon_size; + unsigned bar_height = font_regular->line_height / 2; + unsigned bar_width = state->widget_width - bar_x - padding; + unsigned bar_y = state->widget_height / 2 + bar_height; - float *bar_background = NULL; - float *bar_foreground = NULL; - float bar_percentage = 0.0f; + float *bar_background = NULL; + float *bar_foreground = NULL; + float bar_percentage = 0.0f; /* Note: Volume + percentage text has no component * that extends below the baseline, so we shift * the text down by the font descender to achieve * better spacing */ - unsigned volume_text_y = (bar_y / 2.0f) + font_regular->line_centre_offset + font_regular->line_descender; + unsigned volume_text_y = (bar_y / 2.0f) + + font_regular->line_centre_offset + + font_regular->line_descender; - msg[0] = '\0'; - percentage_msg[0] = '\0'; + msg[0] = '\0'; + percentage_msg[0] = '\0'; if (state->mute) - volume_icon = state->textures[ICON_MUTE]; + volume_icon = state->textures[ICON_MUTE]; else if (state->percent <= 1.0f) { if (state->percent <= 0.5f) - volume_icon = state->textures[ICON_MIN]; + volume_icon = state->textures[ICON_MIN]; else - volume_icon = state->textures[ICON_MED]; + volume_icon = state->textures[ICON_MED]; - bar_background = state->bar_background; - bar_foreground = state->bar_normal; - bar_percentage = state->percent; + bar_background = state->bar_background; + bar_foreground = state->bar_normal; + bar_percentage = state->percent; } else if (state->percent > 1.0f && state->percent <= 2.0f) { - volume_icon = state->textures[ICON_MAX]; + volume_icon = state->textures[ICON_MAX]; - bar_background = state->bar_normal; - bar_foreground = state->bar_loud; - bar_percentage = state->percent - 1.0f; + bar_background = state->bar_normal; + bar_foreground = state->bar_loud; + bar_percentage = state->percent - 1.0f; } else { - volume_icon = state->textures[ICON_MAX]; + volume_icon = state->textures[ICON_MAX]; - bar_background = state->bar_loud; - bar_foreground = state->bar_loudest; - bar_percentage = state->percent - 2.0f; + bar_background = state->bar_loud; + bar_foreground = state->bar_loudest; + bar_percentage = state->percent - 2.0f; } if (bar_percentage > 1.0f) - bar_percentage = 1.0f; + bar_percentage = 1.0f; /* Backdrop */ gfx_display_set_alpha(backdrop_orig, state->alpha); @@ -207,7 +209,9 @@ static void gfx_widget_volume_frame(void* data, void *user_data) const char *text = msg_hash_to_str(MSG_AUDIO_MUTED); gfx_widgets_draw_text(font_regular, text, - state->widget_width/2, state->widget_height/2.0f + font_regular->line_centre_offset, + state->widget_width / 2, + state->widget_height / 2.0f + + font_regular->line_centre_offset, video_width, video_height, text_color, TEXT_ALIGN_CENTER, true); @@ -309,7 +313,7 @@ static void gfx_widget_volume_layout( { gfx_widget_volume_state_t* state = gfx_widget_volume_get_ptr(); unsigned last_video_width = gfx_widgets_get_last_video_width(data); - gfx_widget_font_data_t* font_regular = gfx_widgets_get_font_regular(); + gfx_widget_font_data_t* font_regular = gfx_widgets_get_font_regular(data); state->widget_height = font_regular->line_height * 4; state->widget_width = state->widget_height * 4; diff --git a/retroarch.c b/retroarch.c index a50ed027ec..f22acba7cd 100644 --- a/retroarch.c +++ b/retroarch.c @@ -17234,7 +17234,8 @@ static bool rarch_environment_cb(unsigned cmd, void *data) RARCH_LOG("[Environ]: SET_MESSAGE: %s\n", msg->msg); #if defined(HAVE_GFX_WIDGETS) if (gfx_widgets_active()) - gfx_widget_set_libretro_message(msg->msg, + gfx_widget_set_libretro_message(dispwidget_get_ptr(), + msg->msg, roundf((float)msg->frames / 60.0f * 1000.0f)); else #endif @@ -17325,7 +17326,8 @@ static bool rarch_environment_cb(unsigned cmd, void *data) case RETRO_MESSAGE_TYPE_NOTIFICATION_ALT: if (gfx_widgets_active()) - gfx_widget_set_libretro_message(msg->msg, msg->duration); + gfx_widget_set_libretro_message(dispwidget_get_ptr(), + msg->msg, msg->duration); else runloop_core_msg_queue_push(p_rarch, msg); @@ -17340,7 +17342,8 @@ static bool rarch_environment_cb(unsigned cmd, void *data) case RETRO_MESSAGE_TYPE_PROGRESS: if (gfx_widgets_active()) - gfx_widget_set_libretro_message(msg->msg, msg->duration); + gfx_widget_set_libretro_message(dispwidget_get_ptr(), + msg->msg, msg->duration); else runloop_core_msg_queue_push(p_rarch, msg); diff --git a/tasks/task_screenshot.c b/tasks/task_screenshot.c index df3828d844..a8d881be43 100644 --- a/tasks/task_screenshot.c +++ b/tasks/task_screenshot.c @@ -243,7 +243,8 @@ static void task_screenshot_callback(retro_task_t *task, return; if (!state->silence && state->widgets_ready) - gfx_widget_screenshot_taken(state->shotname, state->filename); + gfx_widget_screenshot_taken(dispwidget_get_ptr(), + state->shotname, state->filename); free(state); /* Must explicitly set task->state to NULL here,