mirror of
https://github.com/libretro/RetroArch
synced 2025-04-17 11:43:00 +00:00
(gfx widgets) Pass more state around
This commit is contained in:
parent
54372f2524
commit
876419294d
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user