CmOSInputHandler.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #include "CmOSInputHandler.h"
  2. #include "CmWindowEventUtilities.h"
  3. #include "CmMath.h"
  4. namespace CamelotFramework
  5. {
  6. OSInputHandler::OSInputHandler()
  7. :mMouseScroll(0.0f)
  8. {
  9. mCharInputConn = WindowEventUtilities::onCharInput.connect(boost::bind(&OSInputHandler::charInput, this, _1));
  10. mMouseMovedConn = WindowEventUtilities::onMouseMoved.connect(boost::bind(&OSInputHandler::mouseMoved, this, _1));
  11. mMouseWheelScrolledConn = WindowEventUtilities::onMouseWheelScrolled.connect(boost::bind(&OSInputHandler::mouseWheelScrolled, this, _1));
  12. }
  13. OSInputHandler::~OSInputHandler()
  14. {
  15. mCharInputConn.disconnect();
  16. mMouseMovedConn.disconnect();
  17. mMouseWheelScrolledConn.disconnect();
  18. }
  19. void OSInputHandler::update()
  20. {
  21. WString inputString;
  22. Int2 mousePosition;
  23. float mouseScroll;
  24. {
  25. CM_LOCK_MUTEX(mOSInputMutex);
  26. inputString = mInputString;
  27. mInputString.clear();
  28. mousePosition = mMousePosition;
  29. mouseScroll = mMouseScroll;
  30. mMouseScroll = 0.0f;
  31. }
  32. if(mousePosition != mLastMousePos || (Math::Abs(mouseScroll) > 0.00001f))
  33. {
  34. if(!onMouseMoved.empty())
  35. onMouseMoved(mousePosition, mouseScroll);
  36. mLastMousePos = mousePosition;
  37. }
  38. if(!onCharInput.empty())
  39. {
  40. for(auto& curChar : inputString)
  41. {
  42. onCharInput((UINT32)curChar);
  43. }
  44. }
  45. }
  46. void OSInputHandler::charInput(UINT32 character)
  47. {
  48. CM_LOCK_MUTEX(mOSInputMutex);
  49. mInputString += character;
  50. }
  51. void OSInputHandler::mouseMoved(const Int2& mousePos)
  52. {
  53. CM_LOCK_MUTEX(mOSInputMutex);
  54. mMousePosition = mousePos;
  55. }
  56. void OSInputHandler::mouseWheelScrolled(float scrollPos)
  57. {
  58. CM_LOCK_MUTEX(mOSInputMutex);
  59. mMouseScroll = scrollPos;
  60. }
  61. }