OSDN Git Service

環境によっては、DTXManiaのウインドウ上にマウスカーソルを静止させていてもマウスが消えない問題を修正。マウスの移動が無くても、1秒ごとにMouseMoveのイベント...
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / 全体 / CDTXMania.cs
index eee7448..8bd4786 100644 (file)
@@ -565,8 +565,8 @@ namespace DTXMania
                        }\r
                        #endregion\r
 \r
-                       #region [ ã\83\9eã\82¦ã\82¹æ¶\88å\8e»ç\94¨ã\81®ã\82¿ã\82¤ã\83\9eã\83¼を初期化 ]\r
-                       ccMouseShow = new CCounter();\r
+                       #region [ ã\83\9eã\82¦ã\82¹æ¶\88å\8e»ç\94¨ã\81®ã\82¯ã\83©ã\82¹を初期化 ]\r
+                       cMouseHideControl = new CMouseHideControl();\r
                        #endregion\r
 \r
                        #region [ FPS カウンタの初期化 ]\r
@@ -840,18 +840,16 @@ namespace DTXMania
                                        Instance.Window.FormBorderStyle = FormBorderStyle.None;\r
                                        Instance.Window.WindowState = FormWindowState.Maximized;\r
                                }\r
-                               if (ConfigIni.bウィンドウモード)\r
+                               if (cMouseHideControl != null)\r
                                {\r
-                                       if (!this.bマウスカーソル表示中)\r
+                                       if (ConfigIni.bウィンドウモード)\r
                                        {\r
-                                               Cursor.Show();\r
-                                               this.bマウスカーソル表示中 = true;\r
+                                               cMouseHideControl.Show();\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               cMouseHideControl.Hide();\r
                                        }\r
-                               }\r
-                               else if (this.bマウスカーソル表示中)\r
-                               {\r
-                                       Cursor.Hide();\r
-                                       this.bマウスカーソル表示中 = false;\r
                                }\r
 #endif\r
                        }\r
@@ -932,18 +930,16 @@ namespace DTXMania
 #endif\r
                protected override void LoadContent()\r
                {\r
-                       if (ConfigIni.bウィンドウモード)\r
+                       if (cMouseHideControl != null)\r
                        {\r
-                               if (!this.bマウスカーソル表示中)\r
+                               if (ConfigIni.bウィンドウモード)\r
                                {\r
-                                       Cursor.Show();\r
-                                       this.bマウスカーソル表示中 = true;\r
+                                       cMouseHideControl.Show();\r
+                               }\r
+                               else\r
+                               {\r
+                                       cMouseHideControl.Hide();\r
                                }\r
-                       }\r
-                       else if (this.bマウスカーソル表示中)\r
-                       {\r
-                               Cursor.Hide();\r
-                               this.bマウスカーソル表示中 = false;\r
                        }\r
                        this.Device.SetTransform(TransformState.View, Matrix.LookAtLH(new Vector3(0f, 0f, (float)(-SampleFramework.GameWindowSize.Height / 2 * Math.Sqrt(3.0))), new Vector3(0f, 0f, 0f), new Vector3(0f, 1f, 0f)));\r
                        this.Device.SetTransform(TransformState.Projection, Matrix.PerspectiveFovLH(C変換.DegreeToRadian((float)60f), ((float)this.Device.Viewport.Width) / ((float)this.Device.Viewport.Height), -100f, 100f));\r
@@ -1921,12 +1917,7 @@ namespace DTXMania
                        }\r
 \r
                        #region [ マウスカーソル消去制御 ]\r
-                       ccMouseShow.t進行();\r
-                       if (bマウスカーソル表示中 && ccMouseShow.b終了値に達した)\r
-                       {\r
-                               Cursor.Hide();\r
-                               bマウスカーソル表示中 = false;\r
-                       }\r
+                       cMouseHideControl.tHideCursorIfNeed();\r
                        #endregion\r
                        #region [ 全画面・ウインドウ切り替え ]\r
                        if (this.b次のタイミングで全画面_ウィンドウ切り替えを行う)\r
@@ -2190,7 +2181,6 @@ namespace DTXMania
 \r
                #region [ private ]\r
                //-----------------\r
