(gfx widgets) Pass more state around

This commit is contained in:
twinaphex 2020-06-08 02:54:01 +02:00
parent 54372f2524
commit 876419294d
8 changed files with 127 additions and 106 deletions

View File

@ -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)

View File

@ -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;

View File

@ -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);

View File

@ -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,

View File

@ -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);

View File

@ -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;

View File

@ -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);

View File

@ -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,