using System.Diagnostics;\r
using System.Text;\r
using System.Drawing;\r
+using SlimDX;\r
using FDK;\r
\r
namespace DTXMania\r
{\r
return false;\r
}\r
-// CItemBase base2 = this.list項目リスト[ this.n現在の選択項目 ];\r
-// if( ( ( base2 != this.iSystemReturnToMenu ) && ( base2 != this.iKeyAssignDrumsReturnToMenu ) ) && ( base2 != this.iKeyAssignGuitarReturnToMenu ) )\r
-// {\r
-// return ( base2 == this.iKeyAssignBassReturnToMenu );\r
-// }\r
-// return true;\r
}\r
}\r
public CItemBase ib現在の選択項目\r
"Turn ON to put debug log to\n DTXManiaLog.txt\nTo take it effective, you need to\n re-open DTXMania." );\r
this.list項目リスト.Add( this.iLogOutputLog );\r
\r
+ this.iSystemSkinSubfolder = new CItemList( "Skin (General)", CItemBase.Eパネル種別.通常, nSkinIndex,\r
+ "スキン切替:\n" +\r
+ "スキンを切り替えます。\n",\r
+ //"CONFIGURATIONを抜けると、設定した\n" +\r
+ //"スキンに変更されます。",\r
+ "Skin:\n" +\r
+ "Change skin.",\r
+ skinNames );\r
+ this.list項目リスト.Add( this.iSystemSkinSubfolder );\r
+ this.iSystemUseBoxDefSkin = new CItemToggle( "Skin (Box)", CDTXMania.ConfigIni.bUseBoxDefSkin,\r
+ "Music boxスキンの利用:\n" +\r
+ "特別なスキンが設定されたMusic box\n" +\r
+ "に出入りしたときに、自動でスキンを\n" +\r
+ "切り替えるかどうかを設定します。\n",\r
+ //"\n" +\r
+ //"(Music Boxスキンは、box.defファイル\n" +\r
+ //" で指定できます)\n",\r
+ "Box skin:\n" +\r
+ "Automatically change skin\n" +\r
+ "specified in box.def file." );\r
+ this.list項目リスト.Add( this.iSystemUseBoxDefSkin );\r
+\r
+ \r
this.iSystemGoToKeyAssign = new CItemBase( "System Keys", CItemBase.Eパネル種別.通常,\r
"システムのキー入力に関する項目を設\n定します。",\r
"Settings for the system key/pad inputs." );\r
}\r
else if( this.b現在選択されている項目はReturnToMenuである )\r
{\r
- this.tConfigIniへ記録する();\r
+ //this.tConfigIniへ記録する();\r
+ //CONFIG中にスキン変化が発生すると面倒なので、一旦マスクした。\r
}\r
else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iKeyAssignDrumsLC )\r
{\r
CDTXMania.ConfigIni.BackupOf1BD = null;\r
}\r
}\r
+ else if ( this.list項目リスト[ this.n現在の選択項目 ] == this.iSystemUseBoxDefSkin ) // #28195 2012.5.6 yyagi\r
+ {\r
+ CSkin.bUseBoxDefSkin = this.iSystemUseBoxDefSkin.bON;\r
+ }\r
+ #region [ スキン項目でEnterを押下した場合に限り、スキンの縮小サンプルを生成する。]\r
+ else if ( this.list項目リスト[ this.n現在の選択項目 ] == this.iSystemSkinSubfolder ) // #28195 2012.5.2 yyagi\r
+ {\r
+ tGenerateSkinSample();\r
+ }\r
+ #endregion\r
+ }\r
+ }\r
+\r
+ private void tGenerateSkinSample()\r
+ {\r
+ nSkinIndex = ( ( CItemList ) this.list項目リスト[ this.n現在の選択項目 ] ).n現在選択されている項目番号;\r
+ if ( nSkinSampleIndex != nSkinIndex )\r
+ {\r
+ string path = skinSubFolders[ nSkinIndex ];\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
+ Graphics g = Graphics.FromImage( bmDest );\r
+ g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;\r
+ g.DrawImage( bmSrc, new Rectangle( 0, 0, bmSrc.Width / 4, bmSrc.Height / 4 ),\r
+ 0, 0, bmSrc.Width, bmSrc.Height, GraphicsUnit.Pixel );\r
+ if ( txSkinSample1 != null )\r
+ {\r
+ CDTXMania.t安全にDisposeする( ref txSkinSample1 );\r
+ }\r
+ txSkinSample1 = CDTXMania.tテクスチャの生成( bmDest, false );\r
+ g.Dispose();\r
+ bmDest.Dispose();\r
+ bmSrc.Dispose();\r
+ nSkinSampleIndex = nSkinIndex;\r
}\r
}\r
\r
\r
this.list項目リスト = new List<CItemBase>();\r
this.eメニュー種別 = Eメニュー種別.Unknown;\r
- this.t項目リストの設定・System();\r
+\r
+ #region [ スキン選択肢と、現在選択中のスキン(index)の準備 #28195 2012.5.2 yyagi ]\r
+ int ns = ( CDTXMania.Skin.strSystemSkinSubfolders == null ) ? 0 : CDTXMania.Skin.strSystemSkinSubfolders.Length;\r
+ int nb = ( CDTXMania.Skin.strBoxDefSkinSubfolders == null ) ? 0 : CDTXMania.Skin.strBoxDefSkinSubfolders.Length;\r
+ skinSubFolders = new string[ ns + nb ];\r
+ for ( int i = 0; i < ns; i++ )\r
+ {\r
+ skinSubFolders[ i ] = CDTXMania.Skin.strSystemSkinSubfolders[ i ];\r
+ }\r
+ for ( int i = 0; i < nb; i++ )\r
+ {\r
+ skinSubFolders[ ns + i ] = CDTXMania.Skin.strBoxDefSkinSubfolders[ i ];\r
+ }\r
+ skinSubFolder_org = CDTXMania.Skin.GetCurrentSkinSubfolderFullName( true );\r
+ Array.Sort( skinSubFolders );\r
+ skinNames = CSkin.GetSkinName( skinSubFolders );\r
+ nSkinIndex = Array.BinarySearch( skinSubFolders, skinSubFolder_org );\r
+ if ( nSkinIndex < 0 ) // 念のため\r
+ {\r
+ nSkinIndex = 0;\r
+ }\r
+ nSkinSampleIndex = -1;\r
+ #endregion\r
+\r
+ this.t項目リストの設定・Bass(); // #27795 2012.3.11 yyagi; System設定の中でDrumsの設定を参照しているため、\r
+ this.t項目リストの設定・Guitar(); // 活性化の時点でDrumsの設定も入れ込んでおかないと、System設定中に例外発生することがある。\r
+ this.t項目リストの設定・Drums(); // \r
+ this.t項目リストの設定・System(); // 順番として、最後にSystemを持ってくること。設定一覧の初期位置がSystemのため。\r
this.b要素値にフォーカス中 = false;\r
this.n目標のスクロールカウンタ = 0;\r
this.n現在のスクロールカウンタ = 0;\r
this.ct三角矢印アニメ = null;\r
\r
base.On非活性化();\r
+\r
+ if ( CDTXMania.Skin.GetCurrentSkinSubfolderFullName( true ) != 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
this.tx通常項目行パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig itembox.png" ), false );\r
this.txその他項目行パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig itembox other.png" ), false );\r
this.tx三角矢印 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig triangle arrow.png" ), false );\r
-\r
+ this.txSkinSample1 = null; // スキン選択時に動的に設定するため、ここでは初期化しない\r
base.OnManagedリソースの作成();\r
}\r
public override void OnManagedリソースの解放()\r
if( this.b活性化してない )\r
return;\r
\r
+ CDTXMania.tテクスチャの解放( ref this.txSkinSample1 );\r
CDTXMania.tテクスチャの解放( ref this.tx通常項目行パネル );\r
CDTXMania.tテクスチャの解放( ref this.txその他項目行パネル );\r
CDTXMania.tテクスチャの解放( ref this.tx三角矢印 );\r
//-----------------\r
#endregion\r
\r
- case CItemBase.E種別.リスト:\r
+ case CItemBase.E種別.リスト: // #28195 2012.5.2 yyagi: add Skin supports\r
#region [ *** ]\r
//-----------------\r
{\r
CItemList list = (CItemList) this.list項目リスト[ nItem ];\r
CDTXMania.stageコンフィグ.actFont.t文字列描画( x + 210, y + 12, list.list項目値[ list.n現在選択されている項目番号 ] );\r
+\r
+ #region [ 必要な場合に、Skinのサンプルを生成・描画する。#28195 2012.5.2 yyagi ]\r
+ if ( this.list項目リスト[ this.n現在の選択項目 ] == this.iSystemSkinSubfolder )\r
+ {\r
+ tGenerateSkinSample(); // 最初にSkinの選択肢にきたとき(Enterを押す前)に限り、サンプル生成が発生する。\r
+ if ( txSkinSample1 != null )\r
+ {\r
+ txSkinSample1.t2D描画( CDTXMania.app.Device, 56, 300 );\r
+ }\r
+ }\r
+ #endregion\r
break;\r
}\r
//-----------------\r
}\r
//-----------------\r
#endregion\r
-\r
return 0;\r
}\r
\r
private CTexture tx三角矢印;\r
private CTexture tx通常項目行パネル;\r
\r
+ private CTexture txSkinSample1; // #28195 2012.5.2 yyagi\r
+ private string[] skinSubFolders; //\r
+ private string[] skinNames; //\r
+ private string skinSubFolder_org; //\r
+ private int nSkinSampleIndex; //\r
+ private int nSkinIndex; //\r
+\r
private CItemBase iDrumsGoToKeyAssign;\r
private CItemBase iGuitarGoToKeyAssign;\r
private CItemBase iBassGoToKeyAssign;\r
private CItemInteger iDrumsInputAdjustTimeMs; // #23580 2011.1.3 yyagi\r
private CItemInteger iGuitarInputAdjustTimeMs; //\r
private CItemInteger iBassInputAdjustTimeMs; //\r
+ private CItemList iSystemSkinSubfolder; // #28195 2012.5.2 yyagi\r
+ private CItemToggle iSystemUseBoxDefSkin; // #28195 2012.5.6 yyagi\r
\r
private int t前の項目( int nItem )\r
{\r
CDTXMania.ConfigIni.n自動再生音量 = this.iSystemAutoChipVolume.n現在の値;\r
CDTXMania.ConfigIni.bストイックモード = this.iSystemStoicMode.bON;\r
\r
- CDTXMania.ConfigIni.nShowLagType = this.iSystemShowLag.n現在選択されている項目番号; // #25370 2011.6.3 yyagi\r
- CDTXMania.ConfigIni.bIsAutoResultCapture = this.iSystemAutoResultCapture.bON; // #25399 2011.6.9 yyagi\r
+ CDTXMania.ConfigIni.nShowLagType = this.iSystemShowLag.n現在選択されている項目番号; // #25370 2011.6.3 yyagi\r
+ CDTXMania.ConfigIni.bIsAutoResultCapture = this.iSystemAutoResultCapture.bON; // #25399 2011.6.9 yyagi\r
\r
- CDTXMania.ConfigIni.nRisky = this.iSystemRisky.n現在の値; // #23559 2911.7.27 yyagi\r
+ CDTXMania.ConfigIni.nRisky = this.iSystemRisky.n現在の値; // #23559 2911.7.27 yyagi\r
+\r
+ CDTXMania.ConfigIni.strSystemSkinSubfolderFullName = skinSubFolders[ nSkinIndex ]; // #28195 2012.5.2 yyagi\r
+ CDTXMania.Skin.SetCurrentSkinSubfolderFullName( CDTXMania.ConfigIni.strSystemSkinSubfolderFullName, true );\r
+ CDTXMania.ConfigIni.bUseBoxDefSkin = this.iSystemUseBoxDefSkin.bON; // #28195 2012.5.6 yyagi\r
+\r
+//Trace.TraceInformation( "saved" );\r
+//Trace.TraceInformation( "Skin現在Current : " + CDTXMania.Skin.GetCurrentSkinSubfolderFullName(true) );\r
+//Trace.TraceInformation( "Skin現在System : " + CSkin.strSystemSkinSubfolderFullName );\r
+//Trace.TraceInformation( "Skin現在BoxDef : " + CSkin.strBoxDefSkinSubfolderFullName );\r
+ \r
}\r
private void tConfigIniへ記録する・Bass()\r
{\r