From 13167064cb3789d53bbafd3a1b681f75d334c758 Mon Sep 17 00:00:00 2001 From: dean11 Date: Tue, 25 Feb 2014 13:49:20 +0100 Subject: [PATCH] Input - Added mouse features, custom tags and all-in-one callback --- Code/Misc/Input/Include/ApplicationKeyboard.h | 36 ------ Code/Misc/Input/Include/Common.h | 7 +- Code/Misc/Input/Include/InputManager.h | 5 - Code/Misc/Input/Include/Keyboard.h | 1 - Code/Misc/Input/Include/Mouse.h | 45 +++++-- .../Include/Win32/Win32ApplicationKeyboard.h | 23 ---- .../Misc/Input/Source/ApplicationKeyboard.cpp | 44 ------- Code/Misc/Input/Source/InputManager.cpp | 6 - Code/Misc/Input/Source/Keyboard.cpp | 4 - Code/Misc/Input/Source/Mouse.cpp | 115 ++++++++++++------ .../Source/Win32/Win32ApplicationKeyboard.cpp | 51 -------- Code/Misc/Input/Source/Win32/Win32Input.cpp | 6 +- Code/Misc/Input/Source/Win32/Win32Mouse.cpp | 47 +++++++ 13 files changed, 165 insertions(+), 225 deletions(-) delete mode 100644 Code/Misc/Input/Include/ApplicationKeyboard.h delete mode 100644 Code/Misc/Input/Include/Win32/Win32ApplicationKeyboard.h delete mode 100644 Code/Misc/Input/Source/ApplicationKeyboard.cpp delete mode 100644 Code/Misc/Input/Source/Win32/Win32ApplicationKeyboard.cpp diff --git a/Code/Misc/Input/Include/ApplicationKeyboard.h b/Code/Misc/Input/Include/ApplicationKeyboard.h deleted file mode 100644 index b03e5abb..00000000 --- a/Code/Misc/Input/Include/ApplicationKeyboard.h +++ /dev/null @@ -1,36 +0,0 @@ -///////////////////////////////////////////////////////////////////// -// Created by [Dan Andersson] [2014] -///////////////////////////////////////////////////////////////////// -#ifndef INPUT_APPLICATION_KEBOARD_H -#define INPUT_APPLICATION_KEBOARD_H - -#include "InputObject.h" -#include - -namespace Input -{ - class ApplicationKeyboard : public InputObject - { - public: - virtual ~ApplicationKeyboard(); - - bool IsActive() const; - - void Activate(); - void Deactivate(); - - void BindTextTarget( ::std::wstring *field ); - void ReleaseTextTarget(); - - protected: - ::std::wstring *textTarget; - ::std::wstring::size_type writePos; - - ApplicationKeyboard(); - - private: - bool active; - }; -} - -#endif // !INPUT_KEBOARD_H diff --git a/Code/Misc/Input/Include/Common.h b/Code/Misc/Input/Include/Common.h index 694001a3..f3dd2512 100644 --- a/Code/Misc/Input/Include/Common.h +++ b/Code/Misc/Input/Include/Common.h @@ -21,22 +21,17 @@ namespace Input { SAIType_Keyboard, SAIType_Mouse, - //SAIType_ApplicationKeyboard, SAIType_futureExample1, SAIType_futureExample2, SAIType_futureExample3, }; - enum InputOptionType - { - InputOptionType_RawInput, - InputOptionType_PlatformDefault, - }; enum ButtonState { ButtonState_Press, // When button is pressed (once) ButtonState_Down, // When the button is held down ButtonState_Release, // When button is released (once) ButtonState_Up, // Default state, will not be proccesed as a callback! + ButtonState_Unknown, }; } /*********************************************************************/ diff --git a/Code/Misc/Input/Include/InputManager.h b/Code/Misc/Input/Include/InputManager.h index b34d81e9..1feff9cf 100644 --- a/Code/Misc/Input/Include/InputManager.h +++ b/Code/Misc/Input/Include/InputManager.h @@ -25,11 +25,6 @@ namespace Input */ static InputManager* CreateInputManager (); - /** - * @return Destroy default input manager. - */ - static void DestroyInputManager (); - /** * @return Destroys a input manager. */ diff --git a/Code/Misc/Input/Include/Keyboard.h b/Code/Misc/Input/Include/Keyboard.h index 4db0bce6..b6708604 100644 --- a/Code/Misc/Input/Include/Keyboard.h +++ b/Code/Misc/Input/Include/Keyboard.h @@ -199,7 +199,6 @@ namespace Input ::std::wstring* textTarget; ::std::wstring::size_type writePos; bool active; - Enum::InputOptionType inputMode; }; } diff --git a/Code/Misc/Input/Include/Mouse.h b/Code/Misc/Input/Include/Mouse.h index f83a71a5..863cdd4e 100644 --- a/Code/Misc/Input/Include/Mouse.h +++ b/Code/Misc/Input/Include/Mouse.h @@ -38,12 +38,30 @@ namespace Input SAMI_MouseBtnX18, SAMI_MouseBtnX19, SAMI_MouseBtnX20, + SAMI_MouseMove, + SAMI_MouseScroll, SAMI_Unknown, }; } //----------------------------------------------------------------------------------------------------------------------------- + namespace Struct + { + struct MouseEventData + { + Enum::SAMI type; + Enum::ButtonState buttonState; + Struct::SAIPointInt2D pixelPos; + Struct::SAIPointFloat2D normalizedPos; + Struct::SAIPointInt2D velocity; + Mouse* sender; + int scrollDelta; + void* tag; + }; + } + //----------------------------------------------------------------------------------------------------------------------------- namespace Typedefs { + typedef void(*OnMouseCallback)( const Struct::MouseEventData& eventData ); typedef void(*OnMousePressCallback)(Enum::SAMI btn, Mouse* sender); typedef void(*OnMouseDownCallback)(Enum::SAMI btn, Mouse* sender); typedef void(*OnMouseReleaseCallback)(Enum::SAMI btn, Mouse* sender); @@ -60,6 +78,7 @@ namespace Input class MouseEvent { public: + virtual void OnMouse ( const Struct::MouseEventData& eventData ) { } virtual void OnMousePress ( Enum::SAMI key, Mouse* sender ) { } virtual void OnMouseDown ( Enum::SAMI key, Mouse* sender ) { } virtual void OnMouseRelease ( Enum::SAMI key, Mouse* sender ) { } @@ -82,13 +101,21 @@ namespace Input virtual bool IsActive() override = 0; public: /* global subscribe callback functions */ - void AddOnMousePressCallback( Typedefs::OnMousePressCallback func); - void AddOnMouseDownCallback( Typedefs::OnMouseDownCallback func ); - void AddOnMouseReleaseCallback( Typedefs::OnMouseReleaseCallback func ); - void AddOnMouseMovePixelPosCallback( Typedefs::OnMouseMovePixelPosCallback func ); - void AddOnMouseMoveVelocityCallback( Typedefs::OnMouseMoveVelocityCallback func ); - void AddOnMouseScrollCallback( Typedefs::OnMouseScrollCallback func ); + void AddMouseEvent(MouseEvent* object); + void RemoveMouseEvent(MouseEvent* object); + void operator+= (MouseEvent* object); + void operator-= (MouseEvent* object); + public: /* global subscribe callback functions */ + void AddOnMouseCallback( Typedefs::OnMouseCallback func, void* tag); + void AddOnMousePressCallback( Typedefs::OnMousePressCallback func, void* tag); + void AddOnMouseDownCallback( Typedefs::OnMouseDownCallback func, void* tag ); + void AddOnMouseReleaseCallback( Typedefs::OnMouseReleaseCallback func, void* tag ); + void AddOnMouseMovePixelPosCallback( Typedefs::OnMouseMovePixelPosCallback func, void* tag ); + void AddOnMouseMoveVelocityCallback( Typedefs::OnMouseMoveVelocityCallback func, void* tag ); + void AddOnMouseScrollCallback( Typedefs::OnMouseScrollCallback func, void* tag ); + + void RemoveOnMouseCallback( Typedefs::OnMouseCallback func); void RemoveOnMousePressCallback( Typedefs::OnMousePressCallback func); void RemoveOnMouseDownCallback( Typedefs::OnMouseDownCallback func ); void RemoveOnMouseReleaseCallback( Typedefs::OnMouseReleaseCallback func ); @@ -96,10 +123,6 @@ namespace Input void RemoveOnMouseMoveVelocityCallback( Typedefs::OnMouseMoveVelocityCallback func ); void RemoveOnMouseScrollCallback( Typedefs::OnMouseScrollCallback func ); - public: - void operator+= (MouseEvent* object); - void operator-= (MouseEvent* object); - void SetPixelPos(int x, int y); void ToggleCursor(bool toggler); @@ -111,6 +134,7 @@ namespace Input virtual ~Mouse(); protected: + void InternalOnEvent(Struct::MouseEventData & data); void InternalOnBtnPress(Enum::SAMI key); void InternalOnBtnDown(Enum::SAMI key); void InternalOnBtnRelease(Enum::SAMI key); @@ -127,7 +151,6 @@ namespace Input bool isCurorLocked; int wheelDelta; - Enum::InputOptionType inputMode; }; } diff --git a/Code/Misc/Input/Include/Win32/Win32ApplicationKeyboard.h b/Code/Misc/Input/Include/Win32/Win32ApplicationKeyboard.h deleted file mode 100644 index 98bcc0e9..00000000 --- a/Code/Misc/Input/Include/Win32/Win32ApplicationKeyboard.h +++ /dev/null @@ -1,23 +0,0 @@ -///////////////////////////////////////////////////////////////////// -// Created by [Dan Andersson] [2014] -///////////////////////////////////////////////////////////////////// -#ifndef INPUT_WIN32_APPLICATION_KEBOARD_H -#define INPUT_WIN32_APPLICATION_KEBOARD_H - -#define NOMINMAX -#include -#include "..\ApplicationKeyboard.h" - -namespace Input -{ - class Win32ApplicationKeyboard : public ApplicationKeyboard - { - public: - Win32ApplicationKeyboard(); - ~Win32ApplicationKeyboard(); - - void CaptureText( UINT msg, WPARAM param ); - }; -} - -#endif // !INPUT_WIN32_APPLICATION_KEBOARD_H diff --git a/Code/Misc/Input/Source/ApplicationKeyboard.cpp b/Code/Misc/Input/Source/ApplicationKeyboard.cpp deleted file mode 100644 index 66ddb042..00000000 --- a/Code/Misc/Input/Source/ApplicationKeyboard.cpp +++ /dev/null @@ -1,44 +0,0 @@ -#include "../Include/ApplicationKeyboard.h" - -using namespace ::Input; - -ApplicationKeyboard::ApplicationKeyboard() : - InputObject( Enum::SAIType_ApplicationKeyboard ) -{ - this->textTarget = nullptr; - this->writePos = 0; - this->isEnabled = true; -} - -ApplicationKeyboard::~ApplicationKeyboard() -{ /* DO nothing */ } - -bool ApplicationKeyboard::IsActive() const -{ - return this->isEnabled; -} - -void ApplicationKeyboard::Activate() -{ - this->isEnabled = true; -} - -void ApplicationKeyboard::Deactivate() -{ - this->isEnabled = false; -} - -void ApplicationKeyboard::BindTextTarget( ::std::wstring *field ) -{ - this->textTarget = field; - - if( field ) - { - this->writePos = field->size(); - } -} - -void ApplicationKeyboard::ReleaseTextTarget( ) -{ - this->BindTextTarget( nullptr ); -} \ No newline at end of file diff --git a/Code/Misc/Input/Source/InputManager.cpp b/Code/Misc/Input/Source/InputManager.cpp index b226d1da..48bb828f 100644 --- a/Code/Misc/Input/Source/InputManager.cpp +++ b/Code/Misc/Input/Source/InputManager.cpp @@ -57,11 +57,6 @@ InputManager* InputManager::CreateInputManager() { return CreateManager(); } -void InputManager::DestroyInputManager() -{ - delete defaultInstance; - defaultInstance = 0; -} void InputManager::DestroyInputManager(InputManager* inputSystem) { if(!inputSystem) return; @@ -82,4 +77,3 @@ InputManager::~InputManager() - diff --git a/Code/Misc/Input/Source/Keyboard.cpp b/Code/Misc/Input/Source/Keyboard.cpp index fc75f4d8..a35f75a5 100644 --- a/Code/Misc/Input/Source/Keyboard.cpp +++ b/Code/Misc/Input/Source/Keyboard.cpp @@ -226,10 +226,6 @@ void Keyboard::BindTextTarget( ::std::wstring *field ) { this->writePos = field->size(); } - else - { - this->writePos = 0; - } } void Keyboard::ReleaseTextTarget( ) { diff --git a/Code/Misc/Input/Source/Mouse.cpp b/Code/Misc/Input/Source/Mouse.cpp index b3cebbc4..2d309ddf 100644 --- a/Code/Misc/Input/Source/Mouse.cpp +++ b/Code/Misc/Input/Source/Mouse.cpp @@ -13,6 +13,7 @@ struct Mouse::MouseCallbackList { enum CallbackDataType { + CallbackDataType_OnEvent, CallbackDataType_OnPress, CallbackDataType_OnDown, CallbackDataType_OnRelease, @@ -22,6 +23,7 @@ struct Mouse::MouseCallbackList } type; union CallbackData { + Typedefs::OnMouseCallback mouseCallback; Typedefs::OnMousePressCallback mousePressCallback; Typedefs::OnMouseDownCallback mouseDownCallback; Typedefs::OnMouseReleaseCallback mouseReleaseCallback; @@ -37,7 +39,8 @@ struct Mouse::MouseCallbackList operator bool(){ return this->dummy != 0; } } function; MouseCallbackList *next; - MouseCallbackList(CallbackData func, CallbackDataType t) :function(func), next(0), type(t) { } + void* tag; + MouseCallbackList(CallbackData func, CallbackDataType t, void* ct) :function(func), next(0), type(t), tag(ct) { } }; void ClearList(Mouse::MouseCallbackList* first) @@ -52,7 +55,7 @@ void ClearList(Mouse::MouseCallbackList* first) delete removee; } } -void AddToList(Mouse::MouseCallbackList* first, Mouse::MouseCallbackList::CallbackData data, Mouse::MouseCallbackList::CallbackDataType type) +void AddToList(Mouse::MouseCallbackList* first, Mouse::MouseCallbackList::CallbackData data, Mouse::MouseCallbackList::CallbackDataType type, void* tag) { Mouse::MouseCallbackList *w = first; Mouse::MouseCallbackList *prev = first; @@ -62,7 +65,7 @@ void AddToList(Mouse::MouseCallbackList* first, Mouse::MouseCallbackList::Callba Mouse::MouseCallbackList::CallbackData f; f = data; - prev->next = new Mouse::MouseCallbackList(f, type); + prev->next = new Mouse::MouseCallbackList(f, type, tag); } void RemoveFromList(Mouse::MouseCallbackList* first, Mouse::MouseCallbackList::CallbackData data) { @@ -119,6 +122,25 @@ Mouse::~Mouse() } +void Mouse::InternalOnEvent(MouseEventData & data) +{ + for (unsigned int i = 0; i < this->mouseSubscribers.size(); i++) + { + if(this->mouseSubscribers[i]) + this->mouseSubscribers[i]->OnMouse(data); + } + MouseCallbackList *w = this->callbackList; + while (w) + { + if(w->function) + if (w->type == MouseCallbackList::CallbackDataType_OnEvent) + { + data.tag = w->tag; + w->function.mouseCallback(data); + } + w = w->next; + } +} void Mouse::InternalOnBtnPress(Enum::SAMI btn) { for (unsigned int i = 0; i < this->mouseSubscribers.size(); i++) @@ -205,49 +227,85 @@ void Mouse::InternalOnScroll(int delta) } } +void Mouse::AddMouseEvent(MouseEvent* object) +{ + if(ExistsInList(this->mouseSubscribers, object)) return; + this->mouseSubscribers.push_back(object); +} +void Mouse::RemoveMouseEvent(MouseEvent* object) +{ + int i = -1; + if((i = ExistsInList(this->mouseSubscribers, object))) + { + std::swap(this->mouseSubscribers[i], this->mouseSubscribers[this->mouseSubscribers.size() - 1]); + this->mouseSubscribers.resize(this->mouseSubscribers.size() - 1); + } +} +void Mouse::operator+= (MouseEvent* object) +{ + if(ExistsInList(this->mouseSubscribers, object)) return; -void Mouse::AddOnMousePressCallback( Typedefs::OnMousePressCallback func) + this->mouseSubscribers.push_back(object); +} +void Mouse::operator-= (MouseEvent* object) +{ + int i = -1; + if((i = ExistsInList(this->mouseSubscribers, object))) + { + std::swap(this->mouseSubscribers[i], this->mouseSubscribers[this->mouseSubscribers.size() - 1]); + this->mouseSubscribers.resize(this->mouseSubscribers.size() - 1); + } +} + +void Mouse::AddOnMouseCallback( Typedefs::OnMouseCallback func, void* tag) +{ + MouseCallbackList::CallbackData d; + d.mouseCallback = func; + if(!this->callbackList) this->callbackList = new MouseCallbackList(d, MouseCallbackList::CallbackDataType_OnEvent, tag); + else AddToList(this->callbackList, d, MouseCallbackList::CallbackDataType_OnEvent, tag); +} +void Mouse::AddOnMousePressCallback( Typedefs::OnMousePressCallback func, void* tag) { MouseCallbackList::CallbackData d; d.mousePressCallback = func; - if(!this->callbackList) this->callbackList = new MouseCallbackList(d, MouseCallbackList::CallbackDataType_OnPress); - else AddToList(this->callbackList, d, MouseCallbackList::CallbackDataType_OnPress); + if(!this->callbackList) this->callbackList = new MouseCallbackList(d, MouseCallbackList::CallbackDataType_OnPress, tag); + else AddToList(this->callbackList, d, MouseCallbackList::CallbackDataType_OnPress, tag); } -void Mouse::AddOnMouseDownCallback( Typedefs::OnMouseDownCallback func ) +void Mouse::AddOnMouseDownCallback( Typedefs::OnMouseDownCallback func, void* tag ) { MouseCallbackList::CallbackData d; d.mouseDownCallback = func; - if(!this->callbackList) this->callbackList = new MouseCallbackList(d, MouseCallbackList::CallbackDataType_OnDown); - else AddToList(this->callbackList, d, MouseCallbackList::CallbackDataType_OnDown); + if(!this->callbackList) this->callbackList = new MouseCallbackList(d, MouseCallbackList::CallbackDataType_OnDown, tag); + else AddToList(this->callbackList, d, MouseCallbackList::CallbackDataType_OnDown, tag); } -void Mouse::AddOnMouseReleaseCallback( Typedefs::OnMouseReleaseCallback func ) +void Mouse::AddOnMouseReleaseCallback( Typedefs::OnMouseReleaseCallback func, void* tag ) { MouseCallbackList::CallbackData d; d.mouseReleaseCallback = func; - if(!this->callbackList) this->callbackList = new MouseCallbackList(d, MouseCallbackList::CallbackDataType_OnRelease); - else AddToList(this->callbackList, d, MouseCallbackList::CallbackDataType_OnRelease); + if(!this->callbackList) this->callbackList = new MouseCallbackList(d, MouseCallbackList::CallbackDataType_OnRelease, tag); + else AddToList(this->callbackList, d, MouseCallbackList::CallbackDataType_OnRelease, tag); } -void Mouse::AddOnMouseMovePixelPosCallback( Typedefs::OnMouseMovePixelPosCallback func ) +void Mouse::AddOnMouseMovePixelPosCallback( Typedefs::OnMouseMovePixelPosCallback func, void* tag ) { MouseCallbackList::CallbackData d; d.mouseMovePixelPosCallback = func; - if(!this->callbackList) this->callbackList = new MouseCallbackList(d, MouseCallbackList::CallbackDataType_OnMovePixelPos); - else AddToList(this->callbackList, d, MouseCallbackList::CallbackDataType_OnMovePixelPos); + if(!this->callbackList) this->callbackList = new MouseCallbackList(d, MouseCallbackList::CallbackDataType_OnMovePixelPos, tag); + else AddToList(this->callbackList, d, MouseCallbackList::CallbackDataType_OnMovePixelPos, tag); } -void Mouse::AddOnMouseMoveVelocityCallback( Typedefs::OnMouseMoveVelocityCallback func ) +void Mouse::AddOnMouseMoveVelocityCallback( Typedefs::OnMouseMoveVelocityCallback func, void* tag ) { MouseCallbackList::CallbackData d; d.mouseMoveVelocityCallback = func; - if(!this->callbackList) this->callbackList = new MouseCallbackList(d, MouseCallbackList::CallbackDataType_OnMoveVelocity); - else AddToList(this->callbackList, d, MouseCallbackList::CallbackDataType_OnMoveVelocity); + if(!this->callbackList) this->callbackList = new MouseCallbackList(d, MouseCallbackList::CallbackDataType_OnMoveVelocity, tag); + else AddToList(this->callbackList, d, MouseCallbackList::CallbackDataType_OnMoveVelocity, tag); } -void Mouse::AddOnMouseScrollCallback( Typedefs::OnMouseScrollCallback func ) +void Mouse::AddOnMouseScrollCallback( Typedefs::OnMouseScrollCallback func, void* tag ) { MouseCallbackList::CallbackData d; d.mouseScrollCallback = func; - if(!this->callbackList) this->callbackList = new MouseCallbackList(d, MouseCallbackList::CallbackDataType_OnScroll); - else AddToList(this->callbackList, d, MouseCallbackList::CallbackDataType_OnScroll); + if(!this->callbackList) this->callbackList = new MouseCallbackList(d, MouseCallbackList::CallbackDataType_OnScroll, tag); + else AddToList(this->callbackList, d, MouseCallbackList::CallbackDataType_OnScroll, tag); } void Mouse::RemoveOnMousePressCallback( Typedefs::OnMousePressCallback func) @@ -285,21 +343,6 @@ void Mouse::ToggleCursor(bool toggler) this->isCurorLocked = toggler; } -void Mouse::operator+= (MouseEvent* object) -{ - if(ExistsInList(this->mouseSubscribers, object)) return; - - this->mouseSubscribers.push_back(object); -} -void Mouse::operator-= (MouseEvent* object) -{ - int i = -1; - if((i = ExistsInList(this->mouseSubscribers, object))) - { - std::swap(this->mouseSubscribers[i], this->mouseSubscribers[this->mouseSubscribers.size() - 1]); - this->mouseSubscribers.resize(this->mouseSubscribers.size() - 1); - } -} diff --git a/Code/Misc/Input/Source/Win32/Win32ApplicationKeyboard.cpp b/Code/Misc/Input/Source/Win32/Win32ApplicationKeyboard.cpp deleted file mode 100644 index 3b58a032..00000000 --- a/Code/Misc/Input/Source/Win32/Win32ApplicationKeyboard.cpp +++ /dev/null @@ -1,51 +0,0 @@ -#include "../../Include/Win32/Win32ApplicationKeyboard.h" -#include "Utilities.h" - -using namespace ::Input; -using namespace ::Utility::Value; -using ::std::wstring; - -Win32ApplicationKeyboard::Win32ApplicationKeyboard() : ApplicationKeyboard() { /* DO nothing */ } - -Win32ApplicationKeyboard::~Win32ApplicationKeyboard() { /* DO nothing */ } - -void Win32ApplicationKeyboard::CaptureText( UINT msg, WPARAM param ) -{ - if( !this->textTarget | !this->isEnabled ) - return; - - switch( msg ) - { - case WM_CHAR: - this->textTarget->insert( this->writePos, 1, (wchar_t)param ); - ++this->writePos; - break; - case WM_KEYDOWN: - { - switch( param ) - { - case VK_BACK: - if( this->writePos > 0 ) - { - --this->writePos; - this->textTarget->erase( this->writePos, 1 ); - } - break; - case VK_DELETE: - if( this->writePos < this->textTarget->size() ) - { - this->textTarget->erase( this->writePos, 1 ); - } - break; - case VK_LEFT: - this->writePos = Max( this->writePos - 1, (wstring::size_type)0 ); - break; - case VK_RIGHT: - this->writePos = Min( this->writePos + 1, this->textTarget->size() ); - break; - default: break; - } - } - default: break; - } -} diff --git a/Code/Misc/Input/Source/Win32/Win32Input.cpp b/Code/Misc/Input/Source/Win32/Win32Input.cpp index e1b0e040..30ebf7ab 100644 --- a/Code/Misc/Input/Source/Win32/Win32Input.cpp +++ b/Code/Misc/Input/Source/Win32/Win32Input.cpp @@ -150,7 +150,7 @@ Win32Input::Win32Input() { /*wrong*/ } } Win32Input::~Win32Input() -{ Destroy(); } +{} InputObject* Win32Input::CreateDevice(const SAIType inputType, Typedefs::WindowHandle targetApplication) { if(!this->instance->targetHwin) @@ -225,7 +225,9 @@ void Win32Input::ToggleInputSystem(bool enable) void Win32Input::Destroy () { ShowCursor(true); - ClipCursor(0); + RECT r; + GetWindowRect(GetDesktopWindow(), &r); + ClipCursor(&r); for (unsigned int i = 0; i < this->keyboard.size(); i++) { diff --git a/Code/Misc/Input/Source/Win32/Win32Mouse.cpp b/Code/Misc/Input/Source/Win32/Win32Mouse.cpp index c7bc9bf2..6defebcc 100644 --- a/Code/Misc/Input/Source/Win32/Win32Mouse.cpp +++ b/Code/Misc/Input/Source/Win32/Win32Mouse.cpp @@ -152,6 +152,10 @@ void Win32Mouse::Deactivate () void Win32Mouse::ProccessMouseData (RAWMOUSE mouse) { + static MouseEventData mouseEventData; + memset(&mouseEventData, 0, sizeof(MouseEventData)); + + bool isUp = true; Enum::SAMI btn = Enum::SAMI_Unknown; int delta = 0; @@ -167,11 +171,30 @@ void Win32Mouse::ProccessMouseData (RAWMOUSE mouse) ContainPoint(this->pixelPos, this->windowSize); InternalOnMove(this->pixelPos, velocity); + + GetNormalizedPosition( mouseEventData.normalizedPos ); + mouseEventData.pixelPos = this->pixelPos; + mouseEventData.velocity = velocity; + mouseEventData.buttonState = Enum::ButtonState_Unknown; + mouseEventData.scrollDelta = 0; + mouseEventData.sender = this; + mouseEventData.type = SAMI::SAMI_MouseMove; + + InternalOnEvent(mouseEventData); } if(delta != 0) { InternalOnScroll(delta); + + GetNormalizedPosition( mouseEventData.normalizedPos ); + mouseEventData.pixelPos = this->pixelPos; + mouseEventData.buttonState = Enum::ButtonState_Unknown; + mouseEventData.scrollDelta = delta; + mouseEventData.sender = this; + mouseEventData.type = SAMI::SAMI_MouseScroll; + + InternalOnEvent(mouseEventData); } @@ -184,6 +207,14 @@ void Win32Mouse::ProccessMouseData (RAWMOUSE mouse) if(isUp) { InternalOnBtnRelease(btn); + + GetNormalizedPosition( mouseEventData.normalizedPos ); + mouseEventData.pixelPos = this->pixelPos; + mouseEventData.buttonState = Enum::ButtonState_Release; + mouseEventData.type = btn; + mouseEventData.sender = this; + + InternalOnEvent(mouseEventData); } //The btn is pressed. else @@ -192,10 +223,26 @@ void Win32Mouse::ProccessMouseData (RAWMOUSE mouse) if(this->buttons[btn].isDown) { InternalOnBtnDown(btn); + + GetNormalizedPosition( mouseEventData.normalizedPos ); + mouseEventData.pixelPos = this->pixelPos; + mouseEventData.buttonState = Enum::ButtonState_Down; + mouseEventData.type = btn; + mouseEventData.sender = this; + + InternalOnEvent(mouseEventData); } else { InternalOnBtnPress(btn); + + GetNormalizedPosition( mouseEventData.normalizedPos ); + mouseEventData.pixelPos = this->pixelPos; + mouseEventData.buttonState = Enum::ButtonState_Press; + mouseEventData.type = btn; + mouseEventData.sender = this; + + InternalOnEvent(mouseEventData); } } }