Modifications to raw input so the handling of absolute coordinates is more correct.
This commit is contained in:
parent
106e5a8d5e
commit
2db494267b
2 changed files with 28 additions and 5 deletions
|
@ -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)
|
||||||
|
|
|
@ -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 };
|
||||||
|
|
Loading…
Reference in a new issue