diff options
| author | nakeee <nakeee@gmail.com> | 2009-01-22 22:32:57 +0000 |
|---|---|---|
| committer | nakeee <nakeee@gmail.com> | 2009-01-22 22:32:57 +0000 |
| commit | 87bfe821eb7be447929321d8bd1589fa76129cce (patch) | |
| tree | de2d543013f436def9a98c400bd8cea43c7e7244 /Source/Core | |
| parent | 57c5f003376229febdceed643277a499c619500a (diff) | |
Added input manager handles the sdl init/quit for now
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@1984 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Common/Src/Common.h | 1 | ||||
| -rw-r--r-- | Source/Core/Core/Core.vcproj | 8 | ||||
| -rw-r--r-- | Source/Core/Core/Src/InputManager.cpp | 27 | ||||
| -rw-r--r-- | Source/Core/Core/Src/InputManager.h | 16 | ||||
| -rw-r--r-- | Source/Core/Core/Src/PluginManager.cpp | 312 | ||||
| -rw-r--r-- | Source/Core/Core/Src/PluginManager.h | 2 | ||||
| -rw-r--r-- | Source/Core/Core/Src/SConscript | 3 |
7 files changed, 174 insertions, 195 deletions
diff --git a/Source/Core/Common/Src/Common.h b/Source/Core/Common/Src/Common.h index 7df31f7cb7..712006c1d2 100644 --- a/Source/Core/Common/Src/Common.h +++ b/Source/Core/Common/Src/Common.h @@ -38,6 +38,7 @@ #include "../../../PluginSpecs/CommonTypes.h" #define HAVE_WIIUSE 1 + #define HAVE_SDL 1 #define HAVE_WX 1 #else #include "CommonTypes.h" diff --git a/Source/Core/Core/Core.vcproj b/Source/Core/Core/Core.vcproj index af0d405876..f4352351fd 100644 --- a/Source/Core/Core/Core.vcproj +++ b/Source/Core/Core/Core.vcproj @@ -1245,6 +1245,14 @@ >
</File>
<File
+ RelativePath=".\Src\InputManager.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\Src\InputManager.h"
+ >
+ </File>
+ <File
RelativePath=".\Src\SConscript"
>
</File>
diff --git a/Source/Core/Core/Src/InputManager.cpp b/Source/Core/Core/Src/InputManager.cpp new file mode 100644 index 0000000000..14ed63ee8c --- /dev/null +++ b/Source/Core/Core/Src/InputManager.cpp @@ -0,0 +1,27 @@ +#include "InputManager.h" + +bool InputManager::Init() { +#ifdef HAVE_SDL + // Move also joystick opening code here. + if (! sdlInit) { + /* SDL 1.3 use DirectInput instead of the old Microsoft Multimeda API, + and with this we need the SDL_INIT_VIDEO flag as well */ + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0) { + PanicAlert("Could not initialize SDL! (%s)\n", SDL_GetError()); + } else { + sdlInit = true; + } + } +#endif + + return true; +} + +bool InputManager::Shutdown() { +#ifdef HAVE_SDL + SDL_Quit(); + sdlInit = false; +#endif + + return true; +} diff --git a/Source/Core/Core/Src/InputManager.h b/Source/Core/Core/Src/InputManager.h new file mode 100644 index 0000000000..2d800ad7f6 --- /dev/null +++ b/Source/Core/Core/Src/InputManager.h @@ -0,0 +1,16 @@ +#ifndef INPUTMANAGER_H +#define INPUTMANAGER_H + +class InputManager { + +public: + bool Init(); + bool Shutdown(); + + InputManager(): sdlInit(false) {} + ~InputManager() {} + +private: + bool sdlInit; +}; +#endif diff --git a/Source/Core/Core/Src/PluginManager.cpp b/Source/Core/Core/Src/PluginManager.cpp index b6d8159a4e..e31d6593a0 100644 --- a/Source/Core/Core/Src/PluginManager.cpp +++ b/Source/Core/Core/Src/PluginManager.cpp @@ -15,31 +15,20 @@ // Official SVN repository and contact information can be found at // http://code.google.com/p/dolphin-emu/ - -////////////////////////////////////////////////////////////////////////////////////////// -// Include -// ŻŻŻŻŻŻŻŻŻŻŻŻ -#include <string> // System +#include <string> #include <vector> -//#include "Globals.h" // Local +//#include "Globals.h" +#include "FileSearch.h" +#include "FileUtil.h" #include "PluginManager.h" #include "ConfigManager.h" #include "LogManager.h" -#include "Core.h" - -#include "FileSearch.h" // Common -#include "FileUtil.h" #include "StringUtil.h" -#include "ConsoleWindow.h" CPluginManager CPluginManager::m_Instance; -////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////////////////// -// The Plugin Manager Class -// ŻŻŻŻŻŻŻŻŻŻŻŻ CPluginManager::CPluginManager() : m_params(SConfig::GetInstance().m_LocalCoreStartupParameter) { @@ -47,189 +36,113 @@ CPluginManager::CPluginManager() : m_PluginGlobals->eventHandler = EventHandler::GetInstance(); m_PluginGlobals->config = (void *)&SConfig::GetInstance(); m_PluginGlobals->messageLogger = NULL; + m_InputManager = new InputManager(); } -// Function: FreeLibrary() -// Called from: This will be called when Dolphin is closed, not when we Stop a game + CPluginManager::~CPluginManager() { - Console::Print("Delete CPluginManager\n"); - - if (m_PluginGlobals) delete m_PluginGlobals; + if (m_PluginGlobals) + delete m_PluginGlobals; - if (m_dsp) delete m_dsp; + ShutdownPlugins(); - if (m_video) delete m_video; + delete m_InputManager; - /**/ - for (int i = 0; i < MAXPADS; i++) - { - if (m_pad[i] && OkayToInitPlugin(i)) - { - Console::Print("Delete: %i\n", i); - delete m_pad[i]; - } - m_pad[i] = NULL; - } - - - for (int i = 0; i < MAXWIIMOTES; i++) - if (m_wiimote[i]) delete m_wiimote[i]; } -////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////////////////// -// Init and ShutDown Plugins -// ŻŻŻŻŻŻŻŻŻŻŻŻ +bool CPluginManager::InitPlugins() { -// Point the m_pad[] and other variables to a certain plugin -bool CPluginManager::InitPlugins() -{ + if (! GetVideo()) { + PanicAlert("Can't init Video Plugin"); + return false; + } - if (! GetVideo()) - { - PanicAlert("Can't init Video Plugin"); - return false; + if (! GetDSP()) { + PanicAlert("Can't init DSP Plugin"); + return false; } - if (! GetDSP()) - { - PanicAlert("Can't init DSP Plugin"); - return false; + if (! m_InputManager->Init()) { + PanicAlert("Can't init input manager"); + return false; } - // Check if we get at least one pad or wiimote bool pad = false; bool wiimote = false; - // Init pad for (int i = 0; i < MAXPADS; i++) { - if (! m_params.m_strPadPlugin[i].empty()) - GetPAD(i); - if (m_pad[i] != NULL) - pad = true; - } - if (! pad) - { - PanicAlert("Can't init any PAD Plugins"); - return false; + if (! m_params.m_strPadPlugin[i].empty()) + GetPAD(i); + + if (m_pad[i] != NULL) + pad = true; } - // Init wiimote - if (m_params.bWii) + if (! pad) { + PanicAlert("Can't init any PAD Plugins"); + return false; + } + if (m_params.bWii) { + for (int i = 0; i < MAXWIIMOTES; i++) { - for (int i = 0; i < MAXWIIMOTES; i++) - { - if (! m_params.m_strWiimotePlugin[i].empty()) - GetWiimote(i); + if (! m_params.m_strWiimotePlugin[i].empty()) + GetWiimote(i); - if (m_wiimote[i] != NULL) - wiimote = true; - } - if (! wiimote) - { - PanicAlert("Can't init any Wiimote Plugins"); - return false; - } + if (m_wiimote[i] != NULL) + wiimote = true; + } + + if (! wiimote) { + PanicAlert("Can't init any Wiimote Plugins"); + return false; + } } return true; } void CPluginManager::ShutdownPlugins() -{ - // Check if we can shutdown the plugin - for (int i = 0; i < MAXPADS; i++) - { - if (m_pad[i] && OkayToInitPlugin(i)) - { - //Console::Print("Shutdown: %i\n", i); - m_pad[i]->Shutdown(); - } - //delete m_pad[i]; - //m_pad[i] = NULL; +{ + for (int i = 0; i < MAXPADS; i++) { + if (m_pad[i]) { + m_pad[i]->Shutdown(); + delete m_pad[i]; + m_pad[i] = NULL; } - - for (int i = 0; i < MAXWIIMOTES; i++) - if (m_wiimote[i]) m_wiimote[i]->Shutdown(); - - if (m_video) - m_video->Shutdown(); - - if (m_dsp) - m_dsp->Shutdown(); -} -////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////////////////// -// Supporting functions -// ŻŻŻŻŻŻŻŻŻŻŻŻ - - -void *CPluginManager::LoadPlugin(const char *_rFilename)//, PLUGIN_TYPE type) -{ - CPluginInfo info(_rFilename); - PLUGIN_TYPE type = info.GetPluginInfo().Type; - Common::CPlugin *plugin = NULL; - switch (type) - { - case PLUGIN_TYPE_VIDEO: - plugin = new Common::PluginVideo(_rFilename); - break; - - case PLUGIN_TYPE_PAD: - plugin = new Common::PluginPAD(_rFilename); - break; - - case PLUGIN_TYPE_DSP: - plugin = new Common::PluginDSP(_rFilename); - break; - - case PLUGIN_TYPE_WIIMOTE: - plugin = new Common::PluginWiimote(_rFilename); - break; - default: - PanicAlert("Trying to load unsupported type %d", type); } - if (!plugin->IsValid()) - { - PanicAlert("Can't open %s", _rFilename); - return NULL; - } - - plugin->SetGlobals(m_PluginGlobals); - return plugin; -} - -// ---------------------------------------- -/* Check if the plugin has already been initialized. If so, return the Id of the duplicate pad - so we can point the new m_pad[] to that */ -// ------------- -int CPluginManager::OkayToInitPlugin(int Plugin) -{ - //Console::Print("OkayToInitShutdown: %i", Plugin); - // Compare it to the earlier plugins - for(int i = 0; i < Plugin; i++) - if (m_params.m_strPadPlugin[Plugin] == m_params.m_strPadPlugin[i]) - { - //Console::Print("(%i %i) %s\n", Plugin, i, g_CoreStartupParameter.m_strPadPlugin[Plugin].c_str()); - return i; - } - return -1; + if (! m_InputManager->Shutdown()) { + PanicAlert("Error cleaning after input manager"); + } + + for (int i = 0; i < MAXWIIMOTES; i++) { + if (m_wiimote[i]) { + m_wiimote[i]->Shutdown(); + delete m_wiimote[i]; + m_wiimote[i] = NULL; + } + } + + if (m_video) { + m_video->Shutdown(); + delete m_video; + m_video = NULL; + } + + if (m_dsp) { + m_dsp->Shutdown(); + delete m_dsp; + m_dsp = NULL; + } } - -PLUGIN_GLOBALS* CPluginManager::GetGlobals() -{ +PLUGIN_GLOBALS* CPluginManager::GetGlobals() { return m_PluginGlobals; } - // ---------------------------------------- // Create list of available plugins // ------------- @@ -267,29 +180,12 @@ void CPluginManager::ScanForPlugins() } } } -///////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////////////////// -// Create or return the already created plugin pointers -// ŻŻŻŻŻŻŻŻŻŻŻŻ Common::PluginPAD *CPluginManager::GetPAD(int controller) { if (m_pad[controller] == NULL) - { - if(OkayToInitPlugin(controller) == -1) - { - m_pad[controller] = (Common::PluginPAD*)LoadPlugin(m_params.m_strPadPlugin[controller].c_str()); - Console::Print("LoadPlugin: %i\n", controller); - } - else - { - Console::Print("Pointed: %i to %i\n", controller, OkayToInitPlugin(controller)); - m_pad[controller] = m_pad[OkayToInitPlugin(controller)]; - } - } + m_pad[controller] = (Common::PluginPAD*)LoadPlugin(m_params.m_strPadPlugin[controller].c_str()); - //Console::Print("Returned: %i\n", controller); return m_pad[controller]; } @@ -317,15 +213,45 @@ Common::PluginVideo *CPluginManager::GetVideo() { return m_video; } -/////////////////////////////////////////// +void *CPluginManager::LoadPlugin(const char *_rFilename)//, PLUGIN_TYPE type) +{ + CPluginInfo info(_rFilename); + PLUGIN_TYPE type = info.GetPluginInfo().Type; + Common::CPlugin *plugin = NULL; + switch (type) { + case PLUGIN_TYPE_VIDEO: + plugin = new Common::PluginVideo(_rFilename); + break; -////////////////////////////////////////////////////////////////////////////////////////// -// Call DLL functions -// ŻŻŻŻŻŻŻŻŻŻŻŻ + case PLUGIN_TYPE_PAD: + plugin = new Common::PluginPAD(_rFilename); + break; + + case PLUGIN_TYPE_DSP: + plugin = new Common::PluginDSP(_rFilename); + break; + + case PLUGIN_TYPE_WIIMOTE: + plugin = new Common::PluginWiimote(_rFilename); + break; + default: + PanicAlert("Trying to load unsupported type %d", type); + } + + if (!plugin->IsValid()) { + PanicAlert("Can't open %s", _rFilename); + return NULL; + } + + plugin->SetGlobals(m_PluginGlobals); + + + return plugin; +} // ---------------------------------------- -// Open config window. _rFilename = plugin filename , ret = the dll slot number +// Open config window. _rFilename = plugin filename ,ret = the dll slot number // ------------- void CPluginManager::OpenConfig(void* _Parent, const char *_rFilename) { @@ -342,9 +268,9 @@ void CPluginManager::OpenConfig(void* _Parent, const char *_rFilename) void CPluginManager::OpenDebug(void* _Parent, const char *_rFilename, PLUGIN_TYPE Type, bool Show) { if (Type == PLUGIN_TYPE_VIDEO) { - GetVideo()->Debug((HWND)_Parent, Show); + GetVideo()->Debug((HWND)_Parent, Show); } else if (Type == PLUGIN_TYPE_DSP) { - GetDSP()->Debug((HWND)_Parent, Show); + GetDSP()->Debug((HWND)_Parent, Show); } } @@ -356,15 +282,13 @@ CPluginInfo::CPluginInfo(const char *_rFileName) , m_Valid(false) { Common::CPlugin *plugin = new Common::CPlugin(_rFileName); - if (plugin->IsValid()) - { - if (plugin->GetInfo(m_PluginInfo)) - m_Valid = true; - else - PanicAlert("Could not get info about plugin %s", _rFileName); - - delete plugin; - } + if (plugin->IsValid()) { + if (plugin->GetInfo(m_PluginInfo)) + m_Valid = true; + else + PanicAlert("Could not get info about plugin %s", _rFileName); + delete plugin; + } } -/////////////////////////////////////////// + diff --git a/Source/Core/Core/Src/PluginManager.h b/Source/Core/Core/Src/PluginManager.h index f71c92cce0..c0f5fce28b 100644 --- a/Source/Core/Core/Src/PluginManager.h +++ b/Source/Core/Core/Src/PluginManager.h @@ -25,6 +25,7 @@ #include "PluginWiimote.h" #include "EventHandler.h" #include "CoreParameter.h" +#include "InputManager.h" class CPluginInfo { @@ -70,6 +71,7 @@ private: Common::PluginWiimote *m_wiimote[4]; Common::PluginDSP *m_dsp; + InputManager *m_InputManager; SCoreStartupParameter& m_params; CPluginManager(); ~CPluginManager(); diff --git a/Source/Core/Core/Src/SConscript b/Source/Core/Core/Src/SConscript index 9838f39e16..a926baaa45 100644 --- a/Source/Core/Core/Src/SConscript +++ b/Source/Core/Core/Src/SConscript @@ -15,7 +15,8 @@ files = ["Console.cpp", "PatchEngine.cpp", "State.cpp", "Tracer.cpp", - 'PluginManager.cpp', + "PluginManager.cpp", + "InputManager.cpp", "VolumeHandler.cpp", "Boot/Boot.cpp", "Boot/Boot_BIOSEmu.cpp", |
