From cf3c86b32f7ceb6f4476f3b46f92438a03bfe070 Mon Sep 17 00:00:00 2001 From: Colin Cornaby Date: Wed, 13 Nov 2024 21:27:36 -0500 Subject: [PATCH] Send scaled mouse coordinates from Apple client. Co-authored-by: Adam Johnson --- .../Plasma/Apps/plClient/Mac-Cocoa/PLSView.mm | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) 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); }