OSDN Git Service

#xxxxx COptionList<>クラスで、Indexを外部から変更したときに、内部のvalが追従しなかった問題を修正。
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 04.コンフィグ / CStageコンフィグ.cs
index 56079ad..ee604ce 100644 (file)
@@ -6,107 +6,223 @@ using System.Runtime.InteropServices;
 using System.Drawing;\r
 using System.Diagnostics;\r
 using FDK;\r
+using System.Runtime.Serialization;\r
+using System.Threading;\r
 \r
 namespace DTXMania\r
 {\r
+\r
        internal class CStageコンフィグ : CStage\r
        {\r
-               // プロパティ\r
+               CActFIFOWhite actFIFO;\r
+               CActConfigKeyAssign actKeyAssign;\r
+               CActConfigList actList;\r
+               CActオプションパネル actオプションパネル;\r
+               bool bメニューにフォーカス中;\r
+               STキー反復用カウンタ ctキー反復用;\r
+               const int DESC_H = 0x80;\r
+               const int DESC_W = 220;\r
+               EItemPanelモード eItemPanelモード;\r
+               Font ftフォント;\r
+               int n現在のメニュー番号;\r
+               CTexture txMenuカーソル;\r
+               CTextureAf tx下部パネル;\r
+               CTextureAf tx上部パネル;\r
+               CTexture tx説明文パネル;\r
+               CTexture tx背景;\r
+               CPrivateFastFont prvFont;\r
+               CTexture[,] txMenuItemLeft;\r
+               STDGBSValue<float> fDisplayLagTimeBaseMs;\r
+\r
+               enum EItemPanelモード\r
+               {\r
+                       パッド一覧,\r
+                       キーコード一覧\r
+               }\r
+\r
+               [StructLayout(LayoutKind.Sequential)]\r
+               struct STキー反復用カウンタ\r
+               {\r
+                       public CCounter Up;\r
+                       public CCounter Down;\r
+                       public CCounter R;\r
+                       public CCounter B;\r
+                       public CCounter this[int index]\r
+                       {\r
+                               get\r
+                               {\r
+                                       switch (index)\r
+                                       {\r
+                                               case 0:\r
+                                                       return this.Up;\r
+\r
+                                               case 1:\r
+                                                       return this.Down;\r
+\r
+                                               case 2:\r
+                                                       return this.R;\r
+\r
+                                               case 3:\r
+                                                       return this.B;\r
+                                       }\r
+                                       throw new IndexOutOfRangeException();\r
+                               }\r
+                               set\r
+                               {\r
+                                       switch (index)\r
+                                       {\r
+                                               case 0:\r
+                                                       this.Up = value;\r
+                                                       return;\r
 \r
-               public CActDFPFont actFont { get; private set; }\r
+                                               case 1:\r
+                                                       this.Down = value;\r
+                                                       return;\r
 \r
+                                               case 2:\r
+                                                       this.R = value;\r
+                                                       return;\r
 \r
-               // コンストラクタ\r
+                                               case 3:\r
+                                                       this.B = value;\r
+                                                       return;\r
+                                       }\r
+                                       throw new IndexOutOfRangeException();\r
+                               }\r
+                       }\r
+               }\r
 \r
                public CStageコンフィグ()\r
                {\r
-                       CActDFPFont font;\r
-                       base.eステージID = CStage.Eステージ.コンフィグ;\r
-                       base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
-                       this.actFont = font = new CActDFPFont();\r
-                       base.list子Activities.Add( font );\r
-                       base.list子Activities.Add( this.actFIFO = new CActFIFOWhite() );\r
-                       base.list子Activities.Add( this.actList = new CActConfigList() );\r
-                       base.list子Activities.Add( this.actKeyAssign = new CActConfigKeyAssign() );\r
-                       base.list子Activities.Add( this.actオプションパネル = new CActオプションパネル() );\r
-                       base.b活性化してない = true;\r
+                       eステージID = CStage.Eステージ.コンフィグ;\r
+                       eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
+                       list子Activities.Add(actFIFO = new CActFIFOWhite());\r
+                       list子Activities.Add(actList = new CActConfigList());\r
+                       list子Activities.Add(actKeyAssign = new CActConfigKeyAssign());\r
+                       list子Activities.Add(actオプションパネル =\r
+                               new CActオプションパネル(EOptionPanelDirection.Horizontal));\r
+                       b活性化してない = true;\r
                }\r
-               \r
-               \r
-               // メソッド\r
-\r
-               public void tアサイン完了通知()                                                                                                                 // CONFIGにのみ存在\r
-               {                                                                                                                                                                               //\r
-                       this.eItemPanelモード = EItemPanelモード.パッド一覧;                                                         //\r
-               }                                                                                                                                                                               //\r
-               public void tパッド選択通知( EKeyConfigPart part, EKeyConfigPad pad )                                                    //\r
-               {                                                                                                                                                                               //\r
-                       this.actKeyAssign.t開始( part, pad, this.actList.ib現在の選択項目.str項目名 );              //\r
-                       this.eItemPanelモード = EItemPanelモード.キーコード一覧;                                                   //\r
-               }                                                                                                                                                                               //\r
-               public void t項目変更通知()                                                                                                                               // OPTIONと共通\r
-               {                                                                                                                                                                               //\r
-                       this.t説明文パネルに現在選択されている項目の説明を描画する();                                         //\r
-               }                                                                                                                                                                               //\r
-\r
-               \r
-               // CStage 実装\r
+\r
+               public void tアサイン完了通知()\r
+               {\r
+                       this.eItemPanelモード = EItemPanelモード.パッド一覧;\r
+               }\r
+\r
+               public void tパッド選択通知(EPad pad)\r
+               {\r
+                       this.actKeyAssign.t開始(pad, this.actList.ib現在の選択項目.label);\r
+                       this.eItemPanelモード = EItemPanelモード.キーコード一覧;\r
+               }\r
+\r
+               public void t項目変更通知()\r
+               {\r
+                       this.t説明文パネルに現在選択されている項目の説明を描画する();\r
+               }\r
+\r
 \r
                public override void On活性化()\r
                {\r
-                       Trace.TraceInformation( "コンフィグステージを活性化します。" );\r
-                       Trace.Indent();\r
-                       try\r
-                       {\r
-                               this.n現在のメニュー番号 = 0;                                                                                                  //\r
-                               this.ftフォント = new Font( "MS PGothic", 26f, GraphicsUnit.Pixel );                        //\r
-                               for( int i = 0; i < 4; i++ )                                                                                                    //\r
-                               {                                                                                                                                                               //\r
-                                       this.ctキー反復用[ i ] = new CCounter( 0, 0, 0, CDTXMania.Timer );                 //\r
-                               }                                                                                                                                                               //\r
-                               this.bメニューにフォーカス中 = true;                                                                                 // ここまでOPTIONと共通\r
-                               this.eItemPanelモード = EItemPanelモード.パッド一覧;\r
-                       }\r
-                       finally\r
+                       if (base.b活性化してない)\r
                        {\r
-                               Trace.TraceInformation( "コンフィグステージの活性化を完了しました。" );\r
-                               Trace.Unindent();\r
+                               Trace.TraceInformation("コンフィグステージを活性化します。");\r
+                               Trace.Indent();\r
+                               try\r
+                               {\r
+                                       this.n現在のメニュー番号 = 0;\r
+                                       this.ftフォント = new Font("MS PGothic", 26f / 2 * Scale.Y, FontStyle.Bold, GraphicsUnit.Pixel);            //\r
+                                       for (int i = 0; i < 4; i++)\r
+                                       {\r
+                                               this.ctキー反復用[i] = new CCounter(0, 0, 0, CDTXMania.Instance.Timer);\r
+                                       }\r
+                                       this.bメニューにフォーカス中 = true;\r
+                                       // ここまでOPTIONと共通\r
+                                       this.eItemPanelモード = EItemPanelモード.パッド一覧;\r
+\r
+                                       fDisplayLagTimeBaseMs = new STDGBSValue<float>();\r
+                                       for (EPart i = EPart.Drums; i <= EPart.Bass; ++i)\r
+                                       {\r
+                                               fDisplayLagTimeBaseMs[i] = CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset[i] /\r
+                                                               (CDTXMania.Instance.ConfigIni.nScrollSpeed[i] + 1);\r
+                                       }\r
+                                       actオプションパネル.Pos = CDTXMania.Instance.Coordinates.OptionPanelSelect;\r
+                               }\r
+                               finally\r
+                               {\r
+                                       Trace.TraceInformation("コンフィグステージの活性化を完了しました。");\r
+                                       Trace.Unindent();\r
+                               }\r
+                               base.On活性化();\r
                        }\r
-                       base.On活性化();             // 2011.3.14 yyagi: On活性化()をtryの中から外に移動\r
                }\r
+\r
                public override void On非活性化()\r
                {\r
-                       Trace.TraceInformation( "コンフィグステージを非活性化します。" );\r
-                       Trace.Indent();\r
-                       try\r
+                       if (base.b活性化してる)\r
                        {\r
-                               CDTXMania.ConfigIni.t書き出し( CDTXMania.strEXEのあるフォルダ + "Config.ini" );      // CONFIGだけ\r
-                               if( this.ftフォント != null )                                                                                                       // 以下OPTIONと共通\r
+                               Trace.TraceInformation("コンフィグステージを非活性化します。");\r
+                               Trace.Indent();\r
+                               try\r
+                               {\r
+                                       CDTXMania.Instance.SaveConfig();\r
+                                       TextureFactory.t安全にDisposeする(ref this.ftフォント);\r
+                                       for (int i = 0; i < 4; i++)\r
+                                       {\r
+                                               this.ctキー反復用[i] = null;\r
+                                       }\r
+\r
+                                       CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Drums.Value = (int)(fDisplayLagTimeBaseMs.Drums * (CDTXMania.Instance.ConfigIni.nScrollSpeed.Drums + 1));\r
+                                       CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Guitar.Value = (int)(fDisplayLagTimeBaseMs.Guitar * (CDTXMania.Instance.ConfigIni.nScrollSpeed.Guitar + 1));\r
+                                       CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Bass.Value = (int)(fDisplayLagTimeBaseMs.Bass * (CDTXMania.Instance.ConfigIni.nScrollSpeed.Bass + 1));\r
+\r
+                                       base.On非活性化();\r
+                               }\r
+                               catch (UnauthorizedAccessException e)\r
                                {\r
-                                       this.ftフォント.Dispose();\r
-                                       this.ftフォント = null;\r
+                                       Trace.TraceError(e.Message + "ファイルが読み取り専用になっていないか、管理者権限がないと書き込めなくなっていないか等を確認して下さい");\r
                                }\r
-                               for( int i = 0; i < 4; i++ )\r
+                               catch (Exception e)\r
                                {\r
-                                       this.ctキー反復用[ i ] = null;\r
+                                       Trace.TraceError(e.Message);\r
+                               }\r
+                               finally\r
+                               {\r
+                                       Trace.TraceInformation("コンフィグステージの非活性化を完了しました。");\r
+                                       Trace.Unindent();\r
                                }\r
-                               base.On非活性化();\r
-                       }\r
-                       finally\r
-                       {\r
-                               Trace.TraceInformation( "コンフィグステージの非活性化を完了しました。" );\r
-                               Trace.Unindent();\r
                        }\r
                }\r
-               public override void OnManagedリソースの作成()                                                                                   // OPTIONと画像以外共通\r
+\r
+               public override void OnManagedリソースの作成()\r
                {\r
-                       if( !base.b活性化してない )\r
+                       if (base.b活性化してる)\r
                        {\r
-                               this.tx背景 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig background.jpg" ), false );\r
-                               this.tx上部パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig header panel.png" ), true );\r
-                               this.tx下部パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig footer panel.png" ), true );\r
-                               this.txMenuカーソル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig menu cursor.png" ), false );\r
-                               if( this.bメニューにフォーカス中 )\r
+                               this.tx背景 = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenConfig background.jpg"), false);\r
+                               this.tx上部パネル = TextureFactory.tテクスチャの生成Af(CSkin.Path(@"Graphics\ScreenConfig header panel.png"), true);\r
+                               this.tx下部パネル = TextureFactory.tテクスチャの生成Af(CSkin.Path(@"Graphics\ScreenConfig footer panel.png"), true);\r
+                               this.txMenuカーソル = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenConfig menu cursor.png"), false);\r
+\r
+                               prvFont = new CPrivateFastFont(CSkin.Path(@"Graphics\fonts\mplus-1p-heavy.ttf"), (int)(18 * Scale.Y));\r
+                               string[] strMenuItem = { \r
+                                       "strCfgSysMenuItem",\r
+                                       "strCfgDrMenuItem",\r
+                                       "strCfgGtMenuItem",\r
+                                       "strCfgBsMenuItem",\r
+                                       "strCfgExitMenuItem"\r
+                               };\r
+                               txMenuItemLeft = new CTexture[strMenuItem.Length, 2];\r
+                               for (int i = 0; i < strMenuItem.Length; i++)\r
+                               {\r
+                                       Bitmap bmpStr;\r
+                                       string s = CDTXMania.Instance.Resources.Label( strMenuItem[ i ] );\r
+                                       bmpStr = prvFont.DrawPrivateFont(s, Color.White, Color.Black);\r
+                                       txMenuItemLeft[i, 0] = TextureFactory.tテクスチャの生成(bmpStr, false);\r
+                                       bmpStr.Dispose();\r
+                                       bmpStr = prvFont.DrawPrivateFont(s, Color.White, Color.Black, Color.Yellow, Color.OrangeRed);\r
+                                       txMenuItemLeft[i, 1] = TextureFactory.tテクスチャの生成(bmpStr, false);\r
+                                       bmpStr.Dispose();\r
+                               }\r
+                               if (this.bメニューにフォーカス中)\r
                                {\r
                                        this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
                                }\r
@@ -117,556 +233,420 @@ namespace DTXMania
                                base.OnManagedリソースの作成();\r
                        }\r
                }\r
-               public override void OnManagedリソースの解放()                                                                                   // OPTIONと同じ(COnfig.iniの書き出しタイミングのみ異なるが、無視して良い)\r
+\r
+               public override void OnManagedリソースの解放()\r
                {\r
-                       if( !base.b活性化してない )\r
+                       if (base.b活性化してる)\r
                        {\r
-                               CDTXMania.tテクスチャの解放( ref this.tx背景 );\r
-                               CDTXMania.tテクスチャの解放( ref this.tx上部パネル );\r
-                               CDTXMania.tテクスチャの解放( ref this.tx下部パネル );\r
-                               CDTXMania.tテクスチャの解放( ref this.txMenuカーソル );\r
-                               CDTXMania.tテクスチャの解放( ref this.tx説明文パネル );\r
+                               TextureFactory.tテクスチャの解放(ref this.tx背景);\r
+                               TextureFactory.tテクスチャの解放(ref this.tx上部パネル);\r
+                               TextureFactory.tテクスチャの解放(ref this.tx下部パネル);\r
+                               TextureFactory.tテクスチャの解放(ref this.txMenuカーソル);\r
+                               TextureFactory.tテクスチャの解放(ref this.tx説明文パネル);\r
+                               prvFont.Dispose();\r
+                               for (int i = 0; i < txMenuItemLeft.GetLength(0); i++)\r
+                               {\r
+                                       TextureFactory.tテクスチャの解放(ref txMenuItemLeft[i, 0]);\r
+                                       TextureFactory.tテクスチャの解放(ref txMenuItemLeft[i, 1]);\r
+                               }\r
+                               txMenuItemLeft = null;\r
                                base.OnManagedリソースの解放();\r
                        }\r
                }\r
+\r
                public override int On進行描画()\r
                {\r
-                       if( base.b活性化してない )\r
-                               return 0;\r
-\r
-                       if( base.b初めての進行描画 )\r
-                       {\r
-                               base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;\r
-                               this.actFIFO.tフェードイン開始();\r
-                               base.b初めての進行描画 = false;\r
-                       }\r
-\r
-                       // 描画\r
-\r
-                       #region [ 背景 ]\r
-                       //---------------------\r
-                       if( this.tx背景 != null )\r
-                               this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );\r
-                       //---------------------\r
-                       #endregion\r
-                       #region [ メニューカーソル ]\r
-                       //---------------------\r
-                       if( this.txMenuカーソル != null )\r
+                       if (base.b活性化してる)\r
                        {\r
-                               Rectangle rectangle;\r
-                               this.txMenuカーソル.n透明度 = this.bメニューにフォーカス中 ? 0xff : 0x80;\r
-                               int x = 0x37;\r
-                               int y = 0x61 + ( this.n現在のメニュー番号 * 0x19 );\r
-                               int num3 = 170;\r
-                               this.txMenuカーソル.t2D描画( CDTXMania.app.Device, x, y, new Rectangle( 0, 0, 0x10, 0x20 ) );\r
-                               this.txMenuカーソル.t2D描画( CDTXMania.app.Device, ( x + num3 ) - 0x10, y, new Rectangle( 10, 0, 0x10, 0x20 ) );\r
-                               x += 0x10;\r
-                               for( num3 -= 0x20; num3 > 0; num3 -= rectangle.Width )\r
+                               if (base.b初めての進行描画)\r
                                {\r
-                                       rectangle = new Rectangle( 8, 0, 0x10, 0x20 );\r
-                                       if( num3 < 0x10 )\r
-                                       {\r
-                                               rectangle.Width -= 0x10 - num3;\r
-                                       }\r
-                                       this.txMenuカーソル.t2D描画( CDTXMania.app.Device, x, y, rectangle );\r
-                                       x += rectangle.Width;\r
+                                       base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;\r
+                                       this.actFIFO.tフェードイン開始();\r
+                                       base.b初めての進行描画 = false;\r
                                }\r
-                       }\r
-                       //---------------------\r
-                       #endregion\r
-                       #region [ メニュー ]\r
-                       //---------------------\r
-                       string str = "System";\r
-                       int num4 = this.actFont.n文字列長dot( str );\r
-                       bool flag = this.n現在のメニュー番号 == 0;\r
-                       this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 100, str, flag );\r
-                       //str = "Drums Keys";\r
-                       //num4 = this.actFont.n文字列長dot( str );\r
-                       //flag = this.n現在のメニュー番号 == 1;\r
-                       //this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 0x7d, str, flag );\r
-                       //str = "Guitar Keys";\r
-                       //num4 = this.actFont.n文字列長dot( str );\r
-                       //flag = this.n現在のメニュー番号 == 2;\r
-                       //this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 150, str, flag );\r
-                       //str = "Bass Keys";\r
-                       //num4 = this.actFont.n文字列長dot( str );\r
-                       //flag = this.n現在のメニュー番号 == 3;\r
-                       //this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 0xaf, str, flag );\r
-                       //str = "Exit";\r
-                       //num4 = this.actFont.n文字列長dot( str );\r
-                       //flag = this.n現在のメニュー番号 == 4;\r
-                       //this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 200, str, flag );\r
-                       str = "Drums";\r
-                       num4 = this.actFont.n文字列長dot( str );\r
-                       flag = this.n現在のメニュー番号 == 1;\r
-                       this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 0x7d, str, flag );\r
-                       str = "Guitar";\r
-                       num4 = this.actFont.n文字列長dot( str );\r
-                       flag = this.n現在のメニュー番号 == 2;\r
-                       this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 150, str, flag );\r
-                       str = "Bass";\r
-                       num4 = this.actFont.n文字列長dot( str );\r
-                       flag = this.n現在のメニュー番号 == 3;\r
-                       this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 0xaf, str, flag );\r
-                       str = "Exit";\r
-                       num4 = this.actFont.n文字列長dot( str );\r
-                       flag = this.n現在のメニュー番号 == 4;\r
-                       this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 200, str, flag );\r
-\r
-                       //---------------------\r
-                       #endregion\r
-                       #region [ 説明文パネル ]\r
-                       //---------------------\r
-                       if( this.tx説明文パネル != null )\r
-                               this.tx説明文パネル.t2D描画( CDTXMania.app.Device, 0x1d, 0xf8 );\r
-                       //---------------------\r
-                       #endregion\r
-                       #region [ アイテム ]\r
-                       //---------------------\r
-                       switch( this.eItemPanelモード )\r
-                       {\r
-                               case EItemPanelモード.パッド一覧:\r
-                                       this.actList.t進行描画( !this.bメニューにフォーカス中 );\r
-                                       break;\r
 \r
-                               case EItemPanelモード.キーコード一覧:\r
-                                       this.actKeyAssign.On進行描画();\r
-                                       break;\r
-                       }\r
-                       //---------------------\r
-                       #endregion\r
-                       #region [ 上部パネル ]\r
-                       //---------------------\r
-                       if( this.tx上部パネル != null )\r
-                               this.tx上部パネル.t2D描画( CDTXMania.app.Device, 0, 0 );\r
-                       //---------------------\r
-                       #endregion\r
-                       #region [ 下部パネル ]\r
-                       //---------------------\r
-                       if( this.tx下部パネル != null )\r
-                               this.tx下部パネル.t2D描画( CDTXMania.app.Device, 0, 480 - this.tx下部パネル.szテクスチャサイズ.Height );\r
-                       //---------------------\r
-                       #endregion\r
-                       #region [ オプションパネル ]\r
-                       //---------------------\r
-                       this.actオプションパネル.On進行描画();\r
-                       //---------------------\r
-                       #endregion\r
-                       #region [ フェードイン・アウト ]\r
-                       //---------------------\r
-                       switch( base.eフェーズID )\r
-                       {\r
-                               case CStage.Eフェーズ.共通_フェードイン:\r
-                                       if( this.actFIFO.On進行描画() != 0 )\r
-                                       {\r
-                                               CDTXMania.Skin.bgmコンフィグ画面.t再生する();\r
-                                               base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
-                                       }\r
-                                       break;\r
+                               // 描画\r
+                               if (this.tx背景 != null)\r
+                               {\r
+                                       this.tx背景.t2D描画(CDTXMania.Instance.Device, 0, 0);\r
+                               }\r
 \r
-                               case CStage.Eフェーズ.共通_フェードアウト:\r
-                                       if( this.actFIFO.On進行描画() == 0 )\r
+                               #region [ メニューカーソル ]\r
+                               if (this.txMenuカーソル != null)\r
+                               {\r
+                                       Rectangle rectangle;\r
+                                       this.txMenuカーソル.n透明度 = this.bメニューにフォーカス中 ? 0xff : 0x80;\r
+                                       int x = (int)(0x37 * Scale.X);\r
+                                       int y = (int)((0x61 + (this.n現在のメニュー番号 * 0x19)) * Scale.Y);\r
+                                       int num3 = (int)(170 * Scale.X);\r
+                                       this.txMenuカーソル.t2D描画(CDTXMania.Instance.Device, x, y, new Rectangle(0, 0, (int)(0x10 * Scale.X), (int)(0x20 * Scale.Y)));\r
+                                       this.txMenuカーソル.t2D描画(CDTXMania.Instance.Device, (x + num3) - 0x10 * Scale.X, y, new Rectangle((int)(0x10 * Scale.X), 0, (int)(0x10 * Scale.X), (int)(0x20 * Scale.Y)));\r
+                                       x += (int)(0x10 * Scale.X);\r
+                                       for (num3 -= (int)(0x20 * Scale.X); num3 > 0; num3 -= rectangle.Width)\r
                                        {\r
-                                               break;\r
+                                               rectangle = new Rectangle((int)(8 * Scale.X), 0, (int)(0x10 * Scale.X), (int)(0x20 * Scale.Y));\r
+                                               if (num3 < (int)(0x10 * Scale.X))\r
+                                               {\r
+                                                       rectangle.Width -= (int)(0x10 * Scale.X) - num3;\r
+                                               }\r
+                                               this.txMenuカーソル.t2D描画(CDTXMania.Instance.Device, x, y, rectangle);\r
+                                               x += rectangle.Width;\r
                                        }\r
-                                       return 1;\r
-                       }\r
-                       //---------------------\r
-                       #endregion\r
-\r
-                       // キー入力\r
+                               }\r
+                               #endregion\r
 \r
