diff --git a/360/main.c b/360/main.c index 37eab22f0d..aca493adb3 100644 --- a/360/main.c +++ b/360/main.c @@ -341,8 +341,6 @@ begin_loop: if(g_console.mode_switch == MODE_EMULATION) { bool repeat = false; - if(g_console.ingame_menu_item != 0) - g_console.ingame_menu_enable = true; input_xdk360.poll(NULL); diff --git a/360/media/ssnes_main.xui b/360/media/ssnes_main.xui index cb790dcb93..1f37610c1b 100644 --- a/360/media/ssnes_main.xui +++ b/360/media/ssnes_main.xui @@ -14,20 +14,21 @@ XuiBtnRomBrowser -481.112000 +488.312012 38.000000 -43.887970,58.455994,0.000000 +38.127724,64.215515,0.000000 +245.362122,102.247192,0.000000 XuiBtnQuit -XuiBtnSettings +XuiBtnQuickMenu ROM Browser XuiTxtTitle -240.000000 +247.200012 40.000000 -49.341614,15.399994,0.000000 +43.581604,21.159988,0.000000 SSNES 360 0xff0f0f0f 0x800f0f0f @@ -38,10 +39,10 @@ XuiBtnSettings -481.112000 +488.312012 38.000000 -43.887970,109.855988,0.000000 -XuiBtnRomBrowser +38.127960,201.615982,0.000000 +XuiBtnControls XuiBtnQuit Settings @@ -49,9 +50,10 @@ XuiBtnQuit -481.112000 +488.312012 38.000000 -44.087982,158.855988,0.000000 +38.327736,246.007980,0.000000 +245.162109,-84.153275,0.000000 XuiBtnSettings XuiBtnRomBrowser Quit @@ -77,5 +79,27 @@ Arial Unicode MS + + +XuiBtnQuickMenu +488.312012 +38.000000 +38.130001,111.655991,0.000000 +XuiBtnRomBrowser +XuiBtnControls +Quick Menu + + + + +XuiBtnControls +488.312012 +38.000000 +38.130001,156.655991,0.000000 +XuiBtnQuickMenu +XuiBtnSettings +Controls + + diff --git a/360/media/ssnes_quickmenu.xui b/360/media/ssnes_quickmenu.xui new file mode 100644 index 0000000000..2a91c77aff --- /dev/null +++ b/360/media/ssnes_quickmenu.xui @@ -0,0 +1,121 @@ + + +1280.000000 +720.000000 + + + +XuiScene1 +584.528076 +363.320007 +347.429474,184.843964,0.000000 +SSNESQuickMenu + + + +XuiBtnLoadState +488.312012 +38.000000 +38.127724,64.215515,0.000000 +245.362122,102.247192,0.000000 +XuiBackButton +XuiBackButton +XuiBtnReturnToGame +XuiBtnSaveState +Load State #0 + + + + +XuiTxtTitle +121.056023 +40.000000 +43.581604,21.159988,0.000000 +Quick Menu +0xff0f0f0f +0x800f0f0f +Arial Unicode MS +21 + + + + +XuiBtnFrameAdvance +488.312012 +38.000000 +38.127960,201.615982,0.000000 +XuiBackButton +XuiBackButton +XuiBtnFilteringShader +XuiBtnReturnToGame +Frame Advance + + + + +XuiBtnReturnToGame +488.312012 +38.000000 +38.327736,246.007980,0.000000 +245.162109,-84.153275,0.000000 +XuiBackButton +XuiBackButton +XuiBtnFrameAdvance +XuiBtnLoadState +Return to Game + + + + +XuiBtnSaveState +488.312012 +38.000000 +38.130001,111.655991,0.000000 +XuiBackButton +XuiBackButton +XuiBtnLoadState +XuiBtnFilteringShader +Save State #0 + + + + +XuiBtnFilteringShader +488.312012 +38.000000 +38.130001,156.655991,0.000000 +XuiBackButton +XuiBackButton +XuiBtnSaveState +XuiBtnFrameAdvance + + + + +XuiTxtTitle1 +45.024040 +40.000000 +493.581604,21.159988,0.000000 +1/2 +0xff0f0f0f +0x800f0f0f +Arial Unicode MS +21 + + + + +XuiBackButton +208.632019 +36.000000 +356.670013,309.000000,0.000000 +XuiBtnLoadState +XuiBtnLoadState +XuiBtnReturnToGame +XuiBtnLoadState +Go back to menu +22593 + + + + diff --git a/360/media/ssnes_settings.xui b/360/media/ssnes_settings.xui index 0bb89ad9aa..9c67735e27 100644 --- a/360/media/ssnes_settings.xui +++ b/360/media/ssnes_settings.xui @@ -33,7 +33,7 @@ XuiBackButton XuiBtnRewind XuiBackButton1 -XuiBackButton1 +XuiBtnHWFilter XuiBackButton1 Go back to menu 22593 @@ -42,7 +42,7 @@ XuiBtnRewind -215.000000 +465.905640 38.000000 24.447998,58.447998,0.000000 XuiBackButton1 @@ -57,13 +57,13 @@ XuiCheckbox1 56.304016 50.000000 -252.000000,58.000000,0.000000 +507.000000,58.000000,0.000000 XuiBtnHWFilter -215.000000 +465.905640 38.000000 24.447998,108.447998,0.000000 XuiBackButton1 diff --git a/360/menu.cpp b/360/menu.cpp index ea7682e78e..d2429752f4 100644 --- a/360/menu.cpp +++ b/360/menu.cpp @@ -32,11 +32,19 @@ CSSNES app; filebrowser_t browser; char strbuffer[1024]; +static void return_to_game (void) +{ + g_console.frame_advance_enable = false; + g_console.menu_enable = false; + g_console.mode_switch = MODE_EMULATION; +} + /* Register custom classes */ HRESULT CSSNES::RegisterXuiClasses (void) { CSSNESMain::Register(); CSSNESFileBrowser::Register(); + CSSNESQuickMenu::Register(); CSSNESSettings::Register(); return S_OK; } @@ -46,6 +54,7 @@ HRESULT CSSNES::UnregisterXuiClasses (void) { CSSNESMain::Unregister(); CSSNESFileBrowser::Unregister(); + CSSNESQuickMenu::Register(); CSSNESSettings::Unregister(); return S_OK; } @@ -88,10 +97,10 @@ static void set_filter_element(int index, CXuiControl * obj) switch(index) { case FALSE: - obj->SetText(L"Point filtering"); + obj->SetText(L"Hardware filtering: Point filtering"); break; case TRUE: - obj->SetText(L"Linear interpolation"); + obj->SetText(L"Hardware filtering: Linear interpolation"); break; } } @@ -108,13 +117,54 @@ HRESULT CSSNESSettings::OnInit(XUIMessageInit * pInitData, BOOL& bHandled) return S_OK; } +HRESULT CSSNESQuickMenu::OnInit(XUIMessageInit * pInitData, BOOL& bHandled) +{ + GetChildById(L"XuiBtnLoadState", &m_loadstate); + GetChildById(L"XuiBtnSaveState", &m_savestate); + GetChildById(L"XuiBtnFilteringShader", &m_hw_filter); + GetChildById(L"XuiBtnFrameAdvance", &m_frame_advance); + GetChildById(L"XuiBtnReturnToGame", &m_return_to_game); + GetChildById(L"XuiBackButton", &m_back); + + set_filter_element(g_settings.video.smooth, &m_hw_filter); + return S_OK; +} + +HRESULT CSSNESQuickMenu::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled ) +{ + if ( hObjPressed == m_hw_filter) + g_settings.video.smooth = !g_settings.video.smooth; + else if ( hObjPressed == m_loadstate && g_console.emulator_initialized) + { + ssnes_load_state(); + return_to_game(); + } + else if ( hObjPressed == m_frame_advance && g_console.emulator_initialized) + { + g_console.frame_advance_enable = true; + g_console.menu_enable = false; + g_console.mode_switch = MODE_EMULATION; + } + else if ( hObjPressed == m_return_to_game && g_console.emulator_initialized) + return_to_game(); + else if ( hObjPressed == m_back ) + NavigateBack(app.hMainScene); + + set_filter_element(g_settings.video.smooth, &m_hw_filter); + bHandled = TRUE; + return S_OK; +} + HRESULT CSSNESMain::OnInit(XUIMessageInit * pInitData, BOOL& bHandled) { GetChildById(L"XuiBtnRomBrowser", &m_filebrowser); GetChildById(L"XuiBtnSettings", &m_settings); + GetChildById(L"XuiBtnQuickMenu", &m_quick_menu); + GetChildById(L"XuiBtnControls", &m_controls); GetChildById(L"XuiBtnQuit", &m_quit); GetChildById(L"XuiTxtTitle", &m_title); GetChildById(L"XuiTxtCoreText", &m_core); + const char * core_text = snes_library_id(); char package_version[32]; sprintf(package_version, "SSNES %s", PACKAGE_VERSION); @@ -143,8 +193,8 @@ HRESULT CSSNESFileBrowser::OnNotifyPress( HXUIOBJ hObjPressed, BOOL& bHandled ) wcstombs(strbuffer, (const wchar_t *)m_romlist.GetText(index), sizeof(strbuffer)); memset(g_console.rom_path, 0, sizeof(g_console.rom_path)); sprintf(g_console.rom_path, "%s%s", g_console.default_rom_startup_dir, strbuffer); - g_console.menu_enable = false; - g_console.mode_switch = MODE_EMULATION; + + return_to_game(); g_console.initialize_ssnes_enable = 1; } else if(browser.cur[index].d_type == FILE_ATTRIBUTE_DIRECTORY) @@ -157,9 +207,7 @@ HRESULT CSSNESFileBrowser::OnNotifyPress( HXUIOBJ hObjPressed, BOOL& bHandled ) } } else if(hObjPressed == m_back) - { NavigateBack(app.hMainScene); - } bHandled = TRUE; return S_OK; @@ -177,16 +225,8 @@ HRESULT CSSNESSettings::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled ) g_settings.video.smooth = !g_settings.video.smooth; } else if ( hObjPressed == m_back ) - { - HRESULT hr = XuiSceneNavigateBack(app.hSSNESSettings, app.hMainScene, XUSER_INDEX_FOCUS); - - if (FAILED(hr)) - { - SSNES_ERR("Failed to load scene.\n"); - } - NavigateBack(app.hMainScene); - } + set_filter_element(g_settings.video.smooth, &m_hw_filter); bHandled = TRUE; return S_OK; @@ -207,6 +247,15 @@ HRESULT CSSNESMain::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled ) NavigateForward(app.hFileBrowser); } + else if ( hObjPressed == m_quick_menu) + { + hr = XuiSceneCreate(L"file://game:/media/", L"ssnes_quickmenu.xur", NULL, &app.hQuickMenu); + + if (FAILED(hr)) + SSNES_ERR("Failed to load scene.\n"); + + NavigateForward(app.hQuickMenu); + } else if ( hObjPressed == m_settings ) { hr = XuiSceneCreate(L"file://game:/media/", L"ssnes_settings.xur", NULL, &app.hSSNESSettings); @@ -275,13 +324,13 @@ void menu_loop(void) HRESULT hr; xdk360_video_t *vid = (xdk360_video_t*)g_d3d; - if(g_console.ingame_menu_enable) + if(g_console.emulator_initialized) video_xdk360.set_swap_block_state(NULL, true); do { g_frame_count++; - if(g_console.ingame_menu_enable) + if(g_console.emulator_initialized) ssnes_render_cached_frame(); else vid->xdk360_render_device->Clear(0, NULL, @@ -296,19 +345,19 @@ void menu_loop(void) && IS_TIMER_EXPIRED()); g_console.mode_switch = g_console.menu_enable ? MODE_MENU : MODE_EMULATION; - if(g_console.mode_switch == MODE_EMULATION) - { - SET_TIMER_EXPIRATION(30); - } - app.RunFrame(); /* Update XUI */ hr = app.Render(); /* Render XUI */ hr = XuiTimersRun(); /* Update XUI timers */ + if(g_console.mode_switch == MODE_EMULATION && !g_console.frame_advance_enable) + { + SET_TIMER_EXPIRATION(30); + } + video_xdk360.swap(NULL); }while(g_console.menu_enable); - if(g_console.ingame_menu_enable) + if(g_console.emulator_initialized) video_xdk360.set_swap_block_state(NULL, false); g_console.ingame_menu_enable = false; diff --git a/360/menu.h b/360/menu.h index 3cb1e13fcc..836d01d006 100644 --- a/360/menu.h +++ b/360/menu.h @@ -27,6 +27,7 @@ class CSSNES : public CXuiModule public: HXUIOBJ hMainScene; HXUIOBJ hFileBrowser; + HXUIOBJ hQuickMenu; HXUIOBJ hSSNESSettings; protected: /* Override so that Cssnes can register classes */ @@ -39,6 +40,8 @@ class CSSNESMain: public CXuiSceneImpl { protected: CXuiControl m_filebrowser; + CXuiControl m_quick_menu; + CXuiControl m_controls; CXuiControl m_settings; CXuiControl m_quit; CXuiTextElement m_title; @@ -73,6 +76,27 @@ public: XUI_IMPLEMENT_CLASS(CSSNESFileBrowser, L"SSNESFileBrowser", XUI_CLASS_SCENE) }; +class CSSNESQuickMenu: public CXuiSceneImpl +{ +protected: + CXuiControl m_loadstate; + CXuiControl m_savestate; + CXuiControl m_hw_filter; + CXuiControl m_frame_advance; + CXuiControl m_return_to_game; + CXuiControl m_back; +public: + HRESULT OnInit( XUIMessageInit* pInitData, int & bHandled ); + HRESULT OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled ); + + XUI_BEGIN_MSG_MAP() + XUI_ON_XM_INIT( OnInit) + XUI_ON_XM_NOTIFY_PRESS( OnNotifyPress ) + XUI_END_MSG_MAP(); + + XUI_IMPLEMENT_CLASS(CSSNESQuickMenu, L"SSNESQuickMenu", XUI_CLASS_SCENE) +}; + class CSSNESSettings: public CXuiSceneImpl { protected: diff --git a/360/xdk360_input.cpp b/360/xdk360_input.cpp index 5bac7dabe6..814653d493 100644 --- a/360/xdk360_input.cpp +++ b/360/xdk360_input.cpp @@ -107,9 +107,9 @@ static bool xdk360_key_pressed(void *data, int key) { g_console.menu_enable = true; g_console.ingame_menu_enable = true; - g_console.mode_switch = MODE_EMULATION; + g_console.mode_switch = MODE_MENU; } - return g_console.frame_advance_enable; + return false; case SSNES_REWIND: return ((state[0].Gamepad.sThumbRY > DEADZONE) && !(state[0].Gamepad.bRightTrigger > 128)); case SSNES_QUIT_KEY: diff --git a/msvc-360/SSNES-360/SSNES-360.vcxproj b/msvc-360/SSNES-360/SSNES-360.vcxproj index 2a9c07257c..7e325822d7 100644 --- a/msvc-360/SSNES-360/SSNES-360.vcxproj +++ b/msvc-360/SSNES-360/SSNES-360.vcxproj @@ -498,6 +498,23 @@ $(OutDir)media\Arial_12.xpr;%(Outputs) + + + Document + xui2bin /D /NOLOGO "%(RelativeDir)ssnes_quickmenu.xui" "$(OutDir)media\ssnes_quickmenu.xur" + xui2bin /D /NOLOGO "%(RelativeDir)ssnes_quickmenu.xui" "$(OutDir)media\ssnes_quickmenu.xur" + xui2bin /D /NOLOGO "%(RelativeDir)ssnes_quickmenu.xui" "$(OutDir)media\ssnes_quickmenu.xur" + xui2bin /D /NOLOGO "%(RelativeDir)ssnes_quickmenu.xui" "$(OutDir)media\ssnes_quickmenu.xur" + xui2bin /D /NOLOGO "%(RelativeDir)ssnes_quickmenu.xui" "$(OutDir)media\ssnes_quickmenu.xur" + xui2bin /D /NOLOGO "%(RelativeDir)ssnes_quickmenu.xui" "$(OutDir)media\ssnes_quickmenu.xur" + $(OutDir)media\ssnes_quickmenu.xur; + $(OutDir)media\ssnes_quickmenu.xur; + $(OutDir)media\ssnes_quickmenu.xur; + $(OutDir)media\ssnes_quickmenu.xur; + $(OutDir)media\ssnes_quickmenu.xur; + $(OutDir)media\ssnes_quickmenu.xur; + + diff --git a/msvc-360/SSNES-360/SSNES-360.vcxproj.filters b/msvc-360/SSNES-360/SSNES-360.vcxproj.filters index 015f87c201..3ac3d35f3b 100644 --- a/msvc-360/SSNES-360/SSNES-360.vcxproj.filters +++ b/msvc-360/SSNES-360/SSNES-360.vcxproj.filters @@ -258,5 +258,8 @@ Source Files\media + + Source Files\media + \ No newline at end of file