1
0
mirror of https://github.com/libretro/RetroArch synced 2025-03-25 16:44:01 +00:00

Pass state around to widget interface

This commit is contained in:
twinaphex 2020-06-08 02:31:36 +02:00
parent 77f5433f22
commit 54372f2524
6 changed files with 30 additions and 27 deletions

@ -392,21 +392,21 @@ unsigned gfx_widgets_get_height(void)
return p_dispwidget->simple_widget_height;
}
unsigned gfx_widgets_get_generic_message_height(void)
unsigned gfx_widgets_get_generic_message_height(void *data)
{
dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr();
dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)data;
return p_dispwidget->generic_message_height;
}
unsigned gfx_widgets_get_last_video_width(void)
unsigned gfx_widgets_get_last_video_width(void *data)
{
dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr();
dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)data;
return p_dispwidget->last_video_width;
}
unsigned gfx_widgets_get_last_video_height(void)
unsigned gfx_widgets_get_last_video_height(void *data)
{
dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr();
dispgfx_widget_t *p_dispwidget = (dispgfx_widget_t*)data;
return p_dispwidget->last_video_height;
}
@ -1980,7 +1980,7 @@ void gfx_widgets_frame(void *data)
const gfx_widget_t* widget = widgets[i];
if (widget->frame)
widget->frame(data);
widget->frame(data, p_dispwidget);
}
/* Draw all messages */
@ -2258,7 +2258,8 @@ static void gfx_widgets_layout(
const gfx_widget_t* widget = widgets[i];
if (widget->layout)
widget->layout(is_threaded, dir_assets, font_path);
widget->layout(p_dispwidget,
is_threaded, dir_assets, font_path);
}
}

@ -73,7 +73,8 @@ struct gfx_widget
/* called when the window resolution changes
* -> (re)layout the widget here */
void (*layout)(bool is_threaded, const char *dir_assets, char *font_path);
void (*layout)(void *data,
bool is_threaded, const char *dir_assets, char *font_path);
/* called every frame on the main thread
* -> update the widget logic here */
@ -85,7 +86,7 @@ struct gfx_widget
/* called every frame
* (on the video thread if threaded video is on)
* -> draw the widget here */
void (*frame)(void* data);
void (*frame)(void* data, void *userdata);
};
/* This structure holds all objects + metadata
@ -118,11 +119,11 @@ gfx_widget_font_data_t* gfx_widgets_get_font_msg_queue(void);
float* gfx_widgets_get_backdrop_orig(void);
unsigned gfx_widgets_get_last_video_width(void);
unsigned gfx_widgets_get_last_video_width(void *data);
unsigned gfx_widgets_get_last_video_height(void);
unsigned gfx_widgets_get_last_video_height(void *data);
unsigned gfx_widgets_get_generic_message_height(void);
unsigned gfx_widgets_get_generic_message_height(void *data);
/* Warning: not thread safe! */
size_t gfx_widgets_get_msg_queue_size(void);

@ -81,7 +81,7 @@ void gfx_widget_set_message(char *msg)
gfx_timer_start(&state->timer, &timer);
}
static void gfx_widget_generic_message_frame(void* data)
static void gfx_widget_generic_message_frame(void* data, void *user_data)
{
gfx_widget_generic_message_state_t* state =
gfx_widget_generic_message_get_ptr();
@ -92,7 +92,7 @@ static void gfx_widget_generic_message_frame(void* data)
void* userdata = video_info->userdata;
unsigned video_width = video_info->width;
unsigned video_height = video_info->height;
unsigned height = gfx_widgets_get_generic_message_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();
size_t msg_queue_size = gfx_widgets_get_msg_queue_size();

@ -86,9 +86,10 @@ void gfx_widget_set_libretro_message(const char *msg, unsigned duration)
state->width = font_driver_get_message_width(font_regular->font, msg, (unsigned)strlen(msg), 1) + gfx_widgets_get_padding() * 2;
}
static void gfx_widget_libretro_message_frame(void *data)
static void gfx_widget_libretro_message_frame(void *data, void *user_data)
{
gfx_widget_libretro_message_state_t* state = gfx_widget_libretro_message_get_state();
gfx_widget_libretro_message_state_t* state =
gfx_widget_libretro_message_get_state();
if (state->alpha > 0.0f)
{
@ -96,7 +97,7 @@ static void gfx_widget_libretro_message_frame(void *data)
void* userdata = video_info->userdata;
unsigned video_width = video_info->width;
unsigned video_height = video_info->height;
unsigned height = gfx_widgets_get_generic_message_height();
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();

@ -143,7 +143,7 @@ static void gfx_widget_screenshot_free(void)
gfx_widget_screenshot_dispose(NULL);
}
static void gfx_widget_screenshot_frame(void* data)
static void gfx_widget_screenshot_frame(void* data, void *user_data)
{
video_frame_info_t *video_info = (video_frame_info_t*)data;
void *userdata = video_info->userdata;

@ -91,17 +91,15 @@ gfx_widget_volume_state_t* gfx_widget_volume_get_ptr(void)
return &p_w_volume_st;
}
static void gfx_widget_volume_frame(void* data)
static void gfx_widget_volume_frame(void* data, void *user_data)
{
gfx_widget_volume_state_t* state = gfx_widget_volume_get_ptr();
if (state->alpha > 0.0f)
{
video_frame_info_t *video_info = (video_frame_info_t*)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();
void *userdata = video_info->userdata;
@ -305,14 +303,16 @@ void gfx_widget_volume_update_and_show(float new_volume, bool mute)
gfx_timer_start(&state->timer, &entry);
}
static void gfx_widget_volume_layout(bool is_threaded, const char *dir_assets, char *font_path)
static void gfx_widget_volume_layout(
void *data,
bool is_threaded, const char *dir_assets, char *font_path)
{
gfx_widget_volume_state_t* state = gfx_widget_volume_get_ptr();
unsigned last_video_width = gfx_widgets_get_last_video_width();
unsigned last_video_width = gfx_widgets_get_last_video_width(data);
gfx_widget_font_data_t* font_regular = gfx_widgets_get_font_regular();
state->widget_height = font_regular->line_height * 4;
state->widget_width = state->widget_height * 4;
state->widget_height = font_regular->line_height * 4;
state->widget_width = state->widget_height * 4;
/* Volume widget cannot exceed screen width
* > If it does, scale it down */