mirror of
https://github.com/libretro/RetroArch
synced 2025-01-30 12:32:52 +00:00
(360/Menu) Implement render_messagebox through custom message
queue
This commit is contained in:
parent
6b470442e6
commit
01f02568b2
@ -44,6 +44,7 @@ HXUIOBJ m_menutitlebottom;
|
|||||||
HXUIOBJ m_back;
|
HXUIOBJ m_back;
|
||||||
HXUIOBJ root_menu;
|
HXUIOBJ root_menu;
|
||||||
HXUIOBJ current_menu;
|
HXUIOBJ current_menu;
|
||||||
|
static msg_queue_t *xui_msg_queue;
|
||||||
|
|
||||||
class CRetroArch : public CXuiModule
|
class CRetroArch : public CXuiModule
|
||||||
{
|
{
|
||||||
@ -230,6 +231,8 @@ static void* rmenu_xui_init(void *video_data)
|
|||||||
driver.video_poke->set_texture_frame(video_data, NULL,
|
driver.video_poke->set_texture_frame(video_data, NULL,
|
||||||
true, 0, 0, 1.0f);
|
true, 0, 0, 1.0f);
|
||||||
|
|
||||||
|
xui_msg_queue = msg_queue_new(16);
|
||||||
|
|
||||||
return rgui;
|
return rgui;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -237,6 +240,52 @@ static void rmenu_xui_free(void *data)
|
|||||||
{
|
{
|
||||||
(void)data;
|
(void)data;
|
||||||
app.Uninit();
|
app.Uninit();
|
||||||
|
|
||||||
|
if (xui_msg_queue)
|
||||||
|
msg_queue_free(xui_msg_queue);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void xui_render_message(const char *msg)
|
||||||
|
{
|
||||||
|
font_params_t font_parms;
|
||||||
|
size_t i, j;
|
||||||
|
|
||||||
|
struct string_list *list = string_split(msg, "\n");
|
||||||
|
if (!list)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (list->elems == 0)
|
||||||
|
{
|
||||||
|
string_list_free(list);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
j = 0;
|
||||||
|
for (i = 0; i < list->size; i++, j++)
|
||||||
|
{
|
||||||
|
char *msg = list->elems[i].data;
|
||||||
|
unsigned msglen = strlen(msg);
|
||||||
|
#if 0
|
||||||
|
if (msglen > RMENU_TERM_WIDTH)
|
||||||
|
{
|
||||||
|
msg[RMENU_TERM_WIDTH - 2] = '.';
|
||||||
|
msg[RMENU_TERM_WIDTH - 1] = '.';
|
||||||
|
msg[RMENU_TERM_WIDTH - 0] = '.';
|
||||||
|
msg[RMENU_TERM_WIDTH + 1] = '\0';
|
||||||
|
msglen = RMENU_TERM_WIDTH;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
float msg_width = (g_extern.lifecycle_state & (1ULL << MODE_MENU_HD)) ? 160 : 100;
|
||||||
|
float msg_height = 120;
|
||||||
|
float msg_offset = 32;
|
||||||
|
|
||||||
|
font_parms.x = msg_width;
|
||||||
|
font_parms.y = msg_height + (msg_offset * j);
|
||||||
|
font_parms.scale = 21;
|
||||||
|
|
||||||
|
if (driver.video_poke && driver.video_poke->set_osd_msg)
|
||||||
|
driver.video_poke->set_osd_msg(driver.video_data, msg, &font_parms);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool menu_iterate_xui(void)
|
bool menu_iterate_xui(void)
|
||||||
@ -267,6 +316,17 @@ bool menu_iterate_xui(void)
|
|||||||
|
|
||||||
XuiRenderSetViewTransform( app.GetDC(), &matOrigView );
|
XuiRenderSetViewTransform( app.GetDC(), &matOrigView );
|
||||||
|
|
||||||
|
const char *message = msg_queue_pull(xui_msg_queue);
|
||||||
|
|
||||||
|
if (message)
|
||||||
|
xui_render_message(message);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const char *message = msg_queue_pull(g_extern.msg_queue);
|
||||||
|
if (message)
|
||||||
|
xui_render_message(message);
|
||||||
|
}
|
||||||
|
|
||||||
XuiRenderEnd( app.GetDC() );
|
XuiRenderEnd( app.GetDC() );
|
||||||
|
|
||||||
d3dr->SetViewport(&d3d->final_viewport);
|
d3dr->SetViewport(&d3d->final_viewport);
|
||||||
@ -315,9 +375,8 @@ static void rmenu_xui_render_background(void *data, void *video_data)
|
|||||||
|
|
||||||
static void rmenu_xui_render_messagebox(void *data, void *video_data, const char *message)
|
static void rmenu_xui_render_messagebox(void *data, void *video_data, const char *message)
|
||||||
{
|
{
|
||||||
(void)data;
|
msg_queue_clear(xui_msg_queue);
|
||||||
(void)video_data;
|
msg_queue_push(xui_msg_queue, message, 2, 1);
|
||||||
(void)message;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rmenu_xui_render(void *data, void *video_data)
|
static void rmenu_xui_render(void *data, void *video_data)
|
||||||
@ -592,7 +651,7 @@ static void rmenu_xui_populate_entries(void *data, unsigned i)
|
|||||||
|
|
||||||
const menu_ctx_driver_t menu_ctx_rmenu_xui = {
|
const menu_ctx_driver_t menu_ctx_rmenu_xui = {
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
rmenu_xui_render_messagebox,
|
||||||
rmenu_xui_render,
|
rmenu_xui_render,
|
||||||
rmenu_xui_init,
|
rmenu_xui_init,
|
||||||
rmenu_xui_free,
|
rmenu_xui_free,
|
||||||
|
@ -798,7 +798,7 @@ static bool d3d_frame(void *data, const void *frame,
|
|||||||
float msg_height = 365;
|
float msg_height = 365;
|
||||||
#elif defined(_XBOX360)
|
#elif defined(_XBOX360)
|
||||||
float msg_width = (g_extern.lifecycle_state & (1ULL << MODE_MENU_HD)) ? 160 : 100;
|
float msg_width = (g_extern.lifecycle_state & (1ULL << MODE_MENU_HD)) ? 160 : 100;
|
||||||
float msg_height = 120;
|
float msg_height = 90;
|
||||||
#endif
|
#endif
|
||||||
font_params_t font_parms = {0};
|
font_params_t font_parms = {0};
|
||||||
font_parms.x = msg_width;
|
font_parms.x = msg_width;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user