From 54372f25247e81bce85eee14a2b7d12a746719a2 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 8 Jun 2020 02:31:36 +0200 Subject: [PATCH] Pass state around to widget interface --- gfx/gfx_widgets.c | 17 +++++++++-------- gfx/gfx_widgets.h | 11 ++++++----- gfx/widgets/gfx_widget_generic_message.c | 4 ++-- gfx/widgets/gfx_widget_libretro_message.c | 7 ++++--- gfx/widgets/gfx_widget_screenshot.c | 2 +- gfx/widgets/gfx_widget_volume.c | 16 ++++++++-------- 6 files changed, 30 insertions(+), 27 deletions(-) diff --git a/gfx/gfx_widgets.c b/gfx/gfx_widgets.c index faa5ddce2f..7cef9068df 100644 --- a/gfx/gfx_widgets.c +++ b/gfx/gfx_widgets.c @@ -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); } } diff --git a/gfx/gfx_widgets.h b/gfx/gfx_widgets.h index 81bcec93a7..9f998fb74e 100644 --- a/gfx/gfx_widgets.h +++ b/gfx/gfx_widgets.h @@ -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); diff --git a/gfx/widgets/gfx_widget_generic_message.c b/gfx/widgets/gfx_widget_generic_message.c index 5fdf7658b4..34771677e5 100644 --- a/gfx/widgets/gfx_widget_generic_message.c +++ b/gfx/widgets/gfx_widget_generic_message.c @@ -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(); diff --git a/gfx/widgets/gfx_widget_libretro_message.c b/gfx/widgets/gfx_widget_libretro_message.c index 61d41ff2bf..cf4b72ec58 100644 --- a/gfx/widgets/gfx_widget_libretro_message.c +++ b/gfx/widgets/gfx_widget_libretro_message.c @@ -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(); diff --git a/gfx/widgets/gfx_widget_screenshot.c b/gfx/widgets/gfx_widget_screenshot.c index 8196950a95..e1cb09acc7 100644 --- a/gfx/widgets/gfx_widget_screenshot.c +++ b/gfx/widgets/gfx_widget_screenshot.c @@ -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; diff --git a/gfx/widgets/gfx_widget_volume.c b/gfx/widgets/gfx_widget_volume.c index aa63c8a382..bffa592ebf 100644 --- a/gfx/widgets/gfx_widget_volume.c +++ b/gfx/widgets/gfx_widget_volume.c @@ -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 */