-                       if( ( base.eフェーズID != CStage.Eフェーズ.共通_通常状態 )\r
-                               || this.actKeyAssign.bキー入力待ちの最中である\r
-                               || CDTXMania.act現在入力を占有中のプラグイン != null )\r
-                               return 0;\r
+                               #region [ メニュー ]\r
+                               int menuY = (int)(100 * Scale.Y) - 20;\r
+                               int stepY = (int)(25 * Scale.Y);\r
+                               for (int i = 0; i < txMenuItemLeft.GetLength(0); i++)\r
+                               {\r
+                                       //Bitmap bmpStr = (this.n現在のメニュー番号 == i) ?\r
+                                       //      prvFont.DrawPrivateFont( strMenuItem[ i ], Color.White, Color.Black, Color.Yellow, Color.OrangeRed ) :\r
+                                       //      prvFont.DrawPrivateFont( strMenuItem[ i ], Color.White, Color.Black );\r
+                                       //txMenuItemLeft = TextureFactory.tテクスチャの生成( bmpStr, false );\r
+                                       int flag = (this.n現在のメニュー番号 == i) ? 1 : 0;\r
+                                       int num4 = txMenuItemLeft[i, flag].sz画像サイズ.Width;\r
+                                       txMenuItemLeft[i, flag].t2D描画(CDTXMania.Instance.Device, 0x8a * Scale.X - (num4 / 2), menuY); //55\r
+                                                                                                                                                                                                                                                                                                                                                                                                                               //txMenuItem.Dispose();\r
+                                       menuY += stepY;\r
+                               }\r
+                               #endregion\r
 \r
