【问题标题】:Locking mouse cursor in X11在 X11 中锁定鼠标光标
【发布时间】:2020-10-04 00:23:05
【问题描述】:

我正在尝试移动鼠标光标并将其锁定到位,以计算用户移动后的增量位置。我正在使用 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;
}

【问题讨论】:

  • 这不是 XWarpPointer 应该做的吗?你还写了 XWrapPointer。是不是一样的功能?
  • 是的,我当然是指 XWarpPointer。我只是重写了代码,因为它在另一台电脑上。我在网上找到了一些示例代码。在 XWarpPointer 调用后的示例代码中,光标移动但在我移动鼠标后又回到原来的位置。我不知道发生了什么。
  • 这里有一个简短的视频来介绍这个问题link

标签: c++ mouse x11


【解决方案1】:

我尝试在一台装有 Linux 系统的电脑上编译代码,它成功了。于我之前 是在虚拟机中编译的,所以我猜测基本系统在鼠标方面具有优先权。

【讨论】:

    猜你喜欢
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多