From 93f05ead38228ad7d204fb0f779b156aa600867a Mon Sep 17 00:00:00 2001 From: Nickito12 Date: Mon, 17 Jul 2017 02:57:21 -0300 Subject: [PATCH] Fix resized window mouse position on windows --- src/InputFilter.cpp | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/src/InputFilter.cpp b/src/InputFilter.cpp index f9efe33a1f..57f42978da 100644 --- a/src/InputFilter.cpp +++ b/src/InputFilter.cpp @@ -12,7 +12,9 @@ // for mouse stuff: -aj #include "PrefsManager.h" #include "ScreenDimensions.h" - +#ifdef _WINDOWS +#include "archutils/Win32/GraphicsWindow.h" +#endif #include static const char *InputEventTypeNames[] = { @@ -483,18 +485,35 @@ class LunaInputFilter: public Luna public: // todo: Should the input be locked to the theme's width/height instead of // the window's width/height? -aj - static int GetMouseX( T* p, lua_State *L ){ + static int GetMouseX(T* p, lua_State *L) { float fX = p->GetCursorX(); // Scale input to the theme's dimensions - fX = SCALE( fX, 0, (PREFSMAN->m_iDisplayHeight * PREFSMAN->m_fDisplayAspectRatio), SCREEN_LEFT, SCREEN_RIGHT ); - lua_pushnumber( L, fX ); + ScreenDimensions::ReloadScreenDimensions(); +#ifdef _WINDOWS + RECT rect; + GetClientRect(GraphicsWindow::GetHwnd(), &rect); + int iWidth = rect.right - rect.left; + fX = SCALE(fX, 0, iWidth, SCREEN_LEFT, SCREEN_RIGHT); +#else + fX = SCALE(fX, 0, (PREFSMAN->m_iDisplayHeight * PREFSMAN->m_fDisplayAspectRatio), SCREEN_LEFT, SCREEN_RIGHT); +#endif + lua_pushnumber(L, fX); return 1; } - static int GetMouseY( T* p, lua_State *L ){ + static int GetMouseY(T* p, lua_State *L) { float fY = p->GetCursorY(); // Scale input to the theme's dimensions - fY = SCALE( fY, 0, PREFSMAN->m_iDisplayHeight, SCREEN_TOP, SCREEN_BOTTOM ); - lua_pushnumber( L, fY ); + ScreenDimensions::ReloadScreenDimensions(); +#ifdef _WINDOWS + RECT rect; + GetClientRect(GraphicsWindow::GetHwnd(), &rect); + int iHeight = rect.bottom - rect.top; + + fY = SCALE(fY, 0, iHeight, SCREEN_TOP, SCREEN_BOTTOM); +#else + fY = SCALE(fY, 0, PREFSMAN->m_iDisplayHeight, SCREEN_TOP, SCREEN_BOTTOM); +#endif + lua_pushnumber(L, fY); return 1; } static int GetMouseWheel( T* p, lua_State *L ){