diff --git a/Sources/Plasma/Apps/plClient/Mac-Cocoa/PLSView.mm b/Sources/Plasma/Apps/plClient/Mac-Cocoa/PLSView.mm index a2a89b74d7..80efbe9ed0 100644 --- a/Sources/Plasma/Apps/plClient/Mac-Cocoa/PLSView.mm +++ b/Sources/Plasma/Apps/plClient/Mac-Cocoa/PLSView.mm @@ -191,18 +191,19 @@ - (void)updateClientMouseLocation:(NSEvent*)event CGPoint viewLocation = [self convertPoint:windowLocation fromView:nil]; NSRect windowViewBounds = self.bounds; - CGFloat deltaX = (windowLocation.x) / windowViewBounds.size.width; - CGFloat deltaY = + CGFloat xNormal = (windowLocation.x) / windowViewBounds.size.width; + CGFloat yNormal = (windowViewBounds.size.height - windowLocation.y) / windowViewBounds.size.height; plIMouseXEventMsg* pXMsg = new plIMouseXEventMsg; plIMouseYEventMsg* pYMsg = new plIMouseYEventMsg; - pXMsg->fWx = viewLocation.x; - pXMsg->fX = deltaX; + pXMsg->fX = xNormal; + pYMsg->fY = yNormal; - pYMsg->fWy = (windowViewBounds.size.height - windowLocation.y); - pYMsg->fY = deltaY; + // Plasma internally uses input coords as display coords + pXMsg->fWx = viewLocation.x * self.window.screen.backingScaleFactor; + pYMsg->fWy = (windowViewBounds.size.height - windowLocation.y) * self.window.screen.backingScaleFactor; @synchronized(self.layer) { if (self.inputManager) { @@ -219,7 +220,7 @@ - (void)updateClientMouseLocation:(NSEvent*)event newWindowLocation.x = CGRectGetMidX(self.window.contentView.bounds); // macOS won't generate a new message on warp, need to tell Plasma by hand - pXMsg->fWx = newWindowLocation.x; + pXMsg->fWx = newWindowLocation.x * self.window.screen.backingScaleFactor;; pXMsg->fX = 0.5f; self.inputManager->MsgReceive(pXMsg); } @@ -228,7 +229,7 @@ - (void)updateClientMouseLocation:(NSEvent*)event newWindowLocation.y = CGRectGetMidY(self.window.contentView.bounds); // macOS won't generate a new message on warp, need to tell Plasma by hand - pYMsg->fWy = newWindowLocation.y; + pYMsg->fWy = newWindowLocation.y * self.window.screen.backingScaleFactor;; pYMsg->fY = 0.5f; self.inputManager->MsgReceive(pYMsg); } diff --git a/Sources/Plasma/PubUtilLib/plInputCore/plInputDevice.cpp b/Sources/Plasma/PubUtilLib/plInputCore/plInputDevice.cpp index 614c20fe40..ede9b29834 100644 --- a/Sources/Plasma/PubUtilLib/plInputCore/plInputDevice.cpp +++ b/Sources/Plasma/PubUtilLib/plInputCore/plInputDevice.cpp @@ -492,7 +492,7 @@ bool plMouseDevice::MsgReceive(plMessage* msg) fXPos = pXMsg->fX; SetCursorX(fXPos); - fWXPos = pXMsg->fWx * fScale; + fWXPos = pXMsg->fWx; return true; } @@ -529,7 +529,7 @@ bool plMouseDevice::MsgReceive(plMessage* msg) else fYPos = pYMsg->fY; - fWYPos = pYMsg->fWy * fScale; + fWYPos = pYMsg->fWy; SetCursorY(fYPos); return true; diff --git a/Sources/Plasma/PubUtilLib/plInputCore/plInputManager.cpp b/Sources/Plasma/PubUtilLib/plInputCore/plInputManager.cpp index 4ebc51d90d..617d20d587 100644 --- a/Sources/Plasma/PubUtilLib/plInputCore/plInputManager.cpp +++ b/Sources/Plasma/PubUtilLib/plInputCore/plInputManager.cpp @@ -42,6 +42,9 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com // plInputManager.cpp #include "HeadSpin.h" #include "hsWindows.h" +#ifdef WIN32 +# include +#endif #include "plInputManager.h" #include "plPipeline.h" @@ -294,10 +297,10 @@ void plInputManager::HandleWin32ControlEvent(UINT message, WPARAM Wparam, LPARAM plIMouseYEventMsg* pYMsg = new plIMouseYEventMsg; plIMouseBEventMsg* pBMsg = new plIMouseBEventMsg; - pXMsg->fWx = LOWORD(Lparam); - pXMsg->fX = (float)LOWORD(Lparam) / (float)rect.right; - pYMsg->fWy = HIWORD(Lparam); - pYMsg->fY = (float)HIWORD(Lparam) / (float)rect.bottom; + pXMsg->fWx = GET_X_LPARAM(Lparam); + pXMsg->fX = (float)GET_X_LPARAM(Lparam) / (float)rect.right; + pYMsg->fWy = GET_Y_LPARAM(Lparam); + pYMsg->fY = (float)GET_Y_LPARAM(Lparam) / (float)rect.bottom; // Apply mouse scale // pXMsg->fX *= fMouseScale;