| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- #include "CmOSInputHandler.h"
- #include "CmPlatform.h"
- #include "CmMath.h"
- namespace CamelotFramework
- {
- OSInputHandler::OSInputHandler()
- :mMouseScroll(0.0f)
- {
- mCharInputConn = Platform::onCharInput.connect(boost::bind(&OSInputHandler::charInput, this, _1));
- mMouseMovedConn = Platform::onMouseMoved.connect(boost::bind(&OSInputHandler::mouseMoved, this, _1));
- mMouseWheelScrolledConn = Platform::onMouseWheelScrolled.connect(boost::bind(&OSInputHandler::mouseWheelScrolled, this, _1));
- }
- OSInputHandler::~OSInputHandler()
- {
- mCharInputConn.disconnect();
- mMouseMovedConn.disconnect();
- mMouseWheelScrolledConn.disconnect();
- }
- void OSInputHandler::update()
- {
- WString inputString;
- Int2 mousePosition;
- float mouseScroll;
- {
- CM_LOCK_MUTEX(mOSInputMutex);
- inputString = mInputString;
- mInputString.clear();
- mousePosition = mMousePosition;
- mouseScroll = mMouseScroll;
- mMouseScroll = 0.0f;
- }
- if(mousePosition != mLastMousePos || (Math::Abs(mouseScroll) > 0.00001f))
- {
- if(!onMouseMoved.empty())
- onMouseMoved(mousePosition, mouseScroll);
- 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;
- }
- void OSInputHandler::mouseWheelScrolled(float scrollPos)
- {
- CM_LOCK_MUTEX(mOSInputMutex);
- mMouseScroll = scrollPos;
- }
- }
|