CmOSInputHandler.cpp 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #include "CmOSInputHandler.h"
  2. #include "CmWindowEventUtilities.h"
  3. namespace CamelotFramework
  4. {
  5. OSInputHandler::OSInputHandler()
  6. {
  7. mCharInputConn = WindowEventUtilities::onCharInput.connect(boost::bind(&OSInputHandler::charInput, this, _1));
  8. mMouseMovedConn = WindowEventUtilities::onMouseMoved.connect(boost::bind(&OSInputHandler::mouseMoved, this, _1));
  9. }
  10. OSInputHandler::~OSInputHandler()
  11. {
  12. mCharInputConn.disconnect();
  13. mMouseMovedConn.disconnect();
  14. }
  15. void OSInputHandler::update()
  16. {
  17. WString inputString;
  18. Int2 mousePosition;
  19. {
  20. CM_LOCK_MUTEX(mOSInputMutex);
  21. inputString = mInputString;
  22. mInputString.clear();
  23. mousePosition = mMousePosition;
  24. }
  25. if(mousePosition != mLastMousePos)
  26. {
  27. if(!onMouseMoved.empty())
  28. onMouseMoved(mousePosition);
  29. mLastMousePos = mousePosition;
  30. }
  31. if(!onCharInput.empty())
  32. {
  33. for(auto& curChar : inputString)
  34. {
  35. onCharInput((UINT32)curChar);
  36. }
  37. }
  38. }
  39. void OSInputHandler::charInput(UINT32 character)
  40. {
  41. CM_LOCK_MUTEX(mOSInputMutex);
  42. mInputString += character;
  43. }
  44. void OSInputHandler::mouseMoved(const Int2& mousePos)
  45. {
  46. CM_LOCK_MUTEX(mOSInputMutex);
  47. mMousePosition = mousePos;
  48. }
  49. }