diff --git a/source/Platform/Win32/Win32Mouse.cpp b/source/Platform/Win32/Win32Mouse.cpp index 74b2d83..4fa338d 100644 --- a/source/Platform/Win32/Win32Mouse.cpp +++ b/source/Platform/Win32/Win32Mouse.cpp @@ -33,6 +33,11 @@ Vector2f Win32Mouse::getPosition() const return m_position; } +Vector2f Win32Mouse::getAbsPosition() const +{ + return m_abs_position; +} + bool Win32Mouse::isButtonDown(Mouse::Button button) const { int btn; @@ -51,6 +56,20 @@ bool Win32Mouse::isButtonDown(Mouse::Button button) const void Win32Mouse::update(InputModule *input) { + HWND handle; + POINT p; + + // Update absolute position + GetCursorPos(&p); + m_abs_position = Vector2f(p.x, p.y); + + // Update relative position + handle = ::GetCapture(); + if (handle) { + // Translate position to focued window. + ScreenToClient(handle, &p); + m_position = Vector2f(p.x, p.y); + } } bool Win32Mouse::handleMessage(MSG msg, Event& event) diff --git a/source/Platform/Win32/Win32Mouse.h b/source/Platform/Win32/Win32Mouse.h index 730e01c..b304aa7 100644 --- a/source/Platform/Win32/Win32Mouse.h +++ b/source/Platform/Win32/Win32Mouse.h @@ -18,6 +18,8 @@ public : // Get mouse position virtual Vector2f getPosition() const; + virtual Vector2f getAbsPosition() const; + virtual bool isButtonDown(Mouse::Button button) const; static bool handleMessage(MSG msg, Event& event); @@ -27,7 +29,11 @@ protected : virtual void update(InputModule *input); protected : + // position in relative (focused window) coordinates. Vector2f m_position; + + // position in absolute (screen) coordinates. + Vector2f m_abs_position; }; } // namespace sp