string skinName = ( string ) ( ( ( CItemList ) this.list項目リスト[ this.n現在の選択項目 ] ).obj現在値() );\r
string path;\r
path = System.IO.Path.Combine( CDTXMania.strEXEのあるフォルダ, "System" );\r
- path = System.IO.Path.Combine( path, "SkinFiles." + skinName );\r
+ path = System.IO.Path.Combine( path, CSkin.PrefixSkinFolder + skinName );\r
path = System.IO.Path.Combine( path, @"Graphics\ScreenTitle background.jpg" );\r
Bitmap bmSrc = new Bitmap( path );\r
Bitmap bmDest = new Bitmap( bmSrc.Width / 4, bmSrc.Height / 4 );\r
this.eメニュー種別 = Eメニュー種別.Unknown;\r
\r
#region [ スキン選択肢と、現在選択中のスキン(index)の準備 #28195 2012.5.2 yyagi ]\r
- CDTXMania.Skin.ReloadSkinPaths(); // CONFIGに入るタイミングで、スキンフォルダを再検索\r
- skinSubFolders = CDTXMania.Skin.strSkinSubfolders;\r
+ //CDTXMania.Skin.ReloadSkinPaths(); // CONFIGに入るタイミングで、スキンフォルダを再検索\r
+ skinSubFolders = (string[])CDTXMania.Skin.strSkinSubfolders.Clone(); // skinSubFoldersへの書き換えが元に及ばないよう、Clone()する\r
+ skinSubFolder_org = CSkin.strSkinSubfolder;\r
nSkinIndex = Array.BinarySearch( skinSubFolders, CSkin.strSkinSubfolder );\r
nSkinSampleIndex = -1;\r
for ( int i = 0; i < skinSubFolders.Length; i++ ) // "SkinFiles."を削除\r
{\r
- skinSubFolders[ i ] = skinSubFolders[ i ].Substring( "SkinFiles.".Length );\r
+ skinSubFolders[ i ] = skinSubFolders[ i ].Substring( CSkin.PrefixSkinFolder.Length );\r
}\r
#endregion\r
\r
this.ct三角矢印アニメ = null;\r
\r
base.On非活性化();\r
+\r
+ if ( CSkin.strSkinSubfolder != this.skinSubFolder_org )\r
+ {\r
+ CDTXMania.Skin.PrepareReloadSkin(); // #28195 2012.5.2 yyagi CONFIG脱出時にSkin更新\r
+ CDTXMania.Skin.ReloadSkin(); //\r
+ }\r
+\r
}\r
public override void OnManagedリソースの作成()\r
{\r
\r
private CTexture txSkinSample1; // #28195 2012.5.2 yyagi\r
private string[] skinSubFolders; //\r
+ private string skinSubFolder_org; //\r
private int nSkinSampleIndex; //\r
private int nSkinIndex; //\r
\r
\r
CDTXMania.ConfigIni.nRisky = this.iSystemRisky.n現在の値; // #23559 2911.7.27 yyagi\r
\r
- CDTXMania.ConfigIni.strSkinSubfolder = "SkinFiles." + (string)this.iSystemSkinSubfolder.list項目値[ nSkinIndex ]; // #28195 2012.5.2 yyagi\r
- CSkin.strSkinSubfolder = CDTXMania.ConfigIni.strSkinSubfolder;\r
+ CDTXMania.ConfigIni.strSkinSubfolder = CSkin.PrefixSkinFolder + ( string ) this.iSystemSkinSubfolder.list項目値[ nSkinIndex ]; // #28195 2012.5.2 yyagi\r
+ CSkin.strSkinSubfolder = CDTXMania.ConfigIni.strSkinSubfolder; //\r
}\r
private void tConfigIniへ記録する・Bass()\r
{\r
\r
internal class CSkin : IDisposable\r
{\r
- public static string PrefixSkinFolder = "SkinFiles.";\r
+ public static string PrefixSkinFolder = ""; // "SkinFiles.";\r
\r
// クラス\r
\r
/// あらかじめstrSkinSubfolderを適切に設定しておくこと。\r
/// その後、ReloadSkinPaths()を実行し、strSkinSubfolderの正当性を確認した上で、本メソッドを呼び出すこと。\r
/// 本メソッド呼び出し後に、ReloadSkin()を実行することで、システムサウンドを読み込み直す。\r
+ /// ReloadSkin()の内容は本メソッド内に含めないこと。起動時はReloadSkin()相当の処理をCEnumSongsで行っているため。\r
/// </summary>\r
public void PrepareReloadSkin()\r
{\r
string path;\r
#region [ まず System/SkinFiles.*** をenumerateする ]\r
path = System.IO.Path.Combine( CDTXMania.strEXEのあるフォルダ, "System" );\r
- strSkinSubfolders = System.IO.Directory.GetDirectories( path, PrefixSkinFolder + "*" );\r
+ string[] tempSkinSubfolders = System.IO.Directory.GetDirectories( path, PrefixSkinFolder + "*" );\r
+ strSkinSubfolders = new string[ tempSkinSubfolders.Length ];\r
+ int size = 0;\r
for ( int i = 0; i < strSkinSubfolders.Length; i++ )\r
{\r
- string[] spl = strSkinSubfolders[ i ].Split( System.IO.Path.DirectorySeparatorChar );\r
- strSkinSubfolders[ i ] = spl[ spl.Length - 1 ]; // subfolder名から、~~/System/ までの部分を削除\r
+ #region [ 検出したフォルダがスキンフォルダかどうか確認する]\r
+ string filePathTitle;\r
+ filePathTitle = System.IO.Path.Combine( tempSkinSubfolders[i], @"Graphics\ScreenTitle background.jpg" );\r
+ if ( !File.Exists( filePathTitle ) )\r
+ continue;\r
+ #endregion\r
+ #region [ スキンフォルダと確認できたものを、strSKinSubfoldersに入れる ]\r
+ string[] spl = tempSkinSubfolders[ i ].Split( System.IO.Path.DirectorySeparatorChar );\r
+ strSkinSubfolders[ size++ ] = spl[ spl.Length - 1 ]; // subfolder名から、~~/System/ までの部分を削除\r
Trace.TraceInformation( "SkinPath検出: {0}", strSkinSubfolders[ i ] );\r
+ #endregion\r
}\r
+ Array.Resize( ref strSkinSubfolders, size );\r
Array.Sort( strSkinSubfolders ); // BinarySearch実行前にSortが必要\r
#endregion\r
+\r
#region [ 次に、カレントのSkinパスが存在するか調べる。あれば終了。]\r
if ( Array.BinarySearch( strSkinSubfolders, strSkinSubfolder, StringComparer.InvariantCultureIgnoreCase ) >= 0 )\r
return;\r