-                       if( ( CDTXMania.Input管理.Keyboard.bキーが押された( (int)SlimDX.DirectInput.Key.Escape ) || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.FT ) ) || CDTXMania.Pad.b押されたGB( Eパッド.FT ) )\r
-                       {\r
-                               CDTXMania.Skin.sound取消音.t再生する();\r
-                               if( !this.bメニューにフォーカス中 )\r
+                               #region [ 説明文パネル ]\r
+                               if (this.tx説明文パネル != null)\r
                                {\r
-                                       if( this.eItemPanelモード == EItemPanelモード.キーコード一覧 )\r
-                                       {\r
-                                               CDTXMania.stageコンフィグ.tアサイン完了通知();\r
-                                               return 0;\r
-                                       }\r
-                                       if ( this.actList.bIsKeyAssignSelected == false )               // #24525 2011.3.15 yyagi\r
-                                       {\r
-                                               this.bメニューにフォーカス中 = true;\r
-                                       }\r
-                                       this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
-                                       this.actList.tEsc押下();                                                              // #24525 2011.3.15 yyagi ESC押下時の右メニュー描画用\r
+                                       this.tx説明文パネル.t2D描画(CDTXMania.Instance.Device, 0x1d * Scale.X, 0xf8 * Scale.Y);\r
                                }\r
-                               else\r
+                               #endregion\r
+\r
+                               #region [ アイテム ]\r
+                               switch (this.eItemPanelモード)\r
                                {\r
-                                       this.actFIFO.tフェードアウト開始();\r
-                                       base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
+                                       case EItemPanelモード.パッド一覧:\r
+                                               this.actList.t進行描画(!this.bメニューにフォーカス中);\r
+                                               break;\r
+\r
+                                       case EItemPanelモード.キーコード一覧:\r
+                                               this.actKeyAssign.On進行描画();\r
+                                               break;\r
                                }\r
-                       }\r
-                       else if( ( CDTXMania.Pad.b押されたDGB( Eパッド.CY ) || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.RD ) ) || ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LC ) || ( CDTXMania.ConfigIni.bEnterがキー割り当てのどこにも使用されていない && CDTXMania.Input管理.Keyboard.bキーが押された( (int)SlimDX.DirectInput.Key.Return) ) ) )\r
-                       {\r
-                               if( this.n現在のメニュー番号 == 4 )\r
+                               #endregion\r
+\r
+                               #region [ 上部パネル ]\r
+                               if (this.tx上部パネル != null)\r
                                {\r
-                                       CDTXMania.Skin.sound決定音.t再生する();\r
-                                       this.actFIFO.tフェードアウト開始();\r
-                                       base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
+                                       this.tx上部パネル.t2D描画(CDTXMania.Instance.Device, 0, 0);\r
                                }\r
-                               else if( this.bメニューにフォーカス中 )\r
+                               #endregion\r
+\r
+                               #region [ 下部パネル ]\r
+                               if (this.tx下部パネル != null)\r
                                {\r
-                                       CDTXMania.Skin.sound決定音.t再生する();\r
-                                       this.bメニューにフォーカス中 = false;\r
-                                       this.t説明文パネルに現在選択されている項目の説明を描画する();\r
+                                       this.tx下部パネル.t2D描画(CDTXMania.Instance.Device, 0, SampleFramework.GameWindowSize.Height - this.tx下部パネル.sz画像サイズ.Height);\r
                                }\r
-                               else\r
+                               #endregion\r
+\r
+                               #region [ オプションパネル ]\r
+                               this.actオプションパネル.On進行描画();\r
+                               #endregion\r
+\r
+                               #region [ フェードイン・アウト ]\r
+                               switch (base.eフェーズID)\r
                                {\r
-                                       switch( this.eItemPanelモード )\r
-                                       {\r
-                                               case EItemPanelモード.パッド一覧:\r
-                                                       bool bIsKeyAssignSelectedBeforeHitEnter = this.actList.bIsKeyAssignSelected;    // #24525 2011.3.15 yyagi\r
-                                                       this.actList.tEnter押下();\r
-                                                       if( this.actList.b現在選択されている項目はReturnToMenuである )\r
-                                                       {\r
-                                                               this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
-                                                               if ( bIsKeyAssignSelectedBeforeHitEnter == false )                                                      // #24525 2011.3.15 yyagi\r
-                                                               {\r
-                                                                       this.bメニューにフォーカス中 = true;\r
-                                                               }\r
-                                                       }\r
-                                                       break;\r
+                                       case CStage.Eフェーズ.共通_フェードイン:\r
+                                               if (this.actFIFO.On進行描画() != 0)\r
+                                               {\r
+                                                       CDTXMania.Instance.Skin.bgmコンフィグ画面.t再生する();\r
+                                                       base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
+                                               }\r
+                                               break;\r
 \r
-                                               case EItemPanelモード.キーコード一覧:\r
-                                                       this.actKeyAssign.tEnter押下();\r
+                                       case CStage.Eフェーズ.共通_フェードアウト:\r
+                                               if (this.actFIFO.On進行描画() == 0)\r
+                                               {\r
                                                        break;\r
-                                       }\r
+                                               }\r
+                                               return 1;\r
                                }\r
-                       }\r
-                       this.ctキー反復用.Up.tキー反復( CDTXMania.Input管理.Keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.UpArrow ), new CCounter.DGキー処理( this.tカーソルを上へ移動する ) );\r
-                       this.ctキー反復用.R.tキー反復( CDTXMania.Pad.b押されているGB( Eパッド.HH ), new CCounter.DGキー処理( this.tカーソルを上へ移動する ) );\r
-                       if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.SD ) )\r
-                       {\r
-                               this.tカーソルを上へ移動する();\r
-                       }\r
-                       this.ctキー反復用.Down.tキー反復( CDTXMania.Input管理.Keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.DownArrow ), new CCounter.DGキー処理( this.tカーソルを下へ移動する ) );\r
-                       this.ctキー反復用.B.tキー反復( CDTXMania.Pad.b押されているGB( Eパッド.BD ), new CCounter.DGキー処理( this.tカーソルを下へ移動する ) );\r
-                       if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LT ) )\r
-                       {\r
-                               this.tカーソルを下へ移動する();\r
-                       }\r
-                       return 0;\r
-               }\r
+                               #endregion\r
 \r
