OSDN Git Service

#23708 Alt+Enter時、SlimDX内ではEnterを押していなかったことにすることで、フルスクリーンとウインドウの切り替え時に決定動作が入ってくることを回避した。
authoryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Sun, 16 Jan 2011 10:58:55 +0000 (10:58 +0000)
committeryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Sun, 16 Jan 2011 10:58:55 +0000 (10:58 +0000)
git-svn-id: http://svn.osdn.jp/svnroot/dtxmania/trunk@84 16f42ceb-6dc6-49c8-ba94-f2d53467949d

FDK17プロジェクト/コード/02.入力/CInputKeyboard.cs

index f064203..61beeac 100644 (file)
@@ -68,6 +68,7 @@ namespace FDK
                        if( ( ( bWindowがアクティブ中 && ( this.devKeyboard != null ) ) && !this.devKeyboard.Acquire().IsFailure ) && !this.devKeyboard.Poll().IsFailure )\r
                        {\r
                                this.list入力イベント = new List<STInputEvent>( 32 );\r
+                               int posEnter = -1;\r
 \r
                                if( bバッファ入力を使用する )\r
                                {\r
@@ -78,33 +79,35 @@ namespace FDK
                                        {\r
                                                foreach( KeyboardState data in bufferedData )\r
                                                {\r
-                                                       foreach( Key key3 in data.PressedKeys )\r
+                                                       foreach( Key key in data.PressedKeys )\r
                                                        {\r
-                                                               STInputEvent event4 = new STInputEvent();\r
-                                                               STInputEvent item = event4;\r
-                                                               item.nKey = (int) key3;\r
+                                                               STInputEvent item = new STInputEvent();\r
+                                                               item.nKey = (int) key;\r
                                                                item.b押された = true;\r
                                                                item.b離された = false;\r
                                                                item.nTimeStamp = data.TimeStamp;\r
                                                                item.nVelocity = CInput管理.n通常音量;\r
                                                                this.list入力イベント.Add( item );\r
 \r
-                                                               this.bKeyState[ (int) key3 ] = true;\r
-                                                               this.bKeyPushDown[ (int) key3 ] = true;\r
+                                                               this.bKeyState[ (int) key ] = true;\r
+                                                               this.bKeyPushDown[ (int) key ] = true;\r
+                                                               if ( (int)key == (int)SlimDX.DirectInput.Key.Return )\r
+                                                               {\r
+                                                                       posEnter = this.list入力イベント.Count - 1;       //  #23708 2011.1.16 yyagiEnterのlist位置を記憶\r
+                                                               }\r
                                                        }\r
-                                                       foreach( Key key4 in data.ReleasedKeys )\r
+                                                       foreach( Key key in data.ReleasedKeys )\r
                                                        {\r
-                                                               STInputEvent event5 = new STInputEvent();\r
-                                                               STInputEvent event3 = event5;\r
-                                                               event3.nKey = (int) key4;\r
+                                                               STInputEvent event3 = new STInputEvent();\r
+                                                               event3.nKey = (int) key;\r
                                                                event3.b押された = false;\r
                                                                event3.b離された = true;\r
                                                                event3.nTimeStamp = data.TimeStamp;\r
                                                                event3.nVelocity = CInput管理.n通常音量;\r
                                                                this.list入力イベント.Add( event3 );\r
 \r
-                                                               this.bKeyState[ (int) key4 ] = false;\r
-                                                               this.bKeyPullUp[ (int) key4 ] = true;\r
+                                                               this.bKeyState[ (int) key ] = false;\r
+                                                               this.bKeyPullUp[ (int) key ] = true;\r
                                                        }\r
                                                }\r
                                        }\r
@@ -133,14 +136,19 @@ namespace FDK
 \r
                                                                this.bKeyState[ (int) key ] = true;\r
                                                                this.bKeyPushDown[ (int) key ] = true;\r
+\r
+                                                               if ( (int)key == (int)SlimDX.DirectInput.Key.Return )\r
+                                                               {\r
+                                                                       posEnter = this.list入力イベント.Count - 1;       //  #23708 2011.1.16 yyagi Enterのlist位置を記憶\r
+                                                               }\r
                                                        }\r
                                                }\r
-                                               foreach( Key key2 in currentState.ReleasedKeys )\r
+                                               foreach( Key key in currentState.ReleasedKeys )\r
                                                {\r
-                                                       if( this.bKeyState[ (int) key2 ] == true )\r
+                                                       if( this.bKeyState[ (int) key ] == true )\r
                                                        {\r
                                                                var ev = new STInputEvent() {\r
-                                                                       nKey = (int) key2,\r
+                                                                       nKey = (int) key,\r
                                                                        b押された = false,\r
                                                                        b離された = true,\r
                                                                        nTimeStamp = this.timer.nシステム時刻,\r
@@ -148,14 +156,38 @@ namespace FDK
                                                                };\r
                                                                this.list入力イベント.Add( ev );\r
 \r
-                                                               this.bKeyState[ (int) key2 ] = false;\r
-                                                               this.bKeyPullUp[ (int) key2 ] = true;\r
+                                                               this.bKeyState[ (int) key ] = false;\r
+                                                               this.bKeyPullUp[ (int) key ] = true;\r
                                                        }\r
                                                }\r
                                        }\r
                                        //-----------------------------\r
                                        #endregion\r
                                }\r
+                               #region [#23708 2011.1.16 yyagi Alt+Enter発生時、Enter押下情報を削除する]\r
+                               if ( this.bKeyPushDown[ (int) SlimDX.DirectInput.Key.Return ] == true )\r
+                               {\r
+                                       if ( this.bKeyPullUp[ (int) SlimDX.DirectInput.Key.Return ] == true )\r
+                                       {\r
+                                               // #23708 2011.1.16 yyagi\r
+                                               // フルスクリーンとウインドウを切り替える際、バッファ内でEnterのPushDownとPullUpが両方ともtrueとなることがある。\r
+                                               // その際はどちらもfalseにして、Enter入力を無かったことにし、フルスクリーンとウインドウ切り替え時の\r
+                                               // 余分なEnter動作を回避する。(対処療法的なやり方だが・・・)\r
+                                               this.bKeyPushDown[ (int) SlimDX.DirectInput.Key.Return ] =\r
+                                               this.bKeyPullUp[ (int) SlimDX.DirectInput.Key.Return ] = false;\r
+                                       }\r
+                                       if ( this.bKeyState[ (int) SlimDX.DirectInput.Key.LeftAlt ] == true || this.bKeyState[ (int) SlimDX.DirectInput.Key.RightAlt ] == true )\r
+                                       {\r
+                                               // #23708 2011.1.16 yyagi\r
+                                               // alt-enter押下時は、DTXMania内部としては Enter押下を無かったことにする。\r
+                                               // (しかしFormの処理としてはEnter押下が残るので、フルスクリーンとウインドウの切り替えのみ実行され、\r
+                                               //  選曲画面等での実行動作は無くなる。)\r
+                                               this.bKeyState[ (int) SlimDX.DirectInput.Key.Return ] = false;\r
+                                               this.bKeyPushDown[ (int) SlimDX.DirectInput.Key.Return ] = false;\r
+                                               this.list入力イベント.RemoveAt( posEnter );\r
+                                       }\r
+                               }\r
+                               #endregion\r
                        }\r
                }\r
                public bool bキーが押された( int nKey )\r