OSDN Git Service

#27648 コメントの上にスクロールバーが来るようにした。(位置計算は前回同様CActSelect曲リストで受け持ち、バーの表示はCActSelectShowCurre...
authoryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Wed, 28 Mar 2012 17:51:07 +0000 (17:51 +0000)
committeryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Wed, 28 Mar 2012 17:51:07 +0000 (17:51 +0000)
git-svn-id: http://svn.osdn.jp/svnroot/dtxmania/trunk@340 16f42ceb-6dc6-49c8-ba94-f2d53467949d

DTXManiaプロジェクト/DTXManiaプロジェクト.csproj
DTXManiaプロジェクト/コード/ステージ/05.選曲/CActSelectShowCurrentPosition.cs [new file with mode: 0644]
DTXManiaプロジェクト/コード/ステージ/05.選曲/CActSelect曲リスト.cs
DTXManiaプロジェクト/コード/ステージ/05.選曲/CStage選曲.cs
実行時フォルダ/DTXManiaGR.exe

index c8871e2..29d9ed3 100644 (file)
@@ -81,6 +81,7 @@
       <DesignTime>True</DesignTime>\r
     </Compile>\r
     <None Include="app.config" />\r
+    <None Include="ClassDiagram1.cd" />\r
     <None Include="DTXManiaGR.exe.x86.manifest" />\r
     <None Include="Properties\Settings.settings">\r
       <Generator>SettingsSingleFileGenerator</Generator>\r
     <Compile Include="コード\ステージ\05.選曲\CActSelectInformation.cs" />\r
     <Compile Include="コード\ステージ\05.選曲\CActSelectPreimageパネル.cs" />\r
     <Compile Include="コード\ステージ\05.選曲\CActSelectPresound.cs" />\r
+    <Compile Include="コード\ステージ\05.選曲\CActSelectShowCurrentPosition.cs" />\r
     <Compile Include="コード\ステージ\05.選曲\CActSelectステータスパネル.cs" />\r
     <Compile Include="コード\ステージ\05.選曲\CActSelect曲リスト.cs" />\r
     <Compile Include="コード\ステージ\05.選曲\CActSelect演奏履歴パネル.cs" />\r
diff --git a/DTXManiaプロジェクト/コード/ステージ/05.選曲/CActSelectShowCurrentPosition.cs b/DTXManiaプロジェクト/コード/ステージ/05.選曲/CActSelectShowCurrentPosition.cs
new file mode 100644 (file)
index 0000000..7a7ba0b
--- /dev/null
@@ -0,0 +1,84 @@
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+using System.Diagnostics;\r
+using SlimDX;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+       internal class CActSelectShowCurrentPosition : CActivity\r
+       {\r
+               // メソッド\r
+\r
+               public CActSelectShowCurrentPosition()\r
+               {\r
+                       base.b活性化してない = true;\r
+               }\r
+\r
+               // CActivity 実装\r
+\r
+               public override void On活性化()\r
+               {\r
+                       if ( this.b活性化してる )\r
+                               return;\r
+\r
+                       base.On活性化();\r
+               }\r
+               public override void On非活性化()\r
+               {\r
+                       base.On非活性化();\r
+               }\r
+               public override void OnManagedリソースの作成()\r
+               {\r
+                       if ( !base.b活性化してない )\r
+                       {\r
+                               this.txScrollBar = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect scrollbar.png" ), false );\r
+                               this.txScrollPosition = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect scrollbar.png" ), false );\r
+                               base.OnManagedリソースの作成();\r
+                       }\r
+               }\r
+               public override void OnManagedリソースの解放()\r
+               {\r
+                       if ( !base.b活性化してない )\r
+                       {\r
+                               CDTXMania.t安全にDisposeする( ref this.txScrollBar );\r
+                               CDTXMania.t安全にDisposeする( ref this.txScrollPosition );\r
+\r
+                               base.OnManagedリソースの解放();\r
+                       }\r
+               }\r
+               public override int On進行描画()\r
+               {\r
+                       #region [ スクロールバーの描画 #27648 ]\r
+                       for ( int sy = 0; sy < 336; sy += 128 )\r
+                       {\r
+                               int ry = ( sy / 128 );\r
+                               int h = ( ( ry + 1 ) * 128 > 336 ) ? 336 - ry * 128 : 128;\r
+                               this.txScrollBar.t2D描画( CDTXMania.app.Device, 640 - 12, 58 + sy, new Rectangle( ry * 12, 0, 12, h ) );      // 本当のy座標は88なんだが、なぜか約30のバイアスが掛かる・・・\r
+                       }\r
+                       #endregion\r
+                       #region [ スクロール地点の描画 (計算はCActSelect曲リストで行う。スクロール位置と選曲項目の同期のため。)#27648 ]\r
+\r
+                       int py = CDTXMania.stage選曲.nスクロールバー相対y座標;\r
+                       if ( py <= 336 - 6 - 8 )\r
+                       {\r
+                               this.txScrollPosition.t2D描画( CDTXMania.app.Device, 640 - 12 + 3, 58 + py, new Rectangle( 30, 120, 6, 8 ) );\r
+                       }\r
+                       #endregion\r
+\r
+                       return 0;\r
+               }\r
+\r
+\r
+               // その他\r
+\r
+               #region [ private ]\r
+               //-----------------\r
+               private CTexture txScrollPosition;\r
+               private CTexture txScrollBar;\r
+               //-----------------\r
+               #endregion\r
+       }\r
+}\r
index bf9e709..7b2227f 100644 (file)
@@ -60,7 +60,17 @@ namespace DTXMania
                        private set;\r
                }\r
 \r
