diff --git a/stepmania/src/Font.cpp b/stepmania/src/Font.cpp index 2e474fa9e8..a2695f5538 100644 --- a/stepmania/src/Font.cpp +++ b/stepmania/src/Font.cpp @@ -13,9 +13,6 @@ #include "FontCharmaps.h" #include "FontCharAliases.h" -/* Last private-use Unicode character: */ -const wchar_t Font::DEFAULT_GLYPH = 0xF8FF; - FontPage::FontPage() { m_pTexture = NULL; @@ -285,7 +282,7 @@ const glyph &Font::GetGlyph( wchar_t c ) const map::const_iterator it = m_iCharToGlyph.find(c); /* If that's missing, use the default glyph. */ - if(it == m_iCharToGlyph.end()) it = m_iCharToGlyph.find(DEFAULT_GLYPH); + if(it == m_iCharToGlyph.end()) it = m_iCharToGlyph.find(FONT_DEFAULT_GLYPH); if(it == m_iCharToGlyph.end()) RageException::Throw( "The default glyph is missing from the font '%s'", path.c_str() ); @@ -295,7 +292,7 @@ const glyph &Font::GetGlyph( wchar_t c ) const bool Font::FontCompleteForString( const wstring &str ) const { - map::const_iterator m_pDefault = m_iCharToGlyph.find( DEFAULT_GLYPH ); + map::const_iterator m_pDefault = m_iCharToGlyph.find( FONT_DEFAULT_GLYPH ); if( m_pDefault == m_iCharToGlyph.end() ) RageException::Throw( "The default glyph is missing from the font '%s'", path.c_str() ); diff --git a/stepmania/src/Font.h b/stepmania/src/Font.h index a36825fea0..6e7af9d5f2 100644 --- a/stepmania/src/Font.h +++ b/stepmania/src/Font.h @@ -134,8 +134,6 @@ public: void SetDefaultGlyph( FontPage *pPage ); - static const wchar_t DEFAULT_GLYPH; - bool IsRightToLeft() const { return m_bRightToLeft; }; private: @@ -163,6 +161,10 @@ private: CString GetPageNameFromFileName( const CString &sFilename ); }; +/* Last private-use Unicode character: */ +/* This is in the header to reduce file dependencies. */ +const wchar_t FONT_DEFAULT_GLYPH = 0xF8FF; + #endif /* diff --git a/stepmania/src/FontCharAliases.cpp b/stepmania/src/FontCharAliases.cpp index 6efc69ccb8..a55190966c 100644 --- a/stepmania/src/FontCharAliases.cpp +++ b/stepmania/src/FontCharAliases.cpp @@ -67,7 +67,7 @@ static void InitCharAliases() if(!CharAliases.empty()) return; - CharAliases["default"] = Font::DEFAULT_GLYPH; /* ? */ + CharAliases["default"] = FONT_DEFAULT_GLYPH; /* ? */ CharAliases["invalid"] = INVALID_CHAR; /* 0xFFFD */ /* The comments here are UTF-8; they won't show up in VC6 (use your diff --git a/stepmania/src/LuaManager.cpp b/stepmania/src/LuaManager.cpp index 21d5371c1b..2b3ca786ca 100644 --- a/stepmania/src/LuaManager.cpp +++ b/stepmania/src/LuaManager.cpp @@ -7,13 +7,7 @@ #include "RageFile.h" #include "RageThreads.h" #include "Foreach.h" - -#if !defined(SMPACKAGE) #include "arch/Dialog/Dialog.h" -#define DIALOG_OK Dialog::OK -#else -#define DIALOG_OK __noop -#endif #include #include @@ -274,7 +268,7 @@ bool LuaHelpers::RunScriptFile( const CString &sFile ) if( !f.Open( sFile ) ) { CString sError = ssprintf( "Couldn't open Lua script \"%s\": %s", sFile.c_str(), f.GetError().c_str() ); - DIALOG_OK( sError, "LUA_ERROR" ); + Dialog::OK( sError, "LUA_ERROR" ); return false; } @@ -282,7 +276,7 @@ bool LuaHelpers::RunScriptFile( const CString &sFile ) if( f.Read( sScript ) == -1 ) { CString sError = ssprintf( "Error reading Lua script \"%s\": %s", sFile.c_str(), f.GetError().c_str() ); - DIALOG_OK( sError, "LUA_ERROR" ); + Dialog::OK( sError, "LUA_ERROR" ); return false; } @@ -293,7 +287,7 @@ bool LuaHelpers::RunScriptFile( const CString &sFile ) { LUA->Release(L); sError = ssprintf( "Lua runtime error: %s", sError.c_str() ); - DIALOG_OK( sError, "LUA_ERROR" ); + Dialog::OK( sError, "LUA_ERROR" ); return false; } LUA->Release(L); @@ -336,7 +330,7 @@ bool LuaHelpers::RunScript( Lua *L, const CString &sExpression, const CString &s if( !LuaHelpers::RunScript( L, sExpression, sName.size()? sName:CString("in"), sError, iReturnValues ) ) { sError = ssprintf( "Lua runtime error parsing \"%s\": %s", sName.size()? sName.c_str():sExpression.c_str(), sError.c_str() ); - DIALOG_OK( sError, "LUA_ERROR" ); + Dialog::OK( sError, "LUA_ERROR" ); return false; } diff --git a/stepmania/src/ScreenDimensions.cpp b/stepmania/src/ScreenDimensions.cpp index a292b0b50a..ec6ff962e2 100644 --- a/stepmania/src/ScreenDimensions.cpp +++ b/stepmania/src/ScreenDimensions.cpp @@ -2,6 +2,7 @@ #include "ScreenDimensions.h" #include "PrefsManager.h" #include "LuaManager.h" +#include "LuaFunctions.h" static ThemeMetric THEME_SCREEN_WIDTH("Common","ScreenWidth"); static ThemeMetric THEME_SCREEN_HEIGHT("Common","ScreenHeight"); @@ -79,6 +80,10 @@ void ScreenDimensions::ReloadMetricsAndUpdateLua() LUA->SetGlobal( "SCREEN_CENTER_Y", (int) SCREEN_CENTER_Y ); } +LuaFunction_NoArgs( GetScreenAspectRatio, ScreenDimensions::GetScreenAspectRatio() ); +LuaFunction_NoArgs( GetThemeAspectRatio, ScreenDimensions::GetThemeAspectRatio() ); + + /* * (c) 2001-2002 Chris Danford * All rights reserved. diff --git a/stepmania/src/SpecialFiles.cpp b/stepmania/src/SpecialFiles.cpp index 82635ed5f2..14ce6e249a 100644 --- a/stepmania/src/SpecialFiles.cpp +++ b/stepmania/src/SpecialFiles.cpp @@ -5,6 +5,7 @@ const RString SpecialFiles::KEYMAPS_PATH = "Save/Keymaps.ini"; const RString SpecialFiles::PREFERENCES_INI_PATH = "Save/Preferences.ini"; const RString SpecialFiles::THEMES_DIR = "Themes/"; const RString SpecialFiles::LANGUAGES_SUBDIR = "Languages/"; +// TODO: A theme should be able to specify a base language. const RString SpecialFiles::BASE_LANGUAGE = "en"; const RString SpecialFiles::METRICS_FILE = "metrics.ini"; const RString SpecialFiles::CACHE_DIR = "Cache/"; diff --git a/stepmania/src/ThemeManager.cpp b/stepmania/src/ThemeManager.cpp index f929d79c85..904e2d75bb 100644 --- a/stepmania/src/ThemeManager.cpp +++ b/stepmania/src/ThemeManager.cpp @@ -10,7 +10,9 @@ #include "arch/ArchHooks/ArchHooks.h" #include "arch/Dialog/Dialog.h" #include "RageFile.h" +#if !defined(SMPACKAGE) #include "ScreenManager.h" +#endif #include "Foreach.h" #include "ThemeMetric.h" #include "LuaManager.h" @@ -18,6 +20,7 @@ #include "Command.h" #include "LocalizedString.h" #include "SpecialFiles.h" +#include "EnumHelper.h" ThemeManager* THEME = NULL; // global object accessable from anywhere in the program @@ -34,7 +37,6 @@ StringToX( ElementCategory ); const RString BASE_THEME_NAME = "default"; -// TODO: A theme should be able to specify a base language. struct Theme @@ -303,9 +305,11 @@ void ThemeManager::SwitchThemeAndLanguage( const RString &sThemeName_, const RSt for( int i = 0; i < NUM_ElementCategory; ++i ) g_ThemePathCache[i].clear(); +#if !defined(SMPACKAGE) // reload common sounds if( SCREENMAN != NULL ) SCREENMAN->ThemeChanged(); +#endif /* Lua globals can use metrics which are cached, and vice versa. Update Lua * globals first; it's Lua's job to explicitly update cached metrics that it @@ -346,8 +350,10 @@ void ThemeManager::UpdateLuaGlobals() RunLuaScripts( "Serialize.lua" ); LUA->ResetState(); - /* Important: explicitly refresh cached metrics that we use. */ +#if !defined(SMPACKAGE) + /* explicitly refresh cached metrics that we use. */ ScreenDimensions::ReloadMetricsAndUpdateLua(); +#endif RunLuaScripts( "*.lua" ); } @@ -671,8 +677,10 @@ void ThemeManager::ReloadMetrics() // force a reload of the metrics cache LoadThemeMetrics( g_vThemes, m_sCurThemeName, m_sCurLanguage ); +#if !defined(SMPACKAGE) if( SCREENMAN ) SCREENMAN->SystemMessage( RELOADED_METRICS ); +#endif // // clear theme path cache @@ -825,11 +833,13 @@ Commands ThemeManager::GetMetricM( const RString &sClassName, const RString &sVa return ParseCommands( sValue ); } +#if !defined(SMPACKAGE) apActorCommands ThemeManager::GetMetricA( const RString &sClassName, const RString &sValueName ) { RString sValue = GetMetricRaw( sClassName, sValueName ); return apActorCommands( new ActorCommands( sValue ) ); } +#endif void ThemeManager::NextTheme() { @@ -876,10 +886,12 @@ void ThemeManager::GetModifierNames( vector& AddTo ) } } +#if !defined(SMPACKAGE) void ThemeManager::GetMetric( const RString &sClassName, const RString &sValueName, apActorCommands &valueOut ) { valueOut = GetMetricA( sClassName, sValueName ); } +#endif void ThemeManager::GetMetric( const RString &sClassName, const RString &sValueName, LuaExpression &valueOut ) { @@ -940,8 +952,6 @@ public: static int GetPathG( T* p, lua_State *L ) { lua_pushstring(L, p->GetPathG(SArg(1),SArg(2)) ); return 1; } static int GetPathB( T* p, lua_State *L ) { lua_pushstring(L, p->GetPathB(SArg(1),SArg(2)) ); return 1; } static int GetPathS( T* p, lua_State *L ) { lua_pushstring(L, p->GetPathS(SArg(1),SArg(2)) ); return 1; } - static int GetScreenAspectRatio( T* p, lua_State *L ) { lua_pushnumber( L, ScreenDimensions::GetScreenAspectRatio() ); return 1; } - static int GetThemeAspectRatio( T* p, lua_State *L ) { lua_pushnumber( L, ScreenDimensions::GetThemeAspectRatio() ); return 1; } static void Register(lua_State *L) { @@ -950,8 +960,6 @@ public: ADD_METHOD( GetPathG ); ADD_METHOD( GetPathB ); ADD_METHOD( GetPathS ); - ADD_METHOD( GetScreenAspectRatio ); - ADD_METHOD( GetThemeAspectRatio ); Luna::Register( L ); diff --git a/stepmania/src/ThemeManager.h b/stepmania/src/ThemeManager.h index c3a92538bd..018464e671 100644 --- a/stepmania/src/ThemeManager.h +++ b/stepmania/src/ThemeManager.h @@ -7,7 +7,10 @@ #include #include #include "Command.h" +#if !defined(SMPACKAGE) #include "ActorCommands.h" +#endif +#include "LuaReference.h" class IThemeMetric; class IniFile; @@ -70,7 +73,9 @@ public: bool GetMetricB( const RString &sClassName, const RString &sValueName ); RageColor GetMetricC( const RString &sClassName, const RString &sValueName ); Commands GetMetricM( const RString &sClassName, const RString &sValueName ); +#if !defined(SMPACKAGE) apActorCommands GetMetricA( const RString &sClassName, const RString &sValueName ); +#endif void GetMetric( const RString &sClassName, const RString &sValueName, RString &valueOut ) { valueOut = GetMetric( sClassName, sValueName ); } void GetMetric( const RString &sClassName, const RString &sValueName, int &valueOut ) { valueOut = GetMetricI( sClassName, sValueName ); } @@ -79,7 +84,9 @@ public: void GetMetric( const RString &sClassName, const RString &sValueName, RageColor &valueOut ) { valueOut = GetMetricC( sClassName, sValueName ); } void GetMetric( const RString &sClassName, const RString &sValueName, Command &valueOut ); void GetMetric( const RString &sClassName, const RString &sValueName, LuaExpression &valueOut ); +#if !defined(SMPACKAGE) void GetMetric( const RString &sClassName, const RString &sValueName, apActorCommands &valueOut ); +#endif RString GetString( const RString &sClassName, const RString &sValueName ); diff --git a/stepmania/src/arch/ArchHooks/ArchHooks_Win32Static.cpp b/stepmania/src/arch/ArchHooks/ArchHooks_Win32Static.cpp index d13794be8e..db22ad0206 100644 --- a/stepmania/src/arch/ArchHooks/ArchHooks_Win32Static.cpp +++ b/stepmania/src/arch/ArchHooks/ArchHooks_Win32Static.cpp @@ -50,13 +50,15 @@ void ArchHooks::MountInitialFilesystems( const RString &sDirOfExecutable ) RString Dir = join( "/", parts.begin(), parts.end()-1 ); FILEMAN->Mount( "dir", Dir, "/" ); - RString sMyDocumentsDir = GetMyDocumentsDir(); - RString sApplicationDataDir = GetApplicationDataDir(); + RString sMyDocumentsDir = SpecialDirs::GetMyDocumentsDir(); + RString sApplicationDataDir = SpecialDirs::GetApplicationDataDir(); + RString sDesktopDir = SpecialDirs::GetDesktopDir(); // Mount everything game-writable (not counting the editor) to the user's directory. FILEMAN->Mount( "dir", sApplicationDataDir + PRODUCT_ID + "/Cache", "/Cache" ); FILEMAN->Mount( "dir", sMyDocumentsDir + PRODUCT_ID + "/Save", "/Save" ); FILEMAN->Mount( "dir", sMyDocumentsDir + PRODUCT_ID + "/Screenshots", "/Screenshots" ); + FILEMAN->Mount( "dir", sDesktopDir, "/Desktop" ); } static CString LangIdToString( LANGID l ) diff --git a/stepmania/src/archutils/Win32/SpecialDirs.cpp b/stepmania/src/archutils/Win32/SpecialDirs.cpp index c624e7e82b..0d86244f79 100644 --- a/stepmania/src/archutils/Win32/SpecialDirs.cpp +++ b/stepmania/src/archutils/Win32/SpecialDirs.cpp @@ -3,7 +3,7 @@ #include "RegistryAccess.h" #include -RString GetMyDocumentsDir() +RString SpecialDirs::GetMyDocumentsDir() { CString sMyDocumentsDir; bool bSuccess = RegistryAccess::GetRegValue( "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", "Personal", sMyDocumentsDir ); @@ -13,17 +13,30 @@ RString GetMyDocumentsDir() return sMyDocumentsDir; } -RString GetApplicationDataDir() +RString SpecialDirs::GetApplicationDataDir() { - CString sApplicationDataDir; + CString sDir; TCHAR szDir[MAX_PATH] = ""; BOOL bResult = SHGetSpecialFolderPath( NULL, szDir, CSIDL_APPDATA, FALSE ); ASSERT( bResult ); - sApplicationDataDir = szDir; - sApplicationDataDir += "/"; - return sApplicationDataDir; + sDir = szDir; + sDir += "/"; + return sDir; } +RString SpecialDirs::GetDesktopDir() +{ + CString sDir; + TCHAR szDir[MAX_PATH] = ""; + BOOL bResult = SHGetSpecialFolderPath( NULL, szDir, CSIDL_DESKTOP, FALSE ); + ASSERT( bResult ); + sDir = szDir; + sDir += "/"; + return sDir; +} + + + /* * (c) 2002-2004 Chris Danford * All rights reserved. diff --git a/stepmania/src/archutils/Win32/SpecialDirs.h b/stepmania/src/archutils/Win32/SpecialDirs.h index c52c368a09..2136a64158 100644 --- a/stepmania/src/archutils/Win32/SpecialDirs.h +++ b/stepmania/src/archutils/Win32/SpecialDirs.h @@ -1,8 +1,12 @@ #ifndef SpecialDirs_H #define SpecialDirs_H -RString GetMyDocumentsDir(); -RString GetApplicationDataDir(); +namespace SpecialDirs +{ + RString GetMyDocumentsDir(); + RString GetApplicationDataDir(); + RString GetDesktopDir(); +}; #endif diff --git a/stepmania/src/smpackage-net2003.vcproj b/stepmania/src/smpackage-net2003.vcproj index 499505a90e..9a302a1ae1 100644 --- a/stepmania/src/smpackage-net2003.vcproj +++ b/stepmania/src/smpackage-net2003.vcproj @@ -297,6 +297,12 @@ + + + + @@ -348,6 +354,28 @@ RelativePath=".\arch\ArchHooks\ArchHooksUtil.cpp"> + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -541,6 +587,12 @@ + + + + diff --git a/stepmania/src/smpackage/LanguagesDlg.cpp b/stepmania/src/smpackage/LanguagesDlg.cpp index d40138777f..88f91e9ef6 100644 --- a/stepmania/src/smpackage/LanguagesDlg.cpp +++ b/stepmania/src/smpackage/LanguagesDlg.cpp @@ -376,4 +376,6 @@ void LanguagesDlg::OnBnClickedButtonImport() MessageBox( ssprintf("Imported %d strings into '%s'. %d empty strings were ignored.",iNumImported,sLanguageFile.c_str(),iNumIgnored) ); else MessageBox( ssprintf("Failed to save '%s'.",sLanguageFile.c_str()) ); + + OnSelchangeListThemes(); }