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