+               public int nスクロールバー相対y座標\r
+               {\r
+                       get;\r
+                       private set;\r
+               }\r
+\r
+               // t選択曲が変更された()内で使う、直前の選曲の保持\r
+               // (前と同じ曲なら選択曲変更に掛かる再計算を省略して高速化するため)\r
+               private C曲リストノード song_last = null;\r
 \r
+               \r
                // コンストラクタ\r
 \r
                public CActSelect曲リスト()\r
@@ -325,8 +335,9 @@ namespace DTXMania
                public void t選択曲が変更された()      // #27648\r
                {\r
                        C曲リストノード song = CDTXMania.stage選曲.r現在選択中の曲;\r
-                       if ( song == null )\r
+                       if ( song == null || song == song_last )\r
                                return;\r
+                       song_last = song;\r
                        List<C曲リストノード> list = ( song.r親ノード != null ) ? song.r親ノード.list子リスト : CDTXMania.Songs管理.list曲ルート;\r
                        int index = list.IndexOf( song ) + 1;\r
                        if ( index <= 0 )\r
@@ -453,21 +464,17 @@ namespace DTXMania
                                this.txEnumeratingSongs = null;\r
                        }\r
                        #endregion\r
-                       #region [ スクロールバー #27648 ]\r
+                       #region [ 曲数表示 ]\r
                        this.txアイテム数数字 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect skill number on gauge etc.png" ), false );\r
-                       this.txScrollBar = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect scrollbar.png" ), false );\r
-                       this.txScrollPosition = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect scrollbar.png" ), false );\r
                        #endregion\r
-\r
                        base.OnManagedリソースの作成();\r
                }\r
                public override void OnManagedリソースの解放()\r
                {\r
                        if( this.b活性化してない )\r
                                return;\r
+\r
                        CDTXMania.t安全にDisposeする( ref this.txアイテム数数字 );\r
-                       CDTXMania.t安全にDisposeする( ref this.txScrollBar );\r
-                       CDTXMania.t安全にDisposeする( ref this.txScrollPosition );\r
 \r
                        for( int i = 0; i < 13; i++ )\r
                                CDTXMania.t安全にDisposeする( ref this.stバー情報[ i ].txタイトル名 );\r
@@ -704,7 +711,7 @@ namespace DTXMania
                                                this.n目標のスクロールカウンタ += 100;\r
 \r
                                                this.t選択曲が変更された();                                            // スクロールバー用に今何番目を選択しているかを更新\r
-\r
+                                               \r
                                                if( this.n目標のスクロールカウンタ == 0 )\r
                                                        CDTXMania.stage選曲.t選択曲変更通知();         // スクロール完了=選択曲変更!\r
                                                //-----------------\r
@@ -873,15 +880,7 @@ namespace DTXMania
                                //-----------------\r
                                #endregion\r
                        }\r
-                       #region [ スクロールバーの描画 #27648 ]\r
-                       for ( int sy = 0; sy < 336; sy += 128 )\r
-                       {\r
-                               int ry = (sy / 128);\r
-                               int h = ( ( ry + 1 ) * 128 > 336 ) ? 336 - ry * 128 : 128;\r
-                               this.txScrollBar.t2D描画( CDTXMania.app.Device, 640 - 12, 58 + sy, new Rectangle( ry * 12 , 0, 12, h ) );     // 本当のy座標は88なんだが、なぜか約30のバイアスが掛かる・・・\r
-                       }\r
-                       #endregion\r
-                       #region [ スクロール地点の描画 #27648 ]\r
+                       #region [ スクロール地点の計算(描画はCActSelectShowCurrentPositionにて行う) #27648 ]\r
                        int py;\r
                        double d = 0;\r
                        if ( nNumOfItems > 1 )\r
