Send a mouse control system command
| 373 | |
| 374 | // Send a mouse control system command |
| 375 | void CMouseControl::SendMouseCommand (long x, long y, int flags) |
| 376 | { |
| 377 | #if defined(WIN32) |
| 378 | INPUT ip; |
| 379 | |
| 380 | // Allways define MOUSEEVENTF_MOVE flag, other flags are coincident |
| 381 | // with native flags under windows |
| 382 | flags|= MOUSEEVENTF_MOVE; |
| 383 | |
| 384 | if (flags & MOUSE_MOVE_ABS) { |
| 385 | // Normalize absolute motion |
| 386 | x= (x * 65535) / (m_ScreenWidth - 1); |
| 387 | y= (y * 65535) / (m_ScreenHeight - 1); |
| 388 | } |
| 389 | |
| 390 | /* Need to swap buttons? */ |
| 391 | if (flags & (MOUSE_LEFTDOWN | MOUSE_LEFTUP | MOUSE_RIGHTDOWN | MOUSE_RIGHTUP) && |
| 392 | ::GetSystemMetrics(SM_SWAPBUTTON)) { |
| 393 | if (flags & MOUSE_LEFTDOWN) { |
| 394 | flags &= ~MOUSE_LEFTDOWN; |
| 395 | flags |= MOUSE_RIGHTDOWN; |
| 396 | } |
| 397 | else if (flags & MOUSE_RIGHTDOWN) { |
| 398 | flags &= ~MOUSE_RIGHTDOWN; |
| 399 | flags |= MOUSE_LEFTDOWN; |
| 400 | } |
| 401 | if (flags & MOUSE_LEFTUP) { |
| 402 | flags &= ~MOUSE_LEFTUP; |
| 403 | flags |= MOUSE_RIGHTUP; |
| 404 | } |
| 405 | else if (flags & MOUSE_RIGHTUP) { |
| 406 | flags &= ~MOUSE_RIGHTUP; |
| 407 | flags |= MOUSE_LEFTUP; |
| 408 | } |
| 409 | } |
| 410 | |
| 411 | ip.type = INPUT_MOUSE; |
| 412 | ip.mi.dwFlags = flags; |
| 413 | ip.mi.mouseData = 0; |
| 414 | ip.mi.dwExtraInfo = MOUSE_EXTRA_INFO; |
| 415 | ip.mi.time = 0; |
| 416 | ip.mi.dx= x; |
| 417 | ip.mi.dy= y; |
| 418 | |
| 419 | SendInput(1, &ip, sizeof(ip)); |
| 420 | #else |
| 421 | if (flags== MOUSE_MOVE_ABS) |
| 422 | // Absolute motion |
| 423 | XTestFakeMotionEvent( |
| 424 | static_cast<Display*>(m_pDisplay), |
| 425 | DefaultScreen(static_cast<Display*>(m_pDisplay)), |
| 426 | x, y, |
| 427 | CurrentTime |
| 428 | ); |
| 429 | else if (flags== MOUSE_MOVE_REL) |
| 430 | // Relative motion |
| 431 | XTestFakeRelativeMotionEvent(static_cast<Display*>(m_pDisplay), x, y, CurrentTime); |
| 432 | else |
nothing calls this directly
no outgoing calls
no test coverage detected