1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-24 01:54:22 +00:00

WindowsHooks: Use appropriate dpi awareness when forwarding mouse wheel messages

This commit is contained in:
reuk 2024-01-04 14:20:19 +00:00
parent 46b90d9ea0
commit 5ee9d24e36
No known key found for this signature in database
GPG key ID: FCB43929F012EE5C
2 changed files with 12 additions and 11 deletions

View file

@ -3196,7 +3196,7 @@ private:
doMouseEvent (getCurrentMousePos(), MouseInputSource::defaultPressure);
}
ComponentPeer* findPeerUnderMouse (Point<float>& localPos)
std::tuple<ComponentPeer*, Point<float>> findPeerUnderMouse()
{
auto currentMousePos = getPOINTFromLParam ((LPARAM) GetMessagePos());
@ -3207,8 +3207,7 @@ private:
if (peer == nullptr)
peer = this;
localPos = peer->globalToLocal (convertPhysicalScreenPointToLogical (pointFromPOINT (currentMousePos), hwnd).toFloat());
return peer;
return std::tuple (peer, peer->globalToLocal (convertPhysicalScreenPointToLogical (pointFromPOINT (currentMousePos), hwnd).toFloat()));
}
static MouseInputSource::InputSourceType getPointerType (WPARAM wParam)
@ -3242,9 +3241,7 @@ private:
wheel.isSmooth = false;
wheel.isInertial = false;
Point<float> localPos;
if (auto* peer = findPeerUnderMouse (localPos))
if (const auto [peer, localPos] = findPeerUnderMouse(); peer != nullptr)
peer->handleMouseWheel (getPointerType (wParam), localPos, getMouseEventTime(), wheel);
}
@ -3257,9 +3254,8 @@ private:
if (getGestureInfo != nullptr && getGestureInfo ((HGESTUREINFO) lParam, &gi))
{
updateKeyModifiers();
Point<float> localPos;
if (auto* peer = findPeerUnderMouse (localPos))
if (const auto [peer, localPos] = findPeerUnderMouse(); peer != nullptr)
{
switch (gi.dwID)
{

View file

@ -55,9 +55,14 @@ private:
auto& hs = *(MOUSEHOOKSTRUCTEX_*) lParam;
if (auto* comp = Desktop::getInstance().findComponentAt ({ hs.pt.x, hs.pt.y }))
if (comp->getWindowHandle() != nullptr)
return PostMessage ((HWND) comp->getWindowHandle(), WM_MOUSEWHEEL,
hs.mouseData & 0xffff0000, (hs.pt.x & 0xffff) | (hs.pt.y << 16));
{
if (auto* target = static_cast<HWND> (comp->getWindowHandle()))
{
const ScopedThreadDPIAwarenessSetter scope { target };
return PostMessage (target, WM_MOUSEWHEEL,
hs.mouseData & 0xffff0000, MAKELPARAM (hs.pt.x, hs.pt.y));
}
}
}
return CallNextHookEx (getSingleton()->mouseWheelHook, nCode, wParam, lParam);