@@ -897,13 +896,13 @@ namespace DTXMania
                        int delta = (int) ( d * this.n現在のスクロールカウンタ / 100 );\r
                        if ( py + delta <= 336 - 6 - 8 )\r
                        {\r
-                               this.txScrollPosition.t2D描画( CDTXMania.app.Device, 640 - 12 + 3, 58 + 3 + py + delta, new Rectangle( 30, 120, 6, 8 ) );\r
+                               this.nスクロールバー相対y座標 = py + delta;\r
                        }\r
                        #endregion\r
+\r
                        #region [ アイテム数の描画 #27648 ]\r
                        tアイテム数の描画();\r
                        #endregion\r
-\r
                        return 0;\r
                }\r
                \r
@@ -1022,14 +1021,12 @@ namespace DTXMania
                private STバー情報[] stバー情報 = new STバー情報[ 13 ];\r
                private CTexture txSongNotFound, txEnumeratingSongs;\r
                private CTexture txスキル数字;\r
+               private CTexture txアイテム数数字;\r
                private STバー tx曲名バー;\r
                private ST選曲バー tx選曲バー;\r
 \r
                private int nCurrentPosition = 0;\r
                private int nNumOfItems = 0;\r
-               private CTexture txScrollPosition;\r
-               private CTexture txScrollBar;\r
-               private CTexture txアイテム数数字;\r
 \r
                private Eバー種別 e曲のバー種別を返す( C曲リストノード song )\r
                {\r
@@ -1254,7 +1251,7 @@ namespace DTXMania
                private void tアイテム数の描画()\r
                {\r
                        string s = nCurrentPosition.ToString() + "/" + nNumOfItems.ToString();\r
-                       int x = 639 - 8;\r
+                       int x = 639 - 8 - 12;\r
                        int y = 362;\r
 \r
                        for ( int p = s.Length - 1; p >= 0; p-- )\r
index 1268428..fc97c33 100644 (file)
@@ -12,7 +12,20 @@ namespace DTXMania
        internal class CStage選曲 : CStage\r
        {\r
                // プロパティ\r
-\r
+               public int nスクロールバー相対y座標\r
+               {\r
+                       get\r
+                       {\r
+                               if ( act曲リスト != null )\r
+                               {\r
+                                       return act曲リスト.nスクロールバー相対y座標;\r
+                               }\r
+                               else\r
+                               {\r
+                                       return 0;\r
+                               }\r
+                       }\r
+               }\r
                public bool bIsEnumeratingSongs\r
                {\r
                        get\r
@@ -93,6 +106,7 @@ namespace DTXMania
                        base.list子Activities.Add( this.actArtistComment = new CActSelectArtistComment() );\r
                        base.list子Activities.Add( this.actInformation = new CActSelectInformation() );\r
                        base.list子Activities.Add( this.actSortSongs = new CActSortSongs() );\r
+                       base.list子Activities.Add( this.actShowCurrentPosition = new CActSelectShowCurrentPosition() );\r
 \r
                        this.CommandHistory = new CCommandHistory();            // #24063 2011.1.16 yyagi\r
 //                     this.actSortSongs.bIsActiveSortMenu = false;            // #23615 2011.3.28 yyagi\r
@@ -108,7 +122,6 @@ namespace DTXMania
                        this.act演奏履歴パネル.t選択曲が変更された();\r
                        this.actステータスパネル.t選択曲が変更された();\r
                        this.actArtistComment.t選択曲が変更された();\r
-                       this.act曲リスト.t選択曲が変更された();\r
 \r
                        #region [ プラグインにも通知する(BOX, RANDOM, BACK なら通知しない)]\r
                        //---------------------\r
@@ -143,7 +156,6 @@ namespace DTXMania
                        #endregion\r
                }\r
 \r
-\r
                // CStage 実装\r
 \r
                /// <summary>\r
@@ -293,6 +305,7 @@ namespace DTXMania
                                        Rectangle rect = new Rectangle(31, 49, 20, 11);\r
                                        this.txFLIP.t2D描画( CDTXMania.app.Device, 40, 436, rect );\r
                                }\r
+                               this.actShowCurrentPosition.On進行描画();                                                           // #27648 2011.3.28 yyagi\r
 \r
                                switch ( base.eフェーズID )\r
                                {\r
@@ -619,6 +632,7 @@ namespace DTXMania
                private CActSelectステータスパネル actステータスパネル;\r
                private CActSelect演奏履歴パネル act演奏履歴パネル;\r
                private CActSelect曲リスト act曲リスト;\r
+               private CActSelectShowCurrentPosition actShowCurrentPosition;\r
 \r
                private CActSortSongs actSortSongs;\r
 \r
index 005f75b..1d40ea0 100644 (file)
Binary files a/実行時フォルダ/DTXManiaGR.exe and b/実行時フォルダ/DTXManiaGR.exe differ