+                               // キー入力\r
+                               #region [ キー入力 ]\r
+                               if ((base.eフェーズID != CStage.Eフェーズ.共通_通常状態)\r
+                                               || this.actKeyAssign.bキー入力待ちの最中である\r
+                                               || CDTXMania.Instance.act現在入力を占有中のプラグイン != null)\r
+                               {\r
+                                       return 0;\r
+                               }\r
 \r
-               // その他\r
-\r
-               #region [ private ]\r
-               //-----------------\r
-               private enum EItemPanelモード\r
-               {\r
-                       パッド一覧,\r
-                       キーコード一覧\r
-               }\r
-\r
-               [StructLayout( LayoutKind.Sequential )]\r
-               private struct STキー反復用カウンタ\r
-               {\r
-                       public CCounter Up;\r
-                       public CCounter Down;\r
-                       public CCounter R;\r
-                       public CCounter B;\r
-                       public CCounter this[ int index ]\r
-                       {\r
-                               get\r
+                               // 曲データの一覧取得中は、キー入力を無効化する\r
+                               if (!CDTXMania.Instance.EnumSongs.IsEnumerating || !CDTXMania.Instance.actEnumSongs.bコマンドでの曲データ取得)\r
                                {\r
-                                       switch( index )\r
+                                       if (CDTXMania.Instance.Input管理.Keyboard.bキーが押された((int)SlimDX.DirectInput.Key.Escape) || CDTXMania.Instance.Pad.bCancelPadIsPressedDGB())\r
                                        {\r
-                                               case 0:\r
-                                                       return this.Up;\r
-\r
-                                               case 1:\r
-                                                       return this.Down;\r
-\r
-                                               case 2:\r
-                                                       return this.R;\r
-\r
-                                               case 3:\r
-                                                       return this.B;\r
+                                               CDTXMania.Instance.Skin.sound取消音.t再生する();\r
+                                               if (!this.bメニューにフォーカス中)\r
+                                               {\r
+                                                       if (this.eItemPanelモード == EItemPanelモード.キーコード一覧)\r
+                                                       {\r
+                                                               CDTXMania.Instance.stageコンフィグ.tアサイン完了通知();\r
+                                                               return 0;\r
+                                                       }\r
+                                                       if (this.actList.b楽器またはシステム用メニューである && !this.actList.bIsFocusingParameter)   // #24525 2011.3.15 yyagi, #32059 2013.9.17 yyagi\r
+                                                       {\r
+                                                               this.bメニューにフォーカス中 = true;\r
+                                                       }\r
+                                                       this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
+                                                       this.actList.tEsc押下();                              // #24525 2011.3.15 yyagi ESC押下時の右メニュー描画用\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       this.actFIFO.tフェードアウト開始();\r
+                                                       base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
+                                               }\r
                                        }\r
-                                       throw new IndexOutOfRangeException();\r
-                               }\r
-                               set\r
-                               {\r
-                                       switch( index )\r
+                                       #region [ ← ]\r
+                                       else if (CDTXMania.Instance.Input管理.Keyboard.bキーが押された((int)SlimDX.DirectInput.Key.LeftArrow))   // 左カーソルキー\r
                                        {\r
-                                               case 0:\r
-                                                       this.Up = value;\r
-                                                       return;\r
-\r
-                                               case 1:\r
-                                                       this.Down = value;\r
-                                                       return;\r
-\r
-                                               case 2:\r
-                                                       this.R = value;\r
-                                                       return;\r
-\r
-                                               case 3:\r
-                                                       this.B = value;\r
-                                                       return;\r
+                                               if (!this.bメニューにフォーカス中)\r
+                                               {\r
+                                                       if (this.eItemPanelモード == EItemPanelモード.キーコード一覧)\r
+                                                       {\r
+                                                               // キーコンフィグ画面中は、[←]押下に反応させない\r
+                                                               return 0;\r
+                                                       }\r
+                                                       if (this.actList.bIsFocusingParameter)\r
+                                                       {\r
+                                                               // パラメータを増減している最中も、[←]押下に反応させない\r
+                                                               return 0;\r
+                                                       }\r
+                                                       // #24525 2011.3.15 yyagi, #32059 2013.9.17 yyagi\r
+                                                       if (this.actList.b楽器またはシステム用メニューである && !this.actList.bIsFocusingParameter)\r
+                                                       {\r
+                                                               this.bメニューにフォーカス中 = true;\r
+                                                       }\r
+                                                       CDTXMania.Instance.Skin.sound取消音.t再生する();\r
+                                                       this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
+                                                       // #24525 2011.3.15 yyagi ESC押下時の右メニュー描画用\r
+                                                       this.actList.tEsc押下();\r
+                                               }\r
+                                       }\r
+                                       #endregion\r
+                                       else if (\r
+                                               (CDTXMania.Instance.Pad.bDecidePadIsPressedDGB() ||\r
+                                               (CDTXMania.Instance.ConfigIni.bEnterがキー割り当てのどこにも使用されていない &&\r
+                                               CDTXMania.Instance.Input管理.Keyboard.bキーが押された((int)SlimDX.DirectInput.Key.Return))))\r
+                                       {\r
+                                               #region [ EXIT ]\r
+                                               if (this.n現在のメニュー番号 == 4)\r
+                                               {\r
+                                                       CDTXMania.Instance.Skin.sound決定音.t再生する();\r
+                                                       this.actFIFO.tフェードアウト開始();\r
+                                                       base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
+                                               }\r
+                                               #endregion\r
+                                               else if (this.bメニューにフォーカス中)\r
+                                               {\r
+                                                       CDTXMania.Instance.Skin.sound決定音.t再生する();\r
+                                                       this.bメニューにフォーカス中 = false;\r
+                                                       this.t説明文パネルに現在選択されている項目の説明を描画する();\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       switch (this.eItemPanelモード)\r
+                                                       {\r
+                                                               case EItemPanelモード.パッド一覧:\r
+                                                                       if (this.actList.tEnter押下())\r
+                                                                       {\r
+                                                                               bメニューにフォーカス中 = true;\r
+                                                                       }\r
+                                                                       break;\r
+\r
+                                                               case EItemPanelモード.キーコード一覧:\r
+                                                                       this.actKeyAssign.tEnter押下();\r
+                                                                       break;\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                                       #region [ → ]\r
+                                       else if (CDTXMania.Instance.Input管理.Keyboard.bキーが押された((int)SlimDX.DirectInput.Key.RightArrow))  // 右カーソルキー\r
+                                       {\r
+                                               #region [ EXIT ]\r
+                                               if (this.n現在のメニュー番号 == 4)\r
+                                               {\r
+                                                       // 何もしない\r
+                                               }\r
+                                               #endregion\r
+                                               else if (this.bメニューにフォーカス中)\r
+                                               {\r
+                                                       CDTXMania.Instance.Skin.sound決定音.t再生する();\r
+                                                       this.bメニューにフォーカス中 = false;\r
+                                                       this.t説明文パネルに現在選択されている項目の説明を描画する();\r
+                                               }\r
+                                       }\r
+                                       #endregion\r
+                                       this.ctキー反復用.Up.tキー反復(CDTXMania.Instance.Input管理.Keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.UpArrow), new CCounter.DGキー処理(this.tカーソルを上へ移動する));\r
+                                       this.ctキー反復用.R.tキー反復(CDTXMania.Instance.Pad.b押されている(EPad.GtR) || CDTXMania.Instance.Pad.b押されている(EPad.BsR), new CCounter.DGキー処理(this.tカーソルを上へ移動する));\r
+                                       if (CDTXMania.Instance.Pad.b押された(EPad.SD))\r
+                                       {\r
+                                               this.tカーソルを上へ移動する();\r
+                                       }\r
+                                       this.ctキー反復用.Down.tキー反復(CDTXMania.Instance.Input管理.Keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.DownArrow), new CCounter.DGキー処理(this.tカーソルを下へ移動する));\r
+                                       this.ctキー反復用.B.tキー反復(CDTXMania.Instance.Pad.b押されている(EPad.GtB) || CDTXMania.Instance.Pad.b押されている(EPad.BsB), new CCounter.DGキー処理(this.tカーソルを下へ移動する));\r
+                                       if (CDTXMania.Instance.Pad.b押された(EPad.LT))\r
+                                       {\r
+                                               this.tカーソルを下へ移動する();\r
                                        }\r
-                                       throw new IndexOutOfRangeException();\r
                                }\r
+                               #endregion\r
                        }\r
+                       return 0;\r
                }\r
 \r
-               private CActFIFOWhite actFIFO;\r
-               private CActConfigKeyAssign actKeyAssign;\r
-               private CActConfigList actList;\r
-               private CActオプションパネル actオプションパネル;\r
-               private bool bメニューにフォーカス中;\r
-               private STキー反復用カウンタ ctキー反復用;\r
-               private const int DESC_H = 0x80;\r
-               private const int DESC_W = 220;\r
-               private EItemPanelモード eItemPanelモード;\r
-               private Font ftフォント;\r
-               private int n現在のメニュー番号;\r
-               private CTexture txMenuカーソル;\r
-               private CTexture tx下部パネル;\r
-               private CTexture tx上部パネル;\r
-               private CTexture tx説明文パネル;\r
-               private CTexture tx背景;\r
 \r
                private void tカーソルを下へ移動する()\r
                {\r
-                       if( !this.bメニューにフォーカス中 )\r
+                       if (!this.bメニューにフォーカス中)\r
                        {\r
-                               switch( this.eItemPanelモード )\r
+                               switch (this.eItemPanelモード)\r
                                {\r
                                        case EItemPanelモード.パッド一覧:\r
-                                               this.actList.t次に移動();\r
+                                               this.actList.OnNext();\r
                                                return;\r
 \r
                                        case EItemPanelモード.キーコード一覧:\r
-                                               this.actKeyAssign.t次に移動();\r
+                                               this.actKeyAssign.OnNext();\r
                                                return;\r
                                }\r
                        }\r
                        else\r
                        {\r
-                               CDTXMania.Skin.soundカーソル移動音.t再生する();\r
-                               this.n現在のメニュー番号 = ( this.n現在のメニュー番号 + 1 ) % 5;\r
-                               switch( this.n現在のメニュー番号 )\r
+                               CDTXMania.Instance.Skin.soundカーソル移動音.t再生する();\r
+                               this.n現在のメニュー番号 = (this.n現在のメニュー番号 + 1) % 5;\r
+                               switch (this.n現在のメニュー番号)\r
                                {\r
                                        case 0:\r
-                                               this.actList.t項目リストの設定・System();\r
+                                               this.actList.t項目リストの設定(CActConfigList.Eメニュー種別.System);\r
                                                break;\r
 \r
-                                       //case 1:\r
-                                       //    this.actList.t項目リストの設定・KeyAssignDrums();\r
-                                       //    break;\r
-\r
-                                       //case 2:\r
-                                       //    this.actList.t項目リストの設定・KeyAssignGuitar();\r
-                                       //    break;\r
-\r
-                                       //case 3:\r
-                                       //    this.actList.t項目リストの設定・KeyAssignBass();\r
-                                       //    break;\r
-\r
                                        case 1:\r
-                                               this.actList.t項目リストの設定・Drums();\r
+                                               this.actList.t項目リストの設定(CActConfigList.Eメニュー種別.Drums);\r
                                                break;\r
 \r
                                        case 2:\r
-                                               this.actList.t項目リストの設定・Guitar();\r
+                                               this.actList.t項目リストの設定(CActConfigList.Eメニュー種別.Guitar);\r
                                                break;\r
 \r
                                        case 3:\r
-                                               this.actList.t項目リストの設定・Bass();\r
+                                               this.actList.t項目リストの設定(CActConfigList.Eメニュー種別.Bass);\r
                                                break;\r
 \r
                                        case 4:\r
-                                               this.actList.t項目リストの設定Exit();\r
+                                               this.actList.t項目リストの設定_Exit();\r
                                                break;\r
                                }\r
                                this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
                        }\r
                }\r
+\r
                private void tカーソルを上へ移動する()\r
                {\r
-                       if( !this.bメニューにフォーカス中 )\r
+                       if (!this.bメニューにフォーカス中)\r
                        {\r
-                               switch( this.eItemPanelモード )\r
+                               switch (this.eItemPanelモード)\r
                                {\r
                                        case EItemPanelモード.パッド一覧:\r
-                                               this.actList.t前に移動();\r
+                                               this.actList.OnPrevious();\r
                                                return;\r
 \r
                                        case EItemPanelモード.キーコード一覧:\r
-                                               this.actKeyAssign.t前に移動();\r
+                                               this.actKeyAssign.OnPrevious();\r
                                                return;\r
                                }\r
                        }\r
                        else\r
                        {\r
-                               CDTXMania.Skin.soundカーソル移動音.t再生する();\r
-                               this.n現在のメニュー番号 = ( ( this.n現在のメニュー番号 - 1 ) + 5 ) % 5;\r
-                               switch( this.n現在のメニュー番号 )\r
+                               CDTXMania.Instance.Skin.soundカーソル移動音.t再生する();\r
+                               this.n現在のメニュー番号 = ((this.n現在のメニュー番号 - 1) + 5) % 5;\r
+                               switch (this.n現在のメニュー番号)\r
                                {\r
                                        case 0:\r
-                                               this.actList.t項目リストの設定・System();\r
+                                               this.actList.t項目リストの設定(CActConfigList.Eメニュー種別.System);\r
                                                break;\r
 \r
-                                       //case 1:\r
-                                       //    this.actList.t項目リストの設定・KeyAssignDrums();\r
-                                       //    break;\r
-\r
-                                       //case 2:\r
-                                       //    this.actList.t項目リストの設定・KeyAssignGuitar();\r
-                                       //    break;\r
-\r
-                                       //case 3:\r
-                                       //    this.actList.t項目リストの設定・KeyAssignBass();\r
-                                       //    break;\r
                                        case 1:\r
-                                               this.actList.t項目リストの設定・Drums();\r
+                                               this.actList.t項目リストの設定(CActConfigList.Eメニュー種別.Drums);\r
                                                break;\r
 \r
                                        case 2:\r
-                                               this.actList.t項目リストの設定・Guitar();\r
+                                               this.actList.t項目リストの設定(CActConfigList.Eメニュー種別.Guitar);\r
                                                break;\r
 \r
                                        case 3:\r
-                                               this.actList.t項目リストの設定・Bass();\r
+                                               this.actList.t項目リストの設定(CActConfigList.Eメニュー種別.Bass);\r
                                                break;\r
 \r
                                        case 4:\r
-                                               this.actList.t項目リストの設定Exit();\r
+                                               this.actList.t項目リストの設定_Exit();\r
                                                break;\r
                                }\r
                                this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
                        }\r
                }\r
+\r
                private void t説明文パネルに現在選択されているメニューの説明を描画する()\r
                {\r
-                       try\r
+                       using (Bitmap image = new Bitmap((int)(220 * 2 * Scale.X), (int)(192 * 2 * Scale.Y)))\r
                        {\r
-                               var image = new Bitmap( 220 * 2, 192 * 2 );             // 説明文領域サイズの縦横 2 倍。(描画時に 0.5 倍で表示する。)\r
-                               var graphics = Graphics.FromImage( image );\r
-                               \r
-                               string[,] str = new string[ 2, 2 ];\r
-                               switch( this.n現在のメニュー番号 )\r
+                               // 説明文領域サイズの縦横 2 倍。(描画時に 0.5 倍で表示する。)\r
+                               using (Graphics graphics = Graphics.FromImage(image))\r
                                {\r
-                                       case 0:\r
-                                               str[ 0, 0 ] = "システムに関係する項目を設定しま";\r
-                                               str[ 0, 1 ] = "す。";\r
-                                               str[ 1, 0 ] = "Settings for an overall systems.";\r
-                                               break;\r
-\r
-                                       //case 1:\r
-                                       //    str[0, 0] = "ドラムのキー入力に関する項目を設";\r
-                                       //    str[0, 1] = "定します。";\r
-                                       //    str[1, 0] = "Settings for the drums key/pad inputs.";\r
-                                       //    str[1, 1] = "";\r
-                                       //    break;\r
-\r
-                                       //case 2:\r
-                                       //    str[0, 0] = "ギターのキー入力に関する項目を設";\r
-                                       //    str[0, 1] = "定します。";\r
-                                       //    str[1, 0] = "Settings for the guitar key/pad inputs.";\r
-                                       //    str[1, 1] = "";\r
-                                       //    break;\r
-\r
-                                       //case 3:\r
-                                       //    str[0, 0] = "ベースのキー入力に関する項目を設";\r
-                                       //    str[0, 1] = "定します。";\r
-                                       //    str[1, 0] = "Settings for the bass key/pad inputs.";\r
-                                       //    str[1, 1] = "";\r
-                                       //    break;\r
-                                       case 1:\r
-                                               str[ 0, 0 ] = "ドラムの演奏に関する項目を設定し";\r
-                                               str[ 0, 1 ] = "ます。";\r
-                                               str[ 1, 0 ] = "Settings to play the drums.";\r
-                                               str[ 1, 1 ] = "";\r
-                                               break;\r
-\r
-                                       case 2:\r
-                                               str[ 0, 0 ] = "ギターの演奏に関する項目を設定し";\r
-                                               str[ 0, 1 ] = "ます。";\r
-                                               str[ 1, 0 ] = "Settings to play the guitar.";\r
-                                               str[ 1, 1 ] = "";\r
-                                               break;\r
-\r
-                                       case 3:\r
-                                               str[ 0, 0 ] = "ベースの演奏に関する項目を設定し";\r
-                                               str[ 0, 1 ] = "ます。";\r
-                                               str[ 1, 0 ] = "Settings to play the bass.";\r
-                                               str[ 1, 1 ] = "";\r
-                                               break;\r
-\r
-                                       case 4:\r
-                                               str[ 0, 0 ] = "設定を保存し、コンフィグ画面を終了";\r
-                                               str[ 0, 1 ] = "します。";\r
-                                               str[ 1, 0 ] = "Save the settings and exit from";\r
-                                               str[ 1, 1 ] = "CONFIGURATION menu.";\r
-                                               break;\r
-                               }\r
-                               \r
-                               int c = (CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "ja") ? 0 : 1;\r
-                               for (int i = 0; i < 2; i++)\r
-                               {\r
-                                       graphics.DrawString(str[c, i], this.ftフォント, Brushes.White, new PointF(4f, (i * 30)));\r
+                                       graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;\r
+\r
+                                       string[] desc = {\r
+                                               "strCfgSysMenuDesc",\r
+                                               "strCfgDrMenuDesc",\r
+                                               "strCfgGtMenuDesc",\r
+                                               "strCfgBsMenuDesc",\r
+                                               "strCfgExitMenuDesc"\r
+                                       };\r
+                                       string str = CDTXMania.Instance.Resources.Explanation( desc[ this.n現在のメニュー番号 ] );\r
+\r
+                                       //int c = (CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "ja") ? 0 : 1;\r
+                                       graphics.DrawString(str, this.ftフォント, Brushes.White, new PointF(4f * Scale.X, 0));\r
                                }\r
-                               graphics.Dispose();\r
-                               if( this.tx説明文パネル != null )\r
+                               if (this.tx説明文パネル != null)\r
                                {\r
                                        this.tx説明文パネル.Dispose();\r
                                }\r
-                               this.tx説明文パネル = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );\r
-                               this.tx説明文パネル.vc拡大縮小倍率.X = 0.5f;\r
-                               this.tx説明文パネル.vc拡大縮小倍率.Y = 0.5f;\r
-                               image.Dispose();\r
-                       }\r
-                       catch( CTextureCreateFailedException )\r
-                       {\r
-                               Trace.TraceError( "説明文テクスチャの作成に失敗しました。" );\r
-                               this.tx説明文パネル = null;\r
+                               this.tx説明文パネル = new CTexture(CDTXMania.Instance.Device, image, CDTXMania.Instance.TextureFormat);\r
+                               // this.tx説明文パネル.vc拡大縮小倍率.X = 0.5f;\r
+                               // this.tx説明文パネル.vc拡大縮小倍率.Y = 0.5f;\r
                        }\r
                }\r
