历史
传统上,光标在 Linux 中一直是一团糟。
X11 光标字体 从远古时代流传下来,给我们带来了诸如 gumby () 或 trek (
) 之类的瑰宝。不幸的是,这种情况通过 GdkCursorType 枚举和
gdk_cursor_new()
函数被冻结到了 GDK api 中。
后来,出现了 Xcursor 库。它发明了自己的图像格式来存储光标,并为我们带来了光标主题,但并没有回答“我的光标主题应该提供哪些光标?”这个问题。
由于没有官方推荐的光标名称列表,光标主题经常会提供在野外发现的所有光标名称变体。例如,这里是 oxygen 光标主题中包含的光标列表。如果您感到好奇,此列表中的十六进制字符串是 Xcursor 的一个巧妙技巧,用于在核心 X11 应用程序下改装主题光标,这些应用程序使用上面提到的光标字体的光标。
CSS 来救援
大约一年前,我们决定最终改进 GTK+ 光标的故事。值得庆幸的是,CSS3 规范包含一个相当不错的 光标名称列表,可以合理地预期在各个平台上可用。
由于 GdkCursorType 枚举包含太多无意义的东西且不易扩展,我们决定使
gdk_cursor_new_from_name()
成为获取光标的推荐 API。此函数的文档现在列出了 CSS 光标名称(请点击上面的链接查看),并且各个 GDK 后端中的光标处理代码会尽力为所有这些名称提供有意义的光标。
在某些平台(例如使用随机光标主题的 X11)上,如果主题中不存在某个光标,我们可能不得不回退到默认的箭头光标。作为光标代码的全面改进的一部分,Windows 后端增加了对光标主题的支持。
GTK+ 本身现在完全使用 gdk_cursor_new_from_name()
以及标准光标名称。gtk3-demo 包含一个演示,显示所有标准光标并让您尝试它们。上面的屏幕截图显示了它。
此处描述的更改已进入 GTK+ 3.18,该版本大约在 9 个月前发布。
您在应用程序中应该做什么
很可能,您无需做任何事情!GTK+ 小部件自行使用合适的光标,您无需任何额外的工作即可从中受益。
如果您的应用程序出于任何原因正在创建自己的光标,则应仔细检查上面显示的某个标准光标是否适合您。使用标准光标可确保无论您的应用程序在哪个平台上运行以及用户选择了哪个光标主题,您都将获得合适的光标。
请使用 gdk_cursor_new_from_name()
生成您的主题光标,因为这现在是此任务的首选 API。