Fixed path of banner.bin in GamelistCtrl not getting the good TitleID, replaced fullscreen on Esc key by Alt+Enter, Esc now escape fullscreen or stop emulation (as requested, but i find it better too)
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@3101 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
be61375c01
commit
870242fc79
|
@ -23,6 +23,7 @@
|
||||||
#include "ColorUtil.h"
|
#include "ColorUtil.h"
|
||||||
#include "BannerLoaderWii.h"
|
#include "BannerLoaderWii.h"
|
||||||
#include "FileUtil.h"
|
#include "FileUtil.h"
|
||||||
|
#include "../../Core/Src/VolumeHandler.h"
|
||||||
|
|
||||||
namespace DiscIO
|
namespace DiscIO
|
||||||
{
|
{
|
||||||
|
@ -32,11 +33,13 @@ CBannerLoaderWii::CBannerLoaderWii(DiscIO::IFileSystem& _rFileSystem)
|
||||||
, m_IsValid(false)
|
, m_IsValid(false)
|
||||||
{
|
{
|
||||||
char Filename[260];
|
char Filename[260];
|
||||||
char TitleID[4];
|
u64 TitleID;
|
||||||
|
|
||||||
_rFileSystem.GetVolume()->Read(0, 4, (u8*)TitleID);
|
_rFileSystem.GetVolume()->RAWRead((u64)0x0F8001DC, 8, (u8*)&TitleID);
|
||||||
sprintf(Filename, FULL_WII_USER_DIR "title/00010000/%02x%02x%02x%02x/data/banner.bin",
|
TitleID = Common::swap64(TitleID);
|
||||||
(u8)TitleID[0], (u8)TitleID[1], (u8)TitleID[2], (u8)TitleID[3]);
|
|
||||||
|
sprintf(Filename, FULL_WII_USER_DIR "title/%08x/%08x/data/banner.bin",
|
||||||
|
(u32)(TitleID>>32), (u32)TitleID);
|
||||||
|
|
||||||
if (!File::Exists(Filename))
|
if (!File::Exists(Filename))
|
||||||
{
|
{
|
||||||
|
|
|
@ -166,8 +166,6 @@ bool CFileSystemGCWii::InitFileSystem()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Mario Kart Wii gets here on its third partition...
|
|
||||||
// Does it use a fake partition ? another type we don't know ?
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -178,8 +178,10 @@ int abc = 0;
|
||||||
case OPENGL_WM_USER_CREATE:
|
case OPENGL_WM_USER_CREATE:
|
||||||
// We don't have a local setting for bRenderToMain but we can detect it this way instead
|
// We don't have a local setting for bRenderToMain but we can detect it this way instead
|
||||||
//PanicAlert("main call %i %i %i %i", lParam, (HWND)Core::GetWindowHandle(), MSWGetParent_((HWND)Core::GetWindowHandle()), (HWND)this->GetHWND());
|
//PanicAlert("main call %i %i %i %i", lParam, (HWND)Core::GetWindowHandle(), MSWGetParent_((HWND)Core::GetWindowHandle()), (HWND)this->GetHWND());
|
||||||
if (lParam == NULL) main_frame->bRenderToMain = false;
|
if (lParam == NULL)
|
||||||
else main_frame->bRenderToMain = true;
|
main_frame->bRenderToMain = false;
|
||||||
|
else
|
||||||
|
main_frame->bRenderToMain = true;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case NJOY_RELOAD:
|
case NJOY_RELOAD:
|
||||||
|
@ -470,7 +472,6 @@ void CFrame::OnClose(wxCloseEvent& event)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
void CFrame::OnHostMessage(wxCommandEvent& event)
|
void CFrame::OnHostMessage(wxCommandEvent& event)
|
||||||
{
|
{
|
||||||
switch (event.GetId())
|
switch (event.GetId())
|
||||||
|
@ -496,13 +497,25 @@ void CFrame::OnGameListCtrl_ItemActivated(wxListEvent& WXUNUSED (event))
|
||||||
|
|
||||||
void CFrame::OnKeyDown(wxKeyEvent& event)
|
void CFrame::OnKeyDown(wxKeyEvent& event)
|
||||||
{
|
{
|
||||||
// Toggle fullscreen from Alt + Enter or Esc
|
// Escape key turn off fullscreen then Stop emulation in windowed mode
|
||||||
if (((event.GetKeyCode() == WXK_RETURN) && (event.GetModifiers() == wxMOD_ALT)) ||
|
if (event.GetKeyCode() == WXK_ESCAPE)
|
||||||
(event.GetKeyCode() == WXK_ESCAPE))
|
|
||||||
{
|
{
|
||||||
ShowFullScreen(!IsFullScreen());
|
if (IsFullScreen())
|
||||||
|
{
|
||||||
|
ShowFullScreen(false);
|
||||||
|
MSWSetCursor(true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
DoStop();
|
||||||
|
|
||||||
UpdateGUI();
|
UpdateGUI();
|
||||||
}
|
}
|
||||||
|
if (event.GetKeyCode() == WXK_RETURN && event.GetModifiers() == wxMOD_ALT)
|
||||||
|
{
|
||||||
|
// For some reasons, wxWidget doesn't proccess the Alt+Enter event there on windows.
|
||||||
|
// But still, pressing Alt+Enter make it Fullscreen, So this is for other OS... :P
|
||||||
|
ShowFullScreen(!IsFullScreen());
|
||||||
|
}
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
if(event.GetKeyCode() == 'E','M') // Send this to the video plugin WndProc
|
if(event.GetKeyCode() == 'E','M') // Send this to the video plugin WndProc
|
||||||
{
|
{
|
||||||
|
@ -597,7 +610,8 @@ void CFrame::OnDoubleClick(wxMouseEvent& event)
|
||||||
#endif
|
#endif
|
||||||
m_fLastClickTime -= 10; // Don't treat repeated clicks as double clicks
|
m_fLastClickTime -= 10; // Don't treat repeated clicks as double clicks
|
||||||
}
|
}
|
||||||
// --------------------------
|
|
||||||
|
UpdateGUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -579,6 +579,11 @@ void CFrame::DoStop()
|
||||||
|
|
||||||
if (Core::GetState() != Core::CORE_UNINITIALIZED)
|
if (Core::GetState() != Core::CORE_UNINITIALIZED)
|
||||||
{
|
{
|
||||||
|
// Ask for confirmation in case the user accidently clicked Stop / Escape
|
||||||
|
if(SConfig::GetInstance().m_LocalCoreStartupParameter.bConfirmStop)
|
||||||
|
if(!AskYesNo("Are you sure you want to stop the current emulation?", "Confirm", wxYES_NO))
|
||||||
|
return;
|
||||||
|
|
||||||
Core::Stop();
|
Core::Stop();
|
||||||
|
|
||||||
/* This is needed together with the option to not "delete g_EmuThread" in Core.cpp, because then
|
/* This is needed together with the option to not "delete g_EmuThread" in Core.cpp, because then
|
||||||
|
@ -600,19 +605,7 @@ void CFrame::DoStop()
|
||||||
|
|
||||||
void CFrame::OnStop(wxCommandEvent& WXUNUSED (event))
|
void CFrame::OnStop(wxCommandEvent& WXUNUSED (event))
|
||||||
{
|
{
|
||||||
// Ask for confirmation in case the user accidently clicked Stop
|
DoStop();
|
||||||
bool answer;
|
|
||||||
if(SConfig::GetInstance().m_LocalCoreStartupParameter.bConfirmStop)
|
|
||||||
{
|
|
||||||
answer = AskYesNo("Are you sure you want to stop the current emulation?",
|
|
||||||
"Confirm", wxYES_NO);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
answer = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (answer) DoStop();
|
|
||||||
}
|
}
|
||||||
////////////////////////////////////////////////////
|
////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
|
@ -210,7 +210,7 @@ void ConfigDialog::CreateGUIControls()
|
||||||
// Tool tips
|
// Tool tips
|
||||||
m_Fullscreen->SetToolTip(wxT(
|
m_Fullscreen->SetToolTip(wxT(
|
||||||
"This will create a Fullscreen window using the chosen Fullscreen resolution."
|
"This will create a Fullscreen window using the chosen Fullscreen resolution."
|
||||||
"\nPress Esc key to switch between Fullscreen and Windowed mode."
|
"\nPress Alt+Enter to switch between Fullscreen and Windowed mode."
|
||||||
));
|
));
|
||||||
m_NativeResolution->SetToolTip(wxT(
|
m_NativeResolution->SetToolTip(wxT(
|
||||||
"This will use the game's native resolution and stretch it to fill the"
|
"This will use the game's native resolution and stretch it to fill the"
|
||||||
|
|
|
@ -213,76 +213,36 @@ LRESULT CALLBACK WndProc( HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam )
|
||||||
EndPaint( hWnd, &ps );
|
EndPaint( hWnd, &ps );
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
case WM_SYSKEYDOWN:
|
||||||
|
switch( LOWORD( wParam ))
|
||||||
|
{
|
||||||
|
case VK_RETURN:
|
||||||
|
// Pressing Alt+Enter switch FullScreen/Windowed
|
||||||
|
if (m_hParent == NULL && !g_Config.renderToMainframe)
|
||||||
|
{
|
||||||
|
ToggleFullscreen(hWnd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case WM_KEYDOWN:
|
case WM_KEYDOWN:
|
||||||
switch( LOWORD( wParam ))
|
switch( LOWORD( wParam ))
|
||||||
{
|
{
|
||||||
case VK_ESCAPE:
|
case VK_ESCAPE:
|
||||||
// Pressing Esc switch FullScreen/Windowed
|
|
||||||
if (m_hParent == NULL)
|
|
||||||
{
|
|
||||||
int w_fs = 640, h_fs = 480;
|
|
||||||
if (g_Config.bFullscreen)
|
if (g_Config.bFullscreen)
|
||||||
{
|
{
|
||||||
// Get out of fullscreen
|
// Pressing Esc switch to Windowed in Fullscreen mode
|
||||||
g_Config.bFullscreen = false;
|
ToggleFullscreen(hWnd);
|
||||||
RECT rc = {0, 0, w_fs, h_fs};
|
return 0;
|
||||||
|
|
||||||
if (strlen(g_Config.iWindowedRes) > 1)
|
|
||||||
sscanf(g_Config.iWindowedRes, "%dx%d", &w_fs, &h_fs);
|
|
||||||
// FullScreen -> Desktop
|
|
||||||
ChangeDisplaySettings(NULL, 0);
|
|
||||||
|
|
||||||
RECT rcdesktop; // Get desktop resolution
|
|
||||||
GetWindowRect(GetDesktopWindow(), &rcdesktop);
|
|
||||||
|
|
||||||
// Re-Enable the cursor
|
|
||||||
ShowCursor(TRUE);
|
|
||||||
|
|
||||||
int X = (rcdesktop.right-rcdesktop.left)/2 - (rc.right-rc.left)/2;
|
|
||||||
int Y = (rcdesktop.bottom-rcdesktop.top)/2 - (rc.bottom-rc.top)/2;
|
|
||||||
// SetWindowPos to the center of the screen
|
|
||||||
SetWindowPos(hWnd, NULL, X, Y, w_fs, h_fs, SWP_NOREPOSITION | SWP_NOZORDER);
|
|
||||||
|
|
||||||
// Set new window style FS -> Windowed
|
|
||||||
SetWindowLong(hWnd, GWL_STYLE, WS_OVERLAPPEDWINDOW);
|
|
||||||
|
|
||||||
// Eventually show the window!
|
|
||||||
EmuWindow::Show();
|
|
||||||
}
|
}
|
||||||
else
|
else if (!g_Config.renderToMainframe)
|
||||||
{
|
{
|
||||||
// Get into fullscreen
|
// And stops the emulation when already in Windowed mode
|
||||||
g_Config.bFullscreen = true;
|
PostMessage(m_hMain, WM_USER, OPENGL_WM_USER_STOP, 0);
|
||||||
DEVMODE dmScreenSettings;
|
|
||||||
memset(&dmScreenSettings, 0, sizeof(dmScreenSettings));
|
|
||||||
|
|
||||||
if (strlen(g_Config.iFSResolution) > 1)
|
|
||||||
sscanf(g_Config.iFSResolution, "%dx%d", &w_fs, &h_fs);
|
|
||||||
|
|
||||||
// Desktop -> FullScreen
|
|
||||||
dmScreenSettings.dmSize = sizeof(dmScreenSettings);
|
|
||||||
dmScreenSettings.dmPelsWidth = w_fs;
|
|
||||||
dmScreenSettings.dmPelsHeight = h_fs;
|
|
||||||
dmScreenSettings.dmBitsPerPel = 32;
|
|
||||||
dmScreenSettings.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
|
|
||||||
if (ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
|
|
||||||
return 0;
|
|
||||||
// Set new window style -> PopUp
|
|
||||||
SetWindowLong(hWnd, GWL_STYLE, WS_POPUP);
|
|
||||||
|
|
||||||
// Disable the cursor
|
|
||||||
ShowCursor(FALSE);
|
|
||||||
|
|
||||||
// SetWindowPos to the upper-left corner of the screen
|
|
||||||
SetWindowPos(hWnd, NULL, 0, 0, w_fs, h_fs, SWP_NOREPOSITION | SWP_NOZORDER);
|
|
||||||
|
|
||||||
// Eventually show the window!
|
|
||||||
EmuWindow::Show();
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'E': // EFB hotkey
|
case 'E': // EFB hotkey
|
||||||
if (g_Config.bEFBCopyDisableHotKey)
|
if (g_Config.bEFBCopyDisableHotKey)
|
||||||
{
|
{
|
||||||
|
@ -433,6 +393,70 @@ HWND OpenWindow(HWND parent, HINSTANCE hInstance, int width, int height, const T
|
||||||
return m_hWnd;
|
return m_hWnd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ToggleFullscreen(HWND hParent)
|
||||||
|
{
|
||||||
|
if (m_hParent == NULL)
|
||||||
|
{
|
||||||
|
int w_fs = 640, h_fs = 480;
|
||||||
|
if (g_Config.bFullscreen)
|
||||||
|
{
|
||||||
|
// Get out of fullscreen
|
||||||
|
g_Config.bFullscreen = false;
|
||||||
|
RECT rc = {0, 0, w_fs, h_fs};
|
||||||
|
|
||||||
|
if (strlen(g_Config.iWindowedRes) > 1)
|
||||||
|
sscanf(g_Config.iWindowedRes, "%dx%d", &w_fs, &h_fs);
|
||||||
|
// FullScreen -> Desktop
|
||||||
|
ChangeDisplaySettings(NULL, 0);
|
||||||
|
|
||||||
|
RECT rcdesktop; // Get desktop resolution
|
||||||
|
GetWindowRect(GetDesktopWindow(), &rcdesktop);
|
||||||
|
|
||||||
|
ShowCursor(TRUE);
|
||||||
|
|
||||||
|
int X = (rcdesktop.right-rcdesktop.left)/2 - (rc.right-rc.left)/2;
|
||||||
|
int Y = (rcdesktop.bottom-rcdesktop.top)/2 - (rc.bottom-rc.top)/2;
|
||||||
|
// SetWindowPos to the center of the screen
|
||||||
|
SetWindowPos(hParent, NULL, X, Y, w_fs, h_fs, SWP_NOREPOSITION | SWP_NOZORDER);
|
||||||
|
|
||||||
|
// Set new window style FS -> Windowed
|
||||||
|
SetWindowLong(hParent, GWL_STYLE, WS_OVERLAPPEDWINDOW);
|
||||||
|
|
||||||
|
// Eventually show the window!
|
||||||
|
EmuWindow::Show();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Get into fullscreen
|
||||||
|
DEVMODE dmScreenSettings;
|
||||||
|
memset(&dmScreenSettings, 0, sizeof(dmScreenSettings));
|
||||||
|
|
||||||
|
if (strlen(g_Config.iFSResolution) > 1)
|
||||||
|
sscanf(g_Config.iFSResolution, "%dx%d", &w_fs, &h_fs);
|
||||||
|
|
||||||
|
// Desktop -> FullScreen
|
||||||
|
dmScreenSettings.dmSize = sizeof(dmScreenSettings);
|
||||||
|
dmScreenSettings.dmPelsWidth = w_fs;
|
||||||
|
dmScreenSettings.dmPelsHeight = h_fs;
|
||||||
|
dmScreenSettings.dmBitsPerPel = 32;
|
||||||
|
dmScreenSettings.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
|
||||||
|
if (ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Set new window style -> PopUp
|
||||||
|
SetWindowLong(hParent, GWL_STYLE, WS_POPUP);
|
||||||
|
g_Config.bFullscreen = true;
|
||||||
|
ShowCursor(FALSE);
|
||||||
|
|
||||||
|
// SetWindowPos to the upper-left corner of the screen
|
||||||
|
SetWindowPos(hParent, NULL, 0, 0, w_fs, h_fs, SWP_NOREPOSITION | SWP_NOZORDER);
|
||||||
|
|
||||||
|
// Eventually show the window!
|
||||||
|
EmuWindow::Show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Show()
|
void Show()
|
||||||
{
|
{
|
||||||
ShowWindow(m_hWnd, SW_SHOW);
|
ShowWindow(m_hWnd, SW_SHOW);
|
||||||
|
|
|
@ -32,6 +32,7 @@ namespace EmuWindow
|
||||||
HWND Create(HWND hParent, HINSTANCE hInstance, const TCHAR *title);
|
HWND Create(HWND hParent, HINSTANCE hInstance, const TCHAR *title);
|
||||||
void Show();
|
void Show();
|
||||||
void Close();
|
void Close();
|
||||||
|
void ToggleFullscreen(HWND hParent);
|
||||||
void SetSize(int displayWidth, int displayHeight);
|
void SetSize(int displayWidth, int displayHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue