Modifications to raw input so the handling of absolute coordinates is more correct.

This commit is contained in:
Juan Linietsky 2018-08-22 21:27:15 -03:00
parent 106e5a8d5e
commit 2db494267b
2 changed files with 28 additions and 5 deletions

View file

@ -449,12 +449,36 @@ LRESULT OS_Windows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
input->set_mouse_position(c); input->set_mouse_position(c);
mm->set_speed(Vector2(0, 0)); mm->set_speed(Vector2(0, 0));
if (raw->data.mouse.usFlags == 0) { if (raw->data.mouse.usFlags ==MOUSE_MOVE_RELATIVE) {
mm->set_relative(Vector2(raw->data.mouse.lLastX, raw->data.mouse.lLastY)); mm->set_relative(Vector2(raw->data.mouse.lLastX, raw->data.mouse.lLastY));
} else if (raw->data.mouse.usFlags == 1) { } else if (raw->data.mouse.usFlags == MOUSE_MOVE_ABSOLUTE) {
mm->set_relative(Vector2(raw->data.mouse.lLastX, raw->data.mouse.lLastY) - last_absolute_position);
last_absolute_position = Vector2(raw->data.mouse.lLastX, raw->data.mouse.lLastY); int nScreenWidth = GetSystemMetrics(SM_CXVIRTUALSCREEN);
int nScreenHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN);
int nScreenLeft = GetSystemMetrics(SM_XVIRTUALSCREEN);
int nScreenTop = GetSystemMetrics(SM_YVIRTUALSCREEN);
Vector2 abs_pos(
(double(raw->data.mouse.lLastX) - 65536.0 / (nScreenWidth) ) * nScreenWidth / 65536.0 + nScreenLeft,
(double(raw->data.mouse.lLastY) - 65536.0 / (nScreenHeight) ) * nScreenHeight / 65536.0 + nScreenTop
);
POINT coords; //client coords
coords.x = abs_pos.x;
coords.y = abs_pos.y;
ScreenToClient(hWnd, &coords);
mm->set_relative(Vector2(coords.x - old_x, coords.y - old_y ));
old_x = coords.x;
old_y = coords.y;
/*Input.mi.dx = (int)((((double)(pos.x)-nScreenLeft) * 65536) / nScreenWidth + 65536 / (nScreenWidth));
Input.mi.dy = (int)((((double)(pos.y)-nScreenTop) * 65536) / nScreenHeight + 65536 / (nScreenHeight));
*/
} }
if (window_has_focus && main_loop) if (window_has_focus && main_loop)

View file

@ -125,7 +125,6 @@ class OS_Windows : public OS {
bool force_quit; bool force_quit;
bool window_has_focus; bool window_has_focus;
uint32_t last_button_state; uint32_t last_button_state;
Vector2 last_absolute_position;
bool use_raw_input; bool use_raw_input;
HCURSOR cursors[CURSOR_MAX] = { NULL }; HCURSOR cursors[CURSOR_MAX] = { NULL };