在 X11 中锁定鼠标光标
Locking mouse cursor in X11
我正在尝试移动鼠标光标并将其锁定到位,以计算它在被用户移动后的增量位置。我正在使用 X11 和 XWarpPointer()
函数。我在另一个线程中发现了类似的问题,并按照它进行了操作,但是没有用。我什至查看了 SDL 源代码,但仍然一无所获。主要问题是我设置了鼠标的位置然后用户移动它后,鼠标又回到了原来的位置(在使用XWarpPointer
之前)。
void sp::Mouse::getDeltaMousePosition(int *posX, int *posY)
{
if(!m_firstEnter)
{
getMousePosition(&m_lastX, &m_lastY);
m_firstEnter = true;
}
int tempX, tempY;
getMousePosition(&tempX, &tempY);
*posX = tempX - m_lastX;
*posY = tempY - m_lastY;
Window root_window = XRootWindow(ptr_display, 0);
SelectInput(ptr_display, root_window, KeyReleaseMask);
XWarpPointer(ptr_display, None, root_window, 0, 0, 0, 0, m_screenCenterX, m_screenCenterY);
XFlush(ptr_display);
m_lastX = m_screenCenterX;
m_lastY = m_screenCenterY;
}
我尝试在装有 Linux 系统的电脑上编译代码,它成功了。于我之前
正在虚拟机中编译它,所以我猜基本系统在鼠标方面具有优先权。
我正在尝试移动鼠标光标并将其锁定到位,以计算它在被用户移动后的增量位置。我正在使用 X11 和 XWarpPointer()
函数。我在另一个线程中发现了类似的问题,并按照它进行了操作,但是没有用。我什至查看了 SDL 源代码,但仍然一无所获。主要问题是我设置了鼠标的位置然后用户移动它后,鼠标又回到了原来的位置(在使用XWarpPointer
之前)。
void sp::Mouse::getDeltaMousePosition(int *posX, int *posY)
{
if(!m_firstEnter)
{
getMousePosition(&m_lastX, &m_lastY);
m_firstEnter = true;
}
int tempX, tempY;
getMousePosition(&tempX, &tempY);
*posX = tempX - m_lastX;
*posY = tempY - m_lastY;
Window root_window = XRootWindow(ptr_display, 0);
SelectInput(ptr_display, root_window, KeyReleaseMask);
XWarpPointer(ptr_display, None, root_window, 0, 0, 0, 0, m_screenCenterX, m_screenCenterY);
XFlush(ptr_display);
m_lastX = m_screenCenterX;
m_lastY = m_screenCenterY;
}
我尝试在装有 Linux 系统的电脑上编译代码,它成功了。于我之前 正在虚拟机中编译它,所以我猜基本系统在鼠标方面具有优先权。