static void nk_menu_frame(void *data) { float white_bg[16]= { 0.98, 0.98, 0.98, 1, 0.98, 0.98, 0.98, 1, 0.98, 0.98, 0.98, 1, 0.98, 0.98, 0.98, 1, }; unsigned width, height, ticker_limit, i; nk_menu_handle_t *nk = (nk_menu_handle_t*)data; settings_t *settings = config_get_ptr(); bool libretro_running = menu_display_libretro_running(); if (!nk) return; video_driver_get_size(&width, &height); menu_display_set_viewport(); nk_input_begin(&nk->ctx); nk_menu_input_gamepad(nk); nk_menu_input_mouse_movement(&nk->ctx); nk_menu_input_mouse_button(&nk->ctx); nk_menu_input_keyboard(&nk->ctx); if (width != nk->size.x || height != nk->size.y) { nk->size.x = width; nk->size.y = height; nk->size_changed = true; } nk_input_end(&nk->ctx); nk_menu_main(nk); if(nk_window_is_closed(&nk->ctx, "Shader Parameters")) nk_menu_wnd_shader_parameters(nk); nk_common_device_draw(&device, &nk->ctx, width, height, NK_ANTI_ALIASING_ON); menu_display_draw_cursor( &white_bg[0], 64, nk->textures.list[NK_TEXTURE_POINTER], menu_input_mouse_state(MENU_MOUSE_X_AXIS), menu_input_mouse_state(MENU_MOUSE_Y_AXIS), width, height); menu_display_restore_clear_color(); menu_display_unset_viewport(); }
static void mui_frame(void *data) { unsigned header_height; bool display_kb; float black_bg[16] = { 0, 0, 0, 0.75, 0, 0, 0, 0.75, 0, 0, 0, 0.75, 0, 0, 0, 0.75, }; float blue_bg[16] = { 0.13, 0.59, 0.95, 1, 0.13, 0.59, 0.95, 1, 0.13, 0.59, 0.95, 1, 0.13, 0.59, 0.95, 1, }; float lightblue_bg[16] = { 0.89, 0.95, 0.99, 1.00, 0.89, 0.95, 0.99, 1.00, 0.89, 0.95, 0.99, 1.00, 0.89, 0.95, 0.99, 1.00, }; float pure_white[16]= { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; float white_bg[16]= { 0.98, 0.98, 0.98, 1, 0.98, 0.98, 0.98, 1, 0.98, 0.98, 0.98, 1, 0.98, 0.98, 0.98, 1, }; float white_transp_bg[16]= { 0.98, 0.98, 0.98, 0.90, 0.98, 0.98, 0.98, 0.90, 0.98, 0.98, 0.98, 0.90, 0.98, 0.98, 0.98, 0.90, }; float grey_bg[16]= { 0.78, 0.78, 0.78, 1, 0.78, 0.78, 0.78, 1, 0.78, 0.78, 0.78, 1, 0.78, 0.78, 0.78, 1, }; float shadow_bg[16]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.2, 0, 0, 0, 0.2, }; unsigned width, height, ticker_limit, i; char msg[256]; char title[256]; char title_buf[256]; char title_msg[256]; size_t selection; size_t title_margin; uint64_t *frame_count; mui_handle_t *mui = (mui_handle_t*)data; settings_t *settings = config_get_ptr(); const uint32_t normal_color = 0x212121ff; const uint32_t hover_color = 0x212121ff; const uint32_t title_color = 0xffffffff; const uint32_t activetab_color = 0x0096f2ff; const uint32_t passivetab_color = 0x9e9e9eff; bool background_rendered = false; bool libretro_running = menu_display_ctl(MENU_DISPLAY_CTL_LIBRETRO_RUNNING, NULL); video_driver_ctl(RARCH_DISPLAY_CTL_GET_FRAME_COUNT, &frame_count); (void)passivetab_color; (void)activetab_color; if (!mui) return; msg[0] = '\0'; title[0] = '\0'; title_buf[0] = '\0'; title_msg[0] = '\0'; video_driver_get_size(&width, &height); menu_display_ctl(MENU_DISPLAY_CTL_SET_VIEWPORT, NULL); menu_display_ctl(MENU_DISPLAY_CTL_HEADER_HEIGHT, &header_height); if (libretro_running) { menu_display_draw_bg( width, height, mui->textures.white, 0.75f, false, &white_transp_bg[0], &white_bg[0], NULL, NULL, 4, MENU_DISPLAY_PRIM_TRIANGLESTRIP); } else { menu_display_clear_color(1.0f, 1.0f, 1.0f, 0.75f); if (mui->textures.bg.id) { background_rendered = true; /* Set new opacity for transposed white background */ bgcolor_setalpha(white_transp_bg, 0.30); menu_display_draw_bg( width, height, mui->textures.bg.id, 0.75f, true, &white_transp_bg[0], &white_bg[0], NULL, NULL, 4, MENU_DISPLAY_PRIM_TRIANGLESTRIP); /* Restore opacity of transposed white background */ bgcolor_setalpha(white_transp_bg, 0.90); } } menu_entries_get_title(title, sizeof(title)); if (!menu_navigation_ctl(MENU_NAVIGATION_CTL_GET_SELECTION, &selection)) return; if (background_rendered || libretro_running) bgcolor_setalpha(lightblue_bg, 0.75); else bgcolor_setalpha(lightblue_bg, 1.0); /* highlighted entry */ mui_render_quad(mui, 0, header_height - mui->scroll_y + mui->line_height * selection, width, mui->line_height, width, height, &lightblue_bg[0]); menu_display_font_bind_block(&mui->list_block); mui_render_menu_list(mui, width, height, normal_color, hover_color, &pure_white[0]); menu_display_ctl(MENU_DISPLAY_CTL_FONT_FLUSH_BLOCK, NULL); menu_animation_ctl(MENU_ANIMATION_CTL_SET_ACTIVE, NULL); /* header */ mui_render_quad(mui, 0, 0, width, header_height, width, height, &blue_bg[0]); mui->tabs_height = 0; /* display tabs if depth equal one, if not hide them */ if (mui_list_get_size(mui, MENU_LIST_PLAIN) == 1) { mui_draw_tab_begin(mui, width, height, &white_bg[0], &grey_bg[0]); for (i = 0; i <= MUI_SYSTEM_TAB_END; i++) mui_draw_tab(mui, i, width, height, &pure_white[0]); mui_draw_tab_end(mui, width, height, header_height, &blue_bg[0]); } mui_render_quad(mui, 0, header_height, width, mui->shadow_height, width, height, &shadow_bg[0]); title_margin = mui->margin; if (menu_entries_ctl(MENU_ENTRIES_CTL_SHOW_BACK, NULL)) { title_margin = mui->icon_size; mui_draw_icon(mui, mui->textures.list[MUI_TEXTURE_BACK].id, 0, 0, width, height, 0, 1, &pure_white[0]); } ticker_limit = (width - mui->margin*2) / mui->glyph_width; menu_animation_ticker_str(title_buf, ticker_limit, *frame_count / 100, title, true); /* Title */ if (mui_get_core_title(title_msg, sizeof(title_msg)) == 0) { char title_buf_msg_tmp[256]; char title_buf_msg[256]; size_t usable_width = width - (mui->margin * 2); int ticker_limit, value_len; snprintf(title_buf_msg, sizeof(title_buf), "%s (%s)", title_buf, title_msg); value_len = strlen(title_buf); ticker_limit = (usable_width / mui->glyph_width) - (value_len + 2); menu_animation_ticker_str(title_buf_msg_tmp, ticker_limit, *frame_count / 20, title_buf_msg, true); strlcpy(title_buf, title_buf_msg_tmp, sizeof(title_buf)); } mui_blit_line(title_margin, header_height / 2, width, height, title_buf, title_color, TEXT_ALIGN_LEFT); mui_draw_scrollbar(mui, width, height, &grey_bg[0]); menu_input_ctl(MENU_INPUT_CTL_KEYBOARD_DISPLAY, &display_kb); if (display_kb) { const char *str = NULL, *label = NULL; menu_input_ctl(MENU_INPUT_CTL_KEYBOARD_BUFF_PTR, &str); menu_input_ctl(MENU_INPUT_CTL_KEYBOARD_LABEL, &label); if (!str) str = ""; mui_render_quad(mui, 0, 0, width, height, width, height, &black_bg[0]); snprintf(msg, sizeof(msg), "%s\n%s", label, str); mui_render_messagebox(msg); } if (!string_is_empty(mui->box_message)) { mui_render_quad(mui, 0, 0, width, height, width, height, &black_bg[0]); mui_render_messagebox(mui->box_message); mui->box_message[0] = '\0'; } if (settings->menu.mouse.enable && (settings->video.fullscreen || !video_driver_ctl(RARCH_DISPLAY_CTL_HAS_WINDOWED, NULL))) { int16_t mouse_x = menu_input_mouse_state(MENU_MOUSE_X_AXIS); int16_t mouse_y = menu_input_mouse_state(MENU_MOUSE_Y_AXIS); mui_draw_cursor(mui, &white_bg[0], mouse_x, mouse_y, width, height); } menu_display_restore_clear_color(); menu_display_ctl(MENU_DISPLAY_CTL_UNSET_VIEWPORT, NULL); }