【问题标题】:How to set "arrow+watch" mouse cursor, using Xlib?如何使用 Xlib 设置“箭头+手表”鼠标光标?
【发布时间】:2015-10-08 08:55:16
【问题描述】:

我注意到,使用 XCreateFontCursor,然后使用带有光标代码 XC_watch (150) 的 XDefineCursor 实际上不是将光标设置为丑陋的 Xlib 光标,而是设置为默认的系统动画沙漏光标。

对我来说,这表明某些系统(窗口管理器?)拦截 xlib 调用并透明地更改光标。

但是如果没有在 XLib 常量中定义,我如何将光标设置为“箭头+沙漏”光标?

【问题讨论】:

    标签: linux xlib


    【解决方案1】:

    您要查找的内容称为 光标主题(它扩展了 X 光标字体的内容,但并不总是以兼容的方式)。对于一些讨论:

    这是用户级别(您可以在其中看到动画光标)。 X 服务器使用Xcursor library 覆盖旧的位图光标行为,以提供颜色和其他有趣的图像相关功能。文档是...poor,本质上要求其他开发人员通过阅读源代码来获取大部分信息(就像我在 xterm 中所做的那样——查找 "XCursor")。

    这是指向源代码的指针:

    http://cgit.freedesktop.org/xorg/lib/libXcursor/

    【讨论】:

    • 好吧,也许我没有正确解释。我正在编写程序并使用 xlib 来创建窗口和其他 GUI 对象。那么,问题是如何在我自己的程序中使用这个游标?不是如何设置系统鼠标光标主题。
    • 正如@patthoyts 指出的那样,有一个 Xcursor 库(由 X 服务器使用)可以完成这项工作。在顶层(我指出的地方)提到了动画光标,您需要了解它的使用方式。
    • 我是否应该明白通过 XLib 设置“箭头+沙漏”光标是不可能的,我应该使用对 XCursor 库的调用来代替?
    • 这可能有效(但您必须研究库的源代码才能了解如何执行此操作,因为文档无济于事)。
    【解决方案2】:

    存在从光标形状定义(数字)到光标主题提供的图像的映射。这似乎由Xcursor 处理。查看 Xcursor.h 文件有这样的注释:

    /*
     * This is the function called by Xlib when attempting to
     * load cursors from XCreateGlyphCursor.  The interface must
     * not change as Xlib loads 'libXcursor.so' instead of
     * a specific major version
     */
    

    这表明XcursorTryShapeCursor 函数参与将对XCreateFontCursor 的调用转换为要加载的图像文件。

    因此,用于满足 Xlib 调用的图标文件由 Xcursor 提供的图标主题管理。 XcursorSetTheme 可用于选择替代光标主题,但除非原始丑陋的 X11 光标已作为主题安装,否则您无法以这种方式获得内置光标。

    但是,Xcursor 手册中提到了XCURSOR_PATH 环境变量。如果将其设置为没有光标主题的路径,则所有内容都默认为内置的丑陋光标。例如:env XCURSOR_PATH=/tmp ./test_application

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      相关资源
      最近更新 更多