Use _keyboard_installed and _mouse_installed flags to trigger keyboard and mouse events in directx_wnd_proc().

This commit is contained in:
David Capello 2010-10-30 19:44:39 -03:00
parent 623eab27a8
commit 579d652f07

View File

@ -312,80 +312,94 @@ static LRESULT CALLBACK directx_wnd_proc(HWND wnd, UINT message, WPARAM wparam,
break; break;
case WM_LBUTTONDOWN: case WM_LBUTTONDOWN:
case WM_LBUTTONUP: { case WM_LBUTTONUP:
int mx = GET_X_LPARAM(lparam); if (_mouse_installed) {
int my = GET_Y_LPARAM(lparam); int mx = GET_X_LPARAM(lparam);
BOOL down = (message == WM_LBUTTONDOWN); int my = GET_Y_LPARAM(lparam);
_al_win_mouse_handle_button(wnd, 1, down, mx, my, TRUE); BOOL down = (message == WM_LBUTTONDOWN);
break; _al_win_mouse_handle_button(wnd, 1, down, mx, my, TRUE);
} }
break;
case WM_MBUTTONDOWN: case WM_MBUTTONDOWN:
case WM_MBUTTONUP: { case WM_MBUTTONUP:
int mx = GET_X_LPARAM(lparam); if (_mouse_installed) {
int my = GET_Y_LPARAM(lparam); int mx = GET_X_LPARAM(lparam);
BOOL down = (message == WM_MBUTTONDOWN); int my = GET_Y_LPARAM(lparam);
_al_win_mouse_handle_button(wnd, 3, down, mx, my, TRUE); BOOL down = (message == WM_MBUTTONDOWN);
break; _al_win_mouse_handle_button(wnd, 3, down, mx, my, TRUE);
} }
break;
case WM_RBUTTONDOWN: case WM_RBUTTONDOWN:
case WM_RBUTTONUP: { case WM_RBUTTONUP:
int mx = GET_X_LPARAM(lparam); if (_mouse_installed) {
int my = GET_Y_LPARAM(lparam); int mx = GET_X_LPARAM(lparam);
BOOL down = (message == WM_RBUTTONDOWN); int my = GET_Y_LPARAM(lparam);
_al_win_mouse_handle_button(wnd, 2, down, mx, my, TRUE); BOOL down = (message == WM_RBUTTONDOWN);
break; _al_win_mouse_handle_button(wnd, 2, down, mx, my, TRUE);
} }
break;
case WM_XBUTTONDOWN: case WM_XBUTTONDOWN:
case WM_XBUTTONUP: { case WM_XBUTTONUP:
int mx = GET_X_LPARAM(lparam); if (_mouse_installed) {
int my = GET_Y_LPARAM(lparam); int mx = GET_X_LPARAM(lparam);
int button = HIWORD(wparam); int my = GET_Y_LPARAM(lparam);
BOOL down = (message == WM_XBUTTONDOWN); int button = HIWORD(wparam);
if (button == XBUTTON1) BOOL down = (message == WM_XBUTTONDOWN);
_al_win_mouse_handle_button(wnd, 4, down, mx, my, TRUE); if (button == XBUTTON1)
else if (button == XBUTTON2) _al_win_mouse_handle_button(wnd, 4, down, mx, my, TRUE);
_al_win_mouse_handle_button(wnd, 5, down, mx, my, TRUE); else if (button == XBUTTON2)
return TRUE; _al_win_mouse_handle_button(wnd, 5, down, mx, my, TRUE);
} return TRUE;
}
break;
case WM_MOUSEWHEEL: { case WM_MOUSEWHEEL:
int d = GET_WHEEL_DELTA_WPARAM(wparam); if (_mouse_installed) {
_al_win_mouse_handle_wheel(wnd, d / WHEEL_DELTA, FALSE); int d = GET_WHEEL_DELTA_WPARAM(wparam);
return TRUE; _al_win_mouse_handle_wheel(wnd, d / WHEEL_DELTA, FALSE);
} return TRUE;
}
break;
case WM_MOUSEMOVE: { case WM_MOUSEMOVE:
POINTS p = MAKEPOINTS(lparam); if (_mouse_installed) {
_al_win_mouse_handle_move(wnd, p.x, p.y); POINTS p = MAKEPOINTS(lparam);
_al_win_mouse_handle_move(wnd, p.x, p.y);
}
break; break;
}
case WM_SYSKEYDOWN: { case WM_SYSKEYDOWN:
int vcode = wparam; if (_keyboard_installed) {
BOOL repeated = (lparam >> 30) & 0x1; int vcode = wparam;
_al_win_kbd_handle_key_press(0, vcode, repeated); BOOL repeated = (lparam >> 30) & 0x1;
return 0; _al_win_kbd_handle_key_press(0, vcode, repeated);
} return 0;
}
break;
case WM_KEYDOWN: { case WM_KEYDOWN:
int vcode = wparam; if (_keyboard_installed) {
int scode = (lparam >> 16) & 0xff; int vcode = wparam;
BOOL repeated = (lparam >> 30) & 0x1; int scode = (lparam >> 16) & 0xff;
/* We can't use TranslateMessage() because we don't know if it will BOOL repeated = (lparam >> 30) & 0x1;
produce a WM_CHAR or not. */ /* We can't use TranslateMessage() because we don't know if it will
_al_win_kbd_handle_key_press(scode, vcode, repeated); produce a WM_CHAR or not. */
return 0; _al_win_kbd_handle_key_press(scode, vcode, repeated);
} return 0;
}
break;
case WM_SYSKEYUP: case WM_SYSKEYUP:
case WM_KEYUP: { case WM_KEYUP:
int vcode = wparam; if (_keyboard_installed) {
_al_win_kbd_handle_key_release(vcode); int vcode = wparam;
return 0; _al_win_kbd_handle_key_release(vcode);
} return 0;
}
break;
} }