diff --git a/Code/Misc/Input/Include/ApplicationKeyboard.h b/Code/Misc/Input/Include/ApplicationKeyboard.h index 3e506e22..d28140b3 100644 --- a/Code/Misc/Input/Include/ApplicationKeyboard.h +++ b/Code/Misc/Input/Include/ApplicationKeyboard.h @@ -5,17 +5,30 @@ #define INPUT_APPLICATION_KEBOARD_H #include "InputObject.h" -#include +#include namespace Input { - class AplicationKeyboard : public InputObject + class ApplicationKeyboard : public InputObject { public: + bool IsActive() const; + + void Activate(); + void Deactivate(); + + void BindTextTarget( ::std::wstring *field ); + void ReleaseTextTarget(); protected: - AplicationKeyboard(); - ~AplicationKeyboard(); + ::std::wstring *textTarget; + ::std::wstring::size_type writePos; + + ApplicationKeyboard(); + ~ApplicationKeyboard(); + + private: + bool active; }; } diff --git a/Code/Misc/Input/Include/Common.h b/Code/Misc/Input/Include/Common.h index 18999b41..a82ad47b 100644 --- a/Code/Misc/Input/Include/Common.h +++ b/Code/Misc/Input/Include/Common.h @@ -21,6 +21,7 @@ namespace Input { SAIType_Keyboard, SAIType_Mouse, + SAIType_ApplicationKeyboard, SAIType_futureExample1, SAIType_futureExample2, SAIType_futureExample3, diff --git a/Code/Misc/Input/Include/Mouse.h b/Code/Misc/Input/Include/Mouse.h index b657604b..510fe3a9 100644 --- a/Code/Misc/Input/Include/Mouse.h +++ b/Code/Misc/Input/Include/Mouse.h @@ -66,12 +66,14 @@ namespace Input }; public: - virtual bool IsBtnUp(Enum::SAMI key) = 0; - virtual bool IsBtnDown(Enum::SAMI key) = 0; - virtual int GetWheelDelta() = 0; - virtual Struct::SAIPoint2D GetPixelPosition(Struct::SAIPoint2D targetMem = Struct::SAIPoint2D()) = 0; - + virtual bool IsBtnUp(Enum::SAMI key) = 0; + virtual bool IsBtnDown(Enum::SAMI key) = 0; + public: + int GetWheelDelta() const; + Struct::SAIPoint2D & GetPixelPosition( Struct::SAIPoint2D &targetMem = Struct::SAIPoint2D() ) const; + Struct::SAIPoint2D & GetDeltaPosition( Struct::SAIPoint2D &targetMem = Struct::SAIPoint2D() ) const; + void AddOnMousePressCallback( Typedefs::OnMousePressCallback func); void AddOnMouseDownCallback( Typedefs::OnMouseDownCallback func ); void AddOnMouseReleaseCallback( Typedefs::OnMouseReleaseCallback func ); @@ -135,7 +137,7 @@ namespace Input protected: std::vector mouseSubscribers; MouseCallbackList* callbackList; - Struct::SAIPoint2D pixelPos; + Struct::SAIPoint2D pixelPos, deltaPos; bool isCurorLocked; int wheelDelta; }; diff --git a/Code/Misc/Input/Include/Win32/Win32ApplicationKeyboard.h b/Code/Misc/Input/Include/Win32/Win32ApplicationKeyboard.h index f19f5940..98bcc0e9 100644 --- a/Code/Misc/Input/Include/Win32/Win32ApplicationKeyboard.h +++ b/Code/Misc/Input/Include/Win32/Win32ApplicationKeyboard.h @@ -4,20 +4,19 @@ #ifndef INPUT_WIN32_APPLICATION_KEBOARD_H #define INPUT_WIN32_APPLICATION_KEBOARD_H +#define NOMINMAX +#include #include "..\ApplicationKeyboard.h" -//#include namespace Input { - class Win32ApplicationKeyboard :public AplicationKeyboard + class Win32ApplicationKeyboard : public ApplicationKeyboard { public: Win32ApplicationKeyboard(); ~Win32ApplicationKeyboard(); - - private: - + void CaptureText( UINT msg, WPARAM param ); }; } diff --git a/Code/Misc/Input/Include/Win32/Win32Input.h b/Code/Misc/Input/Include/Win32/Win32Input.h index c420e3a7..b7a41ce0 100644 --- a/Code/Misc/Input/Include/Win32/Win32Input.h +++ b/Code/Misc/Input/Include/Win32/Win32Input.h @@ -8,6 +8,7 @@ #include "..\InputManager.h" #include "Win32Keyboard.h" #include "Win32Mouse.h" +#include "Win32ApplicationKeyboard.h" #include #include #include diff --git a/Code/Misc/Input/Include/Win32/Win32Mouse.h b/Code/Misc/Input/Include/Win32/Win32Mouse.h index 10c04a28..3f1c0f10 100644 --- a/Code/Misc/Input/Include/Win32/Win32Mouse.h +++ b/Code/Misc/Input/Include/Win32/Win32Mouse.h @@ -17,8 +17,6 @@ namespace Input bool IsBtnUp(Enum::SAMI key) override; bool IsBtnDown(Enum::SAMI key) override; - int GetWheelDelta() override; - Struct::SAIPoint2D GetPixelPosition(Struct::SAIPoint2D targetMem = Struct::SAIPoint2D()) override; void ProccessMouseData (bool isDown, Enum::SAMI btn, int delta, Struct::SAIPoint2D velocity, unsigned int makeCode); diff --git a/Code/Misc/Input/Input.vcxproj b/Code/Misc/Input/Input.vcxproj index 6e945f94..d930acdb 100644 --- a/Code/Misc/Input/Input.vcxproj +++ b/Code/Misc/Input/Input.vcxproj @@ -20,9 +20,11 @@ + + @@ -42,6 +44,11 @@ + + + {2ec4dded-8f75-4c86-a10b-e1e8eb29f3ee} + + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B} Input @@ -93,28 +100,32 @@ $(SolutionDir)..\External\Lib\$(ProjectName)\ $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ $(ProjectName)_$(PlatformShortName)D + $(IncludePath) $(SolutionDir)..\External\Lib\$(ProjectName)\ $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ $(ProjectName)_$(PlatformShortName) + $(IncludePath) $(SolutionDir)..\External\Lib\$(ProjectName)\ $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ $(ProjectName)_$(PlatformShortName)D + $(IncludePath) $(SolutionDir)..\External\Lib\$(ProjectName)\ $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ $(ProjectName)_$(PlatformShortName) + $(IncludePath) Level3 Disabled true - %(AdditionalIncludeDirectories) + $(SolutionDir)Misc\Utilities;%(AdditionalIncludeDirectories) true @@ -125,7 +136,7 @@ Level3 Disabled true - %(AdditionalIncludeDirectories) + $(SolutionDir)Misc\Utilities;%(AdditionalIncludeDirectories) true @@ -138,7 +149,7 @@ true true true - %(AdditionalIncludeDirectories) + $(SolutionDir)Misc\Utilities;%(AdditionalIncludeDirectories) true @@ -153,7 +164,7 @@ true true true - %(AdditionalIncludeDirectories) + $(SolutionDir)Misc\Utilities;%(AdditionalIncludeDirectories) true diff --git a/Code/Misc/Input/Source/ApplicationKeyboard.cpp b/Code/Misc/Input/Source/ApplicationKeyboard.cpp new file mode 100644 index 00000000..66ddb042 --- /dev/null +++ b/Code/Misc/Input/Source/ApplicationKeyboard.cpp @@ -0,0 +1,44 @@ +#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/Mouse.cpp b/Code/Misc/Input/Source/Mouse.cpp index 36bd8330..f0eaba3b 100644 --- a/Code/Misc/Input/Source/Mouse.cpp +++ b/Code/Misc/Input/Source/Mouse.cpp @@ -81,6 +81,7 @@ Mouse::Mouse() , wheelDelta(0) , isCurorLocked(0) , pixelPos() + , deltaPos() { } Mouse::~Mouse() @@ -88,6 +89,25 @@ Mouse::~Mouse() } +int Mouse::GetWheelDelta() const +{ + return this->wheelDelta; +} + +SAIPoint2D & Mouse::GetPixelPosition( Struct::SAIPoint2D &targetMem ) const +{ + targetMem.x = this->pixelPos.x; + targetMem.y = this->pixelPos.y; + return targetMem; +} + +SAIPoint2D & Mouse::GetDeltaPosition( Struct::SAIPoint2D &targetMem ) const +{ + targetMem.x = this->deltaPos.x; + targetMem.y = this->deltaPos.y; + return targetMem; +} + void Mouse::AddOnMousePressCallback( Typedefs::OnMousePressCallback func) { MouseCallbackList::CallbackData d; diff --git a/Code/Misc/Input/Source/Win32/Win32ApplicationKeyboard.cpp b/Code/Misc/Input/Source/Win32/Win32ApplicationKeyboard.cpp new file mode 100644 index 00000000..3b58a032 --- /dev/null +++ b/Code/Misc/Input/Source/Win32/Win32ApplicationKeyboard.cpp @@ -0,0 +1,51 @@ +#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 c6be3c9d..28032070 100644 --- a/Code/Misc/Input/Source/Win32/Win32Input.cpp +++ b/Code/Misc/Input/Source/Win32/Win32Input.cpp @@ -775,6 +775,10 @@ InputObject* Win32Input::CreateDevice(const SAIType inputType, Typedefs::WindowH } } break; + + case SAIType_ApplicationKeyboard: + val = new Win32ApplicationKeyboard(); + break; } return val; diff --git a/Code/Misc/Input/Source/Win32/Win32Mouse.cpp b/Code/Misc/Input/Source/Win32/Win32Mouse.cpp index ef6d9edf..8bf22972 100644 --- a/Code/Misc/Input/Source/Win32/Win32Mouse.cpp +++ b/Code/Misc/Input/Source/Win32/Win32Mouse.cpp @@ -30,22 +30,13 @@ bool Win32Mouse::IsBtnDown(Enum::SAMI btn) return this->buttons[btn].isDown; } -int Win32Mouse::GetWheelDelta() -{ - return this->wheelDelta; -} -Struct::SAIPoint2D Win32Mouse::GetPixelPosition(Struct::SAIPoint2D targetMem) -{ - targetMem = this->pixelPos; - return targetMem; -} void Win32Mouse::ProccessMouseData (bool isUp, Enum::SAMI btn, int delta, Struct::SAIPoint2D velocity, unsigned int makeCode) { if(velocity.Length() != 0) { - this->pixelPos.x += velocity.x; - this->pixelPos.y += velocity.y; + this->pixelPos.x += this->deltaPos.x = velocity.x; + this->pixelPos.y += this->deltaPos.y = velocity.y; for (unsigned int i = 0; i < this->mouseSubscribers.size(); i++) {