历史
在 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 包含一个演示,显示所有标准光标并让您尝试它们。上面的屏幕截图显示了它。
此处描述的更改已进入大约 9 个月前发布的 GTK+ 3.18。
您应该在应用程序中执行的操作
很可能,您不必执行任何操作!GTK+ 小部件会自行使用合适的光标,您可以从中受益而无需任何额外的工作。
如果您的应用程序出于某种原因正在创建自己的光标,则应仔细检查上面显示的标准光标之一是否适合您。使用标准光标可确保无论您的应用程序在哪个平台上运行以及无论用户选择了哪个光标主题,您都将获得合适的光标。
请使用 gdk_cursor_new_from_name()
生成您的主题光标,因为这现在是此任务的首选 API。
非常感谢您提供的信息。希望能看到更多。
确实很有趣的信息。我很想知道它与其他“平台”及其处理光标的方式相比如何……
不错的 API,最近也用于 Pitivi,但是 adwaita-icon-theme(以前的 gnome-icon-theme)中的张开手光标构建不正确。
https://bugzilla.gnome.org/show_bug.cgi?id=765323
上面的错误可在 gtk-demo 中重现,尝试单击张开的手,它会向您显示手指。
@Lubosz:感谢您指出这一点;该错误现已在 Adwaita 图标主题中修复。