| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- #include "CmOSInputHandler.h"
- #include "CmWindowEventUtilities.h"
- namespace CamelotFramework
- {
- OSInputHandler::OSInputHandler()
- {
- mCharInputConn = WindowEventUtilities::onCharInput.connect(boost::bind(&OSInputHandler::charInput, this, _1));
- mMouseMovedConn = WindowEventUtilities::onMouseMoved.connect(boost::bind(&OSInputHandler::mouseMoved, this, _1));
- }
- OSInputHandler::~OSInputHandler()
- {
- mCharInputConn.disconnect();
- mMouseMovedConn.disconnect();
- }
- void OSInputHandler::update()
- {
- WString inputString;
- Int2 mousePosition;
- {
- CM_LOCK_MUTEX(mOSInputMutex);
- inputString = mInputString;
- mInputString.clear();
- mousePosition = mMousePosition;
- }
- if(mousePosition != mLastMousePos)
- {
- if(!onMouseMoved.empty())
- onMouseMoved(mousePosition);
- mLastMousePos = mousePosition;
- }
- if(!onCharInput.empty())
- {
- for(auto& curChar : inputString)
- {
- onCharInput((UINT32)curChar);
- }
- }
- }
- void OSInputHandler::charInput(UINT32 character)
- {
- CM_LOCK_MUTEX(mOSInputMutex);
- mInputString += character;
- }
- void OSInputHandler::mouseMoved(const Int2& mousePos)
- {
- CM_LOCK_MUTEX(mOSInputMutex);
- mMousePosition = mousePos;
- }
- }
|