+\r
                private void t説明文パネルに現在選択されている項目の説明を描画する()\r
                {\r
-                       try\r
+                       using (Bitmap image = new Bitmap((int)(220 * Scale.X), (int)(192 * Scale.Y)))\r
                        {\r
-                               var image = new Bitmap( 220 * 2, 192 * 2 );             // 説明文領域サイズの縦横 2 倍。(描画時に 0.5 倍で表示する。)\r
-                               var graphics = Graphics.FromImage( image );\r
-\r
-                               CItemBase item = this.actList.ib現在の選択項目;\r
-                               if( ( item.str説明文 != null ) && ( item.str説明文.Length > 0 ) )\r
+                               // 説明文領域サイズの縦横 2 倍。(描画時に 0.5 倍で表示する・・・のは中止。処理速度向上のため。)\r
+                               using (Graphics graphics = Graphics.FromImage(image))\r
                                {\r
-                                       int num = 0;\r
-                                       foreach( string str in item.str説明文.Split( new char[] { '\n' } ) )\r
+                                       graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;\r
+                                       COptionBase item = this.actList.ib現在の選択項目;\r
+                                       if (!string.IsNullOrEmpty(item.explanation))\r
                                        {\r
-                                               graphics.DrawString( str, this.ftフォント, Brushes.White, new PointF( 4f, (float) num ) );\r
-                                               num += 30;\r
+                                               graphics.DrawString(item.explanation, this.ftフォント, Brushes.White, new RectangleF(4f * Scale.X, (float)0 * Scale.Y, 630, 430));\r
                                        }\r
                                }\r
-                               graphics.Dispose();\r
-                               if( this.tx説明文パネル != null )\r
+                               if (this.tx説明文パネル != null)\r
                                {\r
                                        this.tx説明文パネル.Dispose();\r
                                }\r
-                               this.tx説明文パネル = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );\r
-                               this.tx説明文パネル.vc拡大縮小倍率.X = 0.5f;\r
-                               this.tx説明文パネル.vc拡大縮小倍率.Y = 0.5f;\r
-                               image.Dispose();\r
-                       }\r
-                       catch( CTextureCreateFailedException )\r
-                       {\r
-                               Trace.TraceError( "説明文パネルテクスチャの作成に失敗しました。" );\r
-                               this.tx説明文パネル = null;\r
+                               this.tx説明文パネル = new CTexture(CDTXMania.Instance.Device, image, CDTXMania.Instance.TextureFormat);\r
+                               //this.tx説明文パネル.vc拡大縮小倍率.X = 0.5f;\r
+                               //this.tx説明文パネル.vc拡大縮小倍率.Y = 0.5f;\r
                        }\r
                }\r
-               //-----------------\r
-               #endregion\r
        }\r
 }\r