GSdx linux:

* Add a map to handle the configuration
* Connect the window size option to the gui option


git-svn-id: http://pcsx2.googlecode.com/svn/trunk@4539 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
gregory.hainaut@gmail.com 2011-04-07 09:41:20 +00:00
parent 490b5f6a7f
commit e1592788c0
4 changed files with 91 additions and 10 deletions

View File

@ -71,6 +71,7 @@ bool RunLinuxDialog()
gtk_combo_box_append_text(GTK_COMBO_BOX(res_combo_box), "640x480@60");
gtk_combo_box_append_text(GTK_COMBO_BOX(res_combo_box), "800x600@60");
gtk_combo_box_append_text(GTK_COMBO_BOX(res_combo_box), "1024x768@60");
gtk_combo_box_append_text(GTK_COMBO_BOX(res_combo_box), "1280x960@60");
gtk_combo_box_append_text(GTK_COMBO_BOX(res_combo_box), "And a few other values like that.");
// Or whatever the default value is.
@ -180,6 +181,17 @@ bool RunLinuxDialog()
if (gtk_combo_box_get_active(GTK_COMBO_BOX(aspect_combo_box)) != -1)
aspect = gtk_combo_box_get_active(GTK_COMBO_BOX(aspect_combo_box));
#endif
if (gtk_combo_box_get_active(GTK_COMBO_BOX(res_combo_box)) != -1) {
int resolution = gtk_combo_box_get_active(GTK_COMBO_BOX(res_combo_box));
switch (resolution) {
case 0: theApp.SetConfig("w", 640); theApp.SetConfig("h", 480); break;
case 1: theApp.SetConfig("w", 800); theApp.SetConfig("h", 600); break;
case 2: theApp.SetConfig("w", 1024); theApp.SetConfig("h", 768); break;
case 3: theApp.SetConfig("w", 1280); theApp.SetConfig("h", 960); break;
default: theApp.SetConfig("w", 640); theApp.SetConfig("h", 480);
}
}
theApp.SetConfig("filter", (int)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filter_check)));
theApp.SetConfig("logz", (int)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(logz_check)));

View File

@ -340,7 +340,10 @@ bool GSWnd::Create(const string& title, int w, int h)
{
if(m_window != NULL) return false;
if(w <= 0 || h <= 0) {w = 640; h = 480;}
if(w <= 0 || h <= 0) {
w = theApp.GetConfig("w", 640);
h = theApp.GetConfig("h", 480);
}
m_window = SDL_CreateWindow(title.c_str(), 100, 100, w, h, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE);
@ -364,8 +367,11 @@ Display* GSWnd::GetDisplay()
GSVector4i GSWnd::GetClientRect()
{
// TODO
int h, w;
w = theApp.GetConfig("w", 640);
h = theApp.GetConfig("h", 480);
return GSVector4i(0, 0, 640, 480);
return GSVector4i(0, 0, w, h);
}
// Returns FALSE if the window has no title, or if th window title is under the strict

View File

@ -43,25 +43,54 @@ BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserv
#else
size_t GetPrivateProfileString(const char* lpAppName, const char* lpKeyName, const char* lpDefault, char* lpReturnedString, size_t nSize, const char* lpFileName)
size_t GSdxApp::GetPrivateProfileString(const char* lpAppName, const char* lpKeyName, const char* lpDefault, char* lpReturnedString, size_t nSize, const char* lpFileName)
{
// TODO: linux
BuildConfigurationMap(lpFileName);
std::string key(lpKeyName);
std::string value = m_configuration_map[key];
if (value.empty())
strcpy(lpReturnedString, lpDefault);
else
strcpy(lpReturnedString, value.c_str());
return 0;
}
bool WritePrivateProfileString(const char* lpAppName, const char* lpKeyName, const char* pString, const char* lpFileName)
bool GSdxApp::WritePrivateProfileString(const char* lpAppName, const char* lpKeyName, const char* pString, const char* lpFileName)
{
// TODO: linux
BuildConfigurationMap(lpFileName);
return false;
std::string key(lpKeyName);
std::string value(pString);
m_configuration_map[key] = value;
// Save config to a file
FILE* f = fopen(lpFileName, "w");
if (f == NULL) return false; // FIXME print a nice message
map<std::string,std::string>::iterator it;
for (it = m_configuration_map.begin(); it != m_configuration_map.end(); ++it) {
// Do not save the inifile key which is not an option
if (it->first.compare("inifile") == 0) continue;
fprintf(f, "%s = %s\n", it->first.c_str(), it->second.c_str());
}
fclose(f);
return false;
}
int GetPrivateProfileInt(const char* lpAppName, const char* lpKeyName, int nDefault, const char* lpFileName)
int GSdxApp::GetPrivateProfileInt(const char* lpAppName, const char* lpKeyName, int nDefault, const char* lpFileName)
{
// TODO: linux
BuildConfigurationMap(lpFileName);
return nDefault;
std::string value = m_configuration_map[std::string(lpKeyName)];
if (value.empty())
return nDefault;
else
return atoi(value.c_str());
}
#endif
@ -128,6 +157,31 @@ GSdxApp::GSdxApp()
m_gpu_scale.push_back(GSSetting(2 | (2 << 2), "H x 4 - V x 4", ""));
}
#ifdef _LINUX
void GSdxApp::BuildConfigurationMap(const char* lpFileName)
{
// Check if the map was already built
std::string inifile_value(lpFileName);
if ( inifile_value.compare(m_configuration_map["inifile"]) == 0 ) return;
m_configuration_map["inifile"] = inifile_value;
// Load config from file
char value[255];
char key[255];
FILE* f = fopen(lpFileName, "r");
if (f == NULL) return false; // FIXME print a nice message
while( fscanf(f, "%s = %s\n", key, value) != EOF ) {
std::string key_s(key);
std::string value_s(value);
m_configuration_map[key_s] = value_s;
}
fclose(f);
}
#endif
void* GSdxApp::GetModuleHandlePtr()
{
return s_hModule;

View File

@ -27,6 +27,9 @@ class GSdxApp
{
std::string m_ini;
std::string m_section;
#ifdef _LINUX
std::map< std::string, std::string > m_configuration_map;
#endif
public:
GSdxApp();
@ -36,6 +39,12 @@ public:
#ifdef _WINDOWS
HMODULE GetModuleHandle() {return (HMODULE)GetModuleHandlePtr();}
#endif
#ifdef _LINUX
void BuildConfigurationMap(const char* lpFileName);
size_t GetPrivateProfileString(const char* lpAppName, const char* lpKeyName, const char* lpDefault, char* lpReturnedString, size_t nSize, const char* lpFileName);
bool WritePrivateProfileString(const char* lpAppName, const char* lpKeyName, const char* pString, const char* lpFileName);
int GetPrivateProfileInt(const char* lpAppName, const char* lpKeyName, int nDefault, const char* lpFileName);
#endif
string GetConfig(const char* entry, const char* value);
void SetConfig(const char* entry, const char* value);