在某些 WM 中,可以选择影响窗口显示方式的主题,例如按钮背景的颜色。
如果我使用裸 Xlib 调用绘制一个窗口,我应该怎么做才能符合这些受主题影响的设置?即我应该为每个可能的 WM 编写特定的代码吗?一般是怎么解决的?
有几种主题类型,它们有时会一起播放,但不应混淆。
一些桌面环境将所有这些主题捆绑在“桌面”主题中,或者至少提供一个前端来选择所有这些主题。然而,这些主题独立于桌面环境,也相互独立。可以使用配置文件来设置它们。
如果您希望您的应用程序符合用户的偏好,首先您应该坚持 Icon 主题。Pointer 主题由 X 服务器负责,只要您只使用常用的鼠标图标并且不要将自己的图标上传到 X 服务器。
第二个明显的事情是颜色主题,但不幸的是,没有颜色主题的标准,Gtk+ 和 Qt 框架都以独立的方式提供了这个功能(桌面主题配置器理解和操作两者以提供一致性)。您可以做一些魔术来确定用户更喜欢 Gtk+ 颜色还是 Qt 颜色(例如,正在运行 Gnome 或 KDE),然后从那里提取颜色。
然而,最困难的事情是提供与用户选择的 UI 工具包主题相符的 UI 元素的外观和感觉。首先,您必须再次在 Gtk+ 和 Qt 之间做出选择(也存在其他可主题化的工具包,但通常不是由用户或像 Enlightenment 这样的小众玩家提供主题)。然后您将不得不重新实现相同的功能。有趣的是,许多主题在 Gtk+ 中都带有自己的主题引擎,并且可以让主题引擎为您完成工作。这种方法已经被多方采纳。例子:
我的建议是不要重新发明轮子,而是使用 Qt(或 Gtk+,如果您愿意)来处理超出基本绘图操作的 GUI 元素。请注意,根据我的经验,即使是原始绘图,使用 Qt 通常也比使用 Xlib 做得更好。用户获得了她期望的外观和感觉(不仅仅是外观),界面丰富而稳定,并且您可以节省大量时间来编写所有这些内容。