windows: Mouse wheel coordinates fix (#9749)

mouse scroll wasn't working unless the window was maximized or in the
top left corner because the Windows wheel events give screen coordinates

Release Notes:

- N/A
This commit is contained in:
Ezekiel Warren
2024-03-25 11:14:51 -07:00
committed by GitHub
parent 2646ed08e7
commit 78dc458231
+12 -6
View File
@@ -641,11 +641,14 @@ impl WindowsWindowInner {
if let Some(callback) = callbacks.input.as_mut() {
let wheel_distance = (wparam.signed_hiword() as f32 / WHEEL_DELTA as f32)
* self.platform_inner.settings.borrow().wheel_scroll_lines as f32;
let x = lparam.signed_loword() as f32;
let y = lparam.signed_hiword() as f32;
let mut cursor_point = POINT {
x: lparam.signed_loword().into(),
y: lparam.signed_hiword().into(),
};
unsafe { ScreenToClient(self.hwnd, &mut cursor_point) };
let scale_factor = self.scale_factor.get();
let event = crate::ScrollWheelEvent {
position: logical_point(x, y, scale_factor),
position: logical_point(cursor_point.x as f32, cursor_point.y as f32, scale_factor),
delta: ScrollDelta::Lines(Point {
x: 0.0,
y: wheel_distance,
@@ -664,11 +667,14 @@ impl WindowsWindowInner {
if let Some(callback) = callbacks.input.as_mut() {
let wheel_distance = (wparam.signed_hiword() as f32 / WHEEL_DELTA as f32)
* self.platform_inner.settings.borrow().wheel_scroll_chars as f32;
let x = lparam.signed_loword() as f32;
let y = lparam.signed_hiword() as f32;
let mut cursor_point = POINT {
x: lparam.signed_loword().into(),
y: lparam.signed_hiword().into(),
};
unsafe { ScreenToClient(self.hwnd, &mut cursor_point) };
let scale_factor = self.scale_factor.get();
let event = crate::ScrollWheelEvent {
position: logical_point(x, y, scale_factor),
position: logical_point(cursor_point.x as f32, cursor_point.y as f32, scale_factor),
delta: ScrollDelta::Lines(Point {
x: wheel_distance,
y: 0.0,