LRESULT win32_menu_loop(HWND owner, WPARAM wparam) { WPARAM mode = wparam & 0xffff; enum event_command cmd = CMD_EVENT_NONE; bool do_wm_close = false; settings_t *settings = config_get_ptr(); switch (mode) { case ID_M_LOAD_CORE: case ID_M_LOAD_CONTENT: { char win32_file[PATH_MAX_LENGTH] = {0}; const char *extensions = NULL; const char *title = NULL; const char *initial_dir = NULL; switch (mode) { case ID_M_LOAD_CORE: extensions = "Libretro core (.dll)\0*.dll\0All Files\0*.*\0"; title = msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_LIST); initial_dir = settings->directory.libretro; break; case ID_M_LOAD_CONTENT: extensions = "All Files\0*.*\0"; title = msg_hash_to_str( MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST); initial_dir = settings->directory.menu_content; break; } if (!win32_browser(owner, win32_file, extensions, title, initial_dir)) break; switch (mode) { case ID_M_LOAD_CORE: runloop_ctl(RUNLOOP_CTL_SET_LIBRETRO_PATH, win32_file); cmd = CMD_EVENT_LOAD_CORE; break; case ID_M_LOAD_CONTENT: { content_ctx_info_t content_info = {0}; path_set(RARCH_PATH_CONTENT, win32_file); do_wm_close = true; task_push_content_load_default( NULL, NULL, &content_info, CORE_TYPE_PLAIN, CONTENT_MODE_LOAD_CONTENT_WITH_CURRENT_CORE_FROM_COMPANION_UI, NULL, NULL); } break; } } break; case ID_M_RESET: cmd = CMD_EVENT_RESET; break; case ID_M_MUTE_TOGGLE: cmd = CMD_EVENT_AUDIO_MUTE_TOGGLE; break; case ID_M_MENU_TOGGLE: cmd = CMD_EVENT_MENU_TOGGLE; break; case ID_M_PAUSE_TOGGLE: cmd = CMD_EVENT_PAUSE_TOGGLE; break; case ID_M_LOAD_STATE: cmd = CMD_EVENT_LOAD_STATE; break; case ID_M_SAVE_STATE: cmd = CMD_EVENT_SAVE_STATE; break; case ID_M_DISK_CYCLE: cmd = CMD_EVENT_DISK_EJECT_TOGGLE; break; case ID_M_DISK_NEXT: cmd = CMD_EVENT_DISK_NEXT; break; case ID_M_DISK_PREV: cmd = CMD_EVENT_DISK_PREV; break; case ID_M_FULL_SCREEN: cmd = CMD_EVENT_FULLSCREEN_TOGGLE; break; #ifndef _XBOX case ID_M_SHADER_PARAMETERS: shader_dlg_show(owner); break; #endif case ID_M_MOUSE_GRAB: cmd = CMD_EVENT_GRAB_MOUSE_TOGGLE; break; case ID_M_TAKE_SCREENSHOT: cmd = CMD_EVENT_TAKE_SCREENSHOT; break; case ID_M_QUIT: do_wm_close = true; break; default: if (mode >= ID_M_WINDOW_SCALE_1X && mode <= ID_M_WINDOW_SCALE_10X) { unsigned idx = (mode - (ID_M_WINDOW_SCALE_1X-1)); runloop_ctl(RUNLOOP_CTL_SET_WINDOWED_SCALE, &idx); cmd = CMD_EVENT_RESIZE_WINDOWED_SCALE; } else if (mode == ID_M_STATE_INDEX_AUTO) { signed idx = -1; settings->state_slot = idx; } else if (mode >= (ID_M_STATE_INDEX_AUTO+1) && mode <= (ID_M_STATE_INDEX_AUTO+10)) { signed idx = (mode - (ID_M_STATE_INDEX_AUTO+1)); settings->state_slot = idx; } break; } if (cmd != CMD_EVENT_NONE) command_event(cmd, NULL); if (do_wm_close) PostMessage(owner, WM_CLOSE, 0, 0); return 0L; }
LRESULT win32_menu_loop(HWND owner, WPARAM wparam) { WPARAM mode = wparam & 0xffff; unsigned cmd = RARCH_CMD_NONE; bool do_wm_close = false; switch (mode) { case ID_M_LOAD_CORE: case ID_M_LOAD_CONTENT: { char win32_file[PATH_MAX_LENGTH] = {0}; const char *extensions = NULL; const char *title = NULL; const char *initial_dir = NULL; if (mode == ID_M_LOAD_CORE) { extensions = "All Files\0*.*\0 Libretro core(.dll)\0*.dll\0"; title = "Load Core"; initial_dir = g_settings.libretro_directory; } else if (mode == ID_M_LOAD_CONTENT) { extensions = "All Files\0*.*\0\0"; title = "Load Content"; initial_dir = g_settings.menu_content_directory; } if (win32_browser(owner, win32_file, extensions, title, initial_dir)) { switch (mode) { case ID_M_LOAD_CORE: strlcpy(g_settings.libretro, win32_file, sizeof(g_settings.libretro)); cmd = RARCH_CMD_LOAD_CORE; break; case ID_M_LOAD_CONTENT: strlcpy(g_extern.fullpath, win32_file, sizeof(g_extern.fullpath)); cmd = RARCH_CMD_LOAD_CONTENT; do_wm_close = true; break; } } } break; case ID_M_RESET: cmd = RARCH_CMD_RESET; break; case ID_M_MUTE_TOGGLE: cmd = RARCH_CMD_AUDIO_MUTE_TOGGLE; break; case ID_M_MENU_TOGGLE: cmd = RARCH_CMD_MENU_TOGGLE; break; case ID_M_PAUSE_TOGGLE: cmd = RARCH_CMD_PAUSE_TOGGLE; break; case ID_M_LOAD_STATE: cmd = RARCH_CMD_LOAD_STATE; break; case ID_M_SAVE_STATE: cmd = RARCH_CMD_SAVE_STATE; break; case ID_M_DISK_CYCLE: cmd = RARCH_CMD_DISK_EJECT_TOGGLE; break; case ID_M_DISK_NEXT: cmd = RARCH_CMD_DISK_NEXT; break; case ID_M_DISK_PREV: cmd = RARCH_CMD_DISK_PREV; break; case ID_M_FULL_SCREEN: cmd = RARCH_CMD_FULLSCREEN_TOGGLE; break; case ID_M_MOUSE_GRAB: cmd = RARCH_CMD_GRAB_MOUSE_TOGGLE; break; case ID_M_TAKE_SCREENSHOT: cmd = RARCH_CMD_TAKE_SCREENSHOT; break; case ID_M_QUIT: do_wm_close = true; break; default: if (mode >= ID_M_WINDOW_SCALE_1X && mode <= ID_M_WINDOW_SCALE_10X) { unsigned idx = (mode - (ID_M_WINDOW_SCALE_1X-1)); g_extern.pending.windowed_scale = idx; cmd = RARCH_CMD_RESIZE_WINDOWED_SCALE; } else if (mode == ID_M_STATE_INDEX_AUTO) { signed idx = -1; g_settings.state_slot = idx; } else if (mode >= (ID_M_STATE_INDEX_AUTO+1) && mode <= (ID_M_STATE_INDEX_AUTO+10)) { signed idx = (mode - (ID_M_STATE_INDEX_AUTO+1)); g_settings.state_slot = idx; } break; } if (cmd != RARCH_CMD_NONE) rarch_main_command(cmd); if (do_wm_close) PostMessage(owner, WM_CLOSE, 0, 0); return 0L; }
LRESULT win32_menu_loop(HWND owner, WPARAM wparam) { WPARAM mode = wparam & 0xffff; enum event_command cmd = EVENT_CMD_NONE; bool do_wm_close = false; settings_t *settings = config_get_ptr(); switch (mode) { case ID_M_LOAD_CORE: case ID_M_LOAD_CONTENT: { char win32_file[PATH_MAX_LENGTH] = {0}; const char *extensions = NULL; const char *title = NULL; const char *initial_dir = NULL; switch (mode) { case ID_M_LOAD_CORE: extensions = "All Files\0*.*\0 Libretro core(.dll)\0*.dll\0"; #ifdef HAVE_MENU title = menu_hash_to_str(MENU_LABEL_VALUE_CORE_LIST); #else title = "Load Core"; #endif initial_dir = settings->libretro_directory; break; case ID_M_LOAD_CONTENT: extensions = "All Files\0*.*\0\0"; #ifdef HAVE_MENU title = menu_hash_to_str(MENU_LABEL_VALUE_LOAD_CONTENT_LIST); #else title = "Load Content"; #endif initial_dir = settings->menu_content_directory; break; } if (win32_browser(owner, win32_file, extensions, title, initial_dir)) { switch (mode) { case ID_M_LOAD_CORE: runloop_ctl(RUNLOOP_CTL_SET_LIBRETRO_PATH, win32_file); cmd = EVENT_CMD_LOAD_CORE; break; case ID_M_LOAD_CONTENT: runloop_ctl(RUNLOOP_CTL_SET_CONTENT_PATH, win32_file); cmd = EVENT_CMD_LOAD_CONTENT; do_wm_close = true; break; } } } break; case ID_M_RESET: cmd = EVENT_CMD_RESET; break; case ID_M_MUTE_TOGGLE: cmd = EVENT_CMD_AUDIO_MUTE_TOGGLE; break; case ID_M_MENU_TOGGLE: cmd = EVENT_CMD_MENU_TOGGLE; break; case ID_M_PAUSE_TOGGLE: cmd = EVENT_CMD_PAUSE_TOGGLE; break; case ID_M_LOAD_STATE: cmd = EVENT_CMD_LOAD_STATE; break; case ID_M_SAVE_STATE: cmd = EVENT_CMD_SAVE_STATE; break; case ID_M_DISK_CYCLE: cmd = EVENT_CMD_DISK_EJECT_TOGGLE; break; case ID_M_DISK_NEXT: cmd = EVENT_CMD_DISK_NEXT; break; case ID_M_DISK_PREV: cmd = EVENT_CMD_DISK_PREV; break; case ID_M_FULL_SCREEN: cmd = EVENT_CMD_FULLSCREEN_TOGGLE; break; #ifndef _XBOX case ID_M_SHADER_PARAMETERS: shader_dlg_show(owner); break; #endif case ID_M_MOUSE_GRAB: cmd = EVENT_CMD_GRAB_MOUSE_TOGGLE; break; case ID_M_TAKE_SCREENSHOT: cmd = EVENT_CMD_TAKE_SCREENSHOT; break; case ID_M_QUIT: do_wm_close = true; break; default: if (mode >= ID_M_WINDOW_SCALE_1X && mode <= ID_M_WINDOW_SCALE_10X) { unsigned idx = (mode - (ID_M_WINDOW_SCALE_1X-1)); runloop_ctl(RUNLOOP_CTL_SET_WINDOWED_SCALE, &idx); cmd = EVENT_CMD_RESIZE_WINDOWED_SCALE; } else if (mode == ID_M_STATE_INDEX_AUTO) { signed idx = -1; settings->state_slot = idx; } else if (mode >= (ID_M_STATE_INDEX_AUTO+1) && mode <= (ID_M_STATE_INDEX_AUTO+10)) { signed idx = (mode - (ID_M_STATE_INDEX_AUTO+1)); settings->state_slot = idx; } break; } if (cmd != EVENT_CMD_NONE) event_cmd_ctl(cmd, NULL); if (do_wm_close) PostMessage(owner, WM_CLOSE, 0, 0); return 0L; }
LRESULT win32_menu_loop(HWND owner, WPARAM wparam) { WPARAM mode = wparam & 0xffff; enum event_command cmd = EVENT_CMD_NONE; bool do_wm_close = false; settings_t *settings = config_get_ptr(); global_t *global = global_get_ptr(); (void)global; switch (mode) { case ID_M_LOAD_CORE: case ID_M_LOAD_CONTENT: { char win32_file[PATH_MAX_LENGTH] = {0}; const char *extensions = NULL; const char *title = NULL; const char *initial_dir = NULL; if (mode == ID_M_LOAD_CORE) { extensions = "All Files\0*.*\0 Libretro core(.dll)\0*.dll\0"; title = "Load Core"; initial_dir = settings->libretro_directory; } else if (mode == ID_M_LOAD_CONTENT) { extensions = "All Files\0*.*\0\0"; title = "Load Content"; initial_dir = settings->menu_content_directory; } if (win32_browser(owner, win32_file, extensions, title, initial_dir)) { switch (mode) { case ID_M_LOAD_CORE: strlcpy(settings->libretro, win32_file, sizeof(settings->libretro)); cmd = EVENT_CMD_LOAD_CORE; break; case ID_M_LOAD_CONTENT: strlcpy(global->path.fullpath, win32_file, sizeof(global->path.fullpath)); cmd = EVENT_CMD_LOAD_CONTENT; do_wm_close = true; break; } } } break; case ID_M_RESET: cmd = EVENT_CMD_RESET; break; case ID_M_MUTE_TOGGLE: cmd = EVENT_CMD_AUDIO_MUTE_TOGGLE; break; case ID_M_MENU_TOGGLE: cmd = EVENT_CMD_MENU_TOGGLE; break; case ID_M_PAUSE_TOGGLE: cmd = EVENT_CMD_PAUSE_TOGGLE; break; case ID_M_LOAD_STATE: cmd = EVENT_CMD_LOAD_STATE; break; case ID_M_SAVE_STATE: cmd = EVENT_CMD_SAVE_STATE; break; case ID_M_DISK_CYCLE: cmd = EVENT_CMD_DISK_EJECT_TOGGLE; break; case ID_M_DISK_NEXT: cmd = EVENT_CMD_DISK_NEXT; break; case ID_M_DISK_PREV: cmd = EVENT_CMD_DISK_PREV; break; case ID_M_FULL_SCREEN: cmd = EVENT_CMD_FULLSCREEN_TOGGLE; break; #ifdef HAVE_OPENGL case ID_M_SHADER_PARAMETERS: shader_dlg_show(owner); break; #endif case ID_M_MOUSE_GRAB: cmd = EVENT_CMD_GRAB_MOUSE_TOGGLE; break; case ID_M_TAKE_SCREENSHOT: cmd = EVENT_CMD_TAKE_SCREENSHOT; break; case ID_M_QUIT: do_wm_close = true; break; default: if (mode >= ID_M_WINDOW_SCALE_1X && mode <= ID_M_WINDOW_SCALE_10X) { unsigned idx = (mode - (ID_M_WINDOW_SCALE_1X-1)); global->pending.windowed_scale = idx; cmd = EVENT_CMD_RESIZE_WINDOWED_SCALE; } else if (mode == ID_M_STATE_INDEX_AUTO) { signed idx = -1; settings->state_slot = idx; } else if (mode >= (ID_M_STATE_INDEX_AUTO+1) && mode <= (ID_M_STATE_INDEX_AUTO+10)) { signed idx = (mode - (ID_M_STATE_INDEX_AUTO+1)); settings->state_slot = idx; } break; } if (cmd != EVENT_CMD_NONE) event_command(cmd); if (do_wm_close) PostMessage(owner, WM_CLOSE, 0, 0); return 0L; }
LRESULT win32_menu_loop(HWND owner, WPARAM wparam) { WPARAM mode = wparam & 0xffff; enum event_command cmd = CMD_EVENT_NONE; bool do_wm_close = false; settings_t *settings = config_get_ptr(); switch (mode) { case ID_M_LOAD_CORE: case ID_M_LOAD_CONTENT: { char win32_file[PATH_MAX_LENGTH] = {0}; wchar_t title_wide[PATH_MAX]; char title_cp[PATH_MAX]; const char *extensions = NULL; const char *title = NULL; const char *initial_dir = NULL; size_t converted = 0; switch (mode) { /* OPENFILENAME.lpstrFilter requires a null separated list of name/ext pairs terminated by a second null at the end. */ case ID_M_LOAD_CORE: extensions = "Libretro core (.dll)\0*.dll\0All Files\0*.*\0\0"; title = msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_LIST); initial_dir = settings->paths.directory_libretro; break; case ID_M_LOAD_CONTENT: extensions = "All Files (*.*)\0*.*\0\0"; title = msg_hash_to_str( MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST); initial_dir = settings->paths.directory_menu_content; break; } /* Convert UTF8 to UTF16, then back to the local code page. * This is needed for proper multi-byte string display until Unicode is fully supported. */ MultiByteToWideChar(CP_UTF8, 0, title, -1, title_wide, sizeof(title_wide) / sizeof(title_wide[0])); wcstombs(title_cp, title_wide, sizeof(title_cp) - 1); if (!win32_browser(owner, win32_file, sizeof(win32_file), extensions, title_cp, initial_dir)) break; switch (mode) { case ID_M_LOAD_CORE: rarch_ctl(RARCH_CTL_SET_LIBRETRO_PATH, win32_file); cmd = CMD_EVENT_LOAD_CORE; break; case ID_M_LOAD_CONTENT: { content_ctx_info_t content_info = {0}; path_set(RARCH_PATH_CONTENT, win32_file); do_wm_close = true; task_push_load_content_with_current_core_from_companion_ui( NULL, &content_info, CORE_TYPE_PLAIN, NULL, NULL); } break; } } break; case ID_M_RESET: cmd = CMD_EVENT_RESET; break; case ID_M_MUTE_TOGGLE: cmd = CMD_EVENT_AUDIO_MUTE_TOGGLE; break; case ID_M_MENU_TOGGLE: cmd = CMD_EVENT_MENU_TOGGLE; break; case ID_M_PAUSE_TOGGLE: cmd = CMD_EVENT_PAUSE_TOGGLE; break; case ID_M_LOAD_STATE: cmd = CMD_EVENT_LOAD_STATE; break; case ID_M_SAVE_STATE: cmd = CMD_EVENT_SAVE_STATE; break; case ID_M_DISK_CYCLE: cmd = CMD_EVENT_DISK_EJECT_TOGGLE; break; case ID_M_DISK_NEXT: cmd = CMD_EVENT_DISK_NEXT; break; case ID_M_DISK_PREV: cmd = CMD_EVENT_DISK_PREV; break; case ID_M_FULL_SCREEN: cmd = CMD_EVENT_FULLSCREEN_TOGGLE; break; #ifndef _XBOX case ID_M_SHADER_PARAMETERS: shader_dlg_show(owner); break; #endif case ID_M_MOUSE_GRAB: cmd = CMD_EVENT_GRAB_MOUSE_TOGGLE; break; case ID_M_TAKE_SCREENSHOT: cmd = CMD_EVENT_TAKE_SCREENSHOT; break; case ID_M_QUIT: do_wm_close = true; break; default: if (mode >= ID_M_WINDOW_SCALE_1X && mode <= ID_M_WINDOW_SCALE_10X) { unsigned idx = (mode - (ID_M_WINDOW_SCALE_1X-1)); rarch_ctl(RARCH_CTL_SET_WINDOWED_SCALE, &idx); cmd = CMD_EVENT_RESIZE_WINDOWED_SCALE; } else if (mode == ID_M_STATE_INDEX_AUTO) { signed idx = -1; configuration_set_int(settings, settings->ints.state_slot, idx); } else if (mode >= (ID_M_STATE_INDEX_AUTO+1) && mode <= (ID_M_STATE_INDEX_AUTO+10)) { signed idx = (mode - (ID_M_STATE_INDEX_AUTO+1)); configuration_set_int(settings, settings->ints.state_slot, idx); } break; } if (cmd != CMD_EVENT_NONE) command_event(cmd, NULL); if (do_wm_close) PostMessage(owner, WM_CLOSE, 0, 0); return 0L; }