Browse Source

Added PlatformTimer for mouse callbacks

Added PlatformTimer to GameTSCtrl to limit mouse move/drag callbacks.
Olathuss 6 months ago
parent
commit
32bc068f7f
2 changed files with 24 additions and 4 deletions
  1. 21 4
      Engine/source/T3D/gameTSCtrl.cpp
  2. 3 0
      Engine/source/T3D/gameTSCtrl.h

+ 21 - 4
Engine/source/T3D/gameTSCtrl.cpp

@@ -215,6 +215,7 @@ IMPLEMENT_CALLBACK(GameTSCtrl, onMouseMove, void, (const char* screenPosition, c
 
 
 GameTSCtrl::GameTSCtrl()
 GameTSCtrl::GameTSCtrl()
 {
 {
+   mFrameTime = PlatformTimer::create();
 }
 }
 
 
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
@@ -358,21 +359,33 @@ void GameTSCtrl::onMouseDragged(const GuiEvent &evt)
 {
 {
    Parent::onMouseDragged(evt);
    Parent::onMouseDragged(evt);
 
 
-   sendMouseEvent("onMouseDragged", evt);
+   if (mFrameTime && mFrameTime->getElapsedMs() > 16)
+   {
+      sendMouseEvent("onMouseDragged", evt);
+      mFrameTime->reset();
+   }
 }
 }
 
 
 void GameTSCtrl::onRightMouseDragged(const GuiEvent &evt)
 void GameTSCtrl::onRightMouseDragged(const GuiEvent &evt)
 {
 {
    Parent::onRightMouseDragged(evt);
    Parent::onRightMouseDragged(evt);
 
 
-   sendMouseEvent("onRightMouseDragged", evt);
+   if (mFrameTime && mFrameTime->getElapsedMs() > 16)
+   {
+      sendMouseEvent("onRightMouseDragged", evt);
+      mFrameTime->reset();
+   }
 }
 }
 
 
 void GameTSCtrl::onMiddleMouseDragged(const GuiEvent &evt)
 void GameTSCtrl::onMiddleMouseDragged(const GuiEvent &evt)
 {
 {
    Parent::onMiddleMouseDragged(evt);
    Parent::onMiddleMouseDragged(evt);
 
 
-   sendMouseEvent("onMiddleMouseDragged", evt);
+   if (mFrameTime && mFrameTime->getElapsedMs() > 16)
+   {
+      sendMouseEvent("onMiddleMouseDragged", evt);
+      mFrameTime->reset();
+   }
 }
 }
 
 
 bool GameTSCtrl::onMouseWheelUp(const GuiEvent &evt)
 bool GameTSCtrl::onMouseWheelUp(const GuiEvent &evt)
@@ -410,7 +423,11 @@ void GameTSCtrl::onMouseMove(const GuiEvent &evt)
       }
       }
    }
    }
 
 
-   sendMouseEvent("onMouseMove", evt);
+   if (mFrameTime->getElapsedMs() > 16)
+   {
+      sendMouseEvent("onMouseMove", evt);
+      mFrameTime->reset();
+   }
 }
 }
 
 
 void GameTSCtrl::onRender(Point2I offset, const RectI &updateRect)
 void GameTSCtrl::onRender(Point2I offset, const RectI &updateRect)

+ 3 - 0
Engine/source/T3D/gameTSCtrl.h

@@ -43,6 +43,9 @@ private:
 
 
    void sendMouseEvent(const char *name, const GuiEvent &evt);
    void sendMouseEvent(const char *name, const GuiEvent &evt);
 
 
+protected:
+   PlatformTimer *mFrameTime;
+
 public:
 public:
    GameTSCtrl();
    GameTSCtrl();