-               private bool bマウスカーソル表示中 = true;\r
                private bool b終了処理完了済み;\r
                private static CDTX dtx;\r
                private List<CActivity> listトップレベルActivities;\r
@@ -2211,7 +2201,7 @@ namespace DTXMania
                        }\r
                }\r
                private CSound previewSound;\r
-               private CCounter ccMouseShow;\r
+               private CMouseHideControl cMouseHideControl = null;\r
 \r
                private void t終了処理()\r
                {\r
@@ -2737,6 +2727,7 @@ namespace DTXMania
                private void Window_ApplicationDeactivated(object sender, EventArgs e)\r
                {\r
                        this.bApplicationActive = false;\r
+                       cMouseHideControl.Show();\r
                }\r
                private void Window_KeyDown(object sender, KeyEventArgs e)\r
                {\r
@@ -2788,12 +2779,7 @@ namespace DTXMania
                }\r
                private void Window_MouseMove(object sender, MouseEventArgs e)\r
                {\r
-                       if (ConfigIni.bウィンドウモード == true && this.bマウスカーソル表示中 == false)   // #36168 2016.3.19 yyagi: do not to show mouse cursor in full screen mode\r
-                       {\r
-                               Cursor.Show();\r
-                               this.bマウスカーソル表示中 = true;\r
-                       }\r
-                       ccMouseShow.t開始(0, 1, 2000, Timer);\r
+                       cMouseHideControl.tResetCursorState(ConfigIni.bウィンドウモード, this.bApplicationActive);\r
                }\r
 \r
                private void Window_ResizeEnd(object sender, EventArgs e)               // #23510 2010.11.20 yyagi: to get resized window size\r
@@ -2813,5 +2799,67 @@ namespace DTXMania
                //List<int> swlist1, swlist2, swlist3, swlist4, swlist5;\r
 \r
                #endregion\r
+\r
+               private class CMouseHideControl\r
+               {\r
+                       private Point lastPosition;\r
+                       private CCounter ccMouseShow;\r
+                       private bool bマウスカーソル表示中;\r
+\r
+                       /// <summary>\r
+                       /// コンストラクタ\r
+                       /// </summary>\r
+                       public CMouseHideControl()\r
+                       {\r
+                               ccMouseShow = new CCounter();\r
+                               lastPosition = Cursor.Position;\r
+                               bマウスカーソル表示中 = true;\r
+                               t開始();\r
+                       }\r
+\r
+                       public void t開始()\r
+                       {\r
+                               ccMouseShow.t開始(0, 20, 100, CDTXMania.instance.Timer);\r
+                       }\r
+\r
+                       public void tHideCursorIfNeed()\r
+                       {\r
+                               ccMouseShow.t進行();\r
+//Trace.TraceInformation("n現在の経過時間ms" + ccMouseShow.n現在の経過時間ms + ", n現在の値=" + ccMouseShow.n現在の値 + ", b終了値に達した=" + ccMouseShow.b終了値に達した);\r
+                               if (bマウスカーソル表示中 && ccMouseShow.b終了値に達した)\r
+                               {\r
+                                       Hide();\r
+                               }\r
+\r
+                       }\r
+\r
+                       public void tResetCursorState(bool bWindowed, bool bApplicationActive)\r
+                       {\r
+//Trace.TraceInformation("マウス移動: " + Cursor.Position.X + "," + Cursor.Position.Y);\r
+                               if ((bWindowed == true && bマウスカーソル表示中 == false) || bApplicationActive == false)   // #36168 2016.3.19 yyagi: do not to show mouse cursor in full screen mode\r
+                               {\r
+                                       Point currentPosition = Cursor.Position;\r
+//Trace.TraceInformation("current=" + currentPosition.ToString() + ", last=" + lastPosition.ToString());\r
+                                       if (lastPosition != currentPosition)\r
+                                       {\r
+//Trace.TraceInformation("移動発生");\r
+                                               lastPosition = currentPosition;\r
+                                               Show();\r
+                                               t開始();\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       public void Show()\r
+                       {\r
+                               Cursor.Show();\r
+                               bマウスカーソル表示中 = true;\r
+                       }\r
+                       public void Hide()\r
+                       {\r
+                               Cursor.Hide();\r
+                               bマウスカーソル表示中 = false;\r
+                       }\r
+               }\r
        }\r
 }\r