窗口管理器主题和X11

时间:2012-11-30 17:11:39

标签: themes x11 xlib

在某些WM中,可以选择影响窗口显示方式的主题,例如:按钮的背景如何着色。

如果我使用裸Xlib调用绘制窗口,我该怎么做才能符合这些受主题影响的设置?即我应该为每个可能的WM编写特定的代码吗?一般来说如何解决?

1 个答案:

答案 0 :(得分:1)

有几种主题类型,它们有时会一起播放,但不应混淆。

  • 窗口管理器/边框主题描述每个窗口的装饰,而不是内容
  • UI工具包主题/小部件主题描述了如何在窗口中绘制按钮,文本字段等
  • 图标主题描述了使用的图标,包括应用程序图标以及文件图标,操作图标,工具栏图标等。
  • 颜色主题定义了在其他主题框架内使用的颜色调色板
  • 指针主题定义一组鼠标指针图标

某些桌面环境将所有这些主题捆绑在“桌面”主题中,或者至少提供一个前端来选择所有这些主题。然而,这些主题独立于桌面环境并且彼此独立。可以使用配置文件设置它们。

如果您希望您的应用程序符合用户的首选项,首先您应该遵守Icon主题。指针主题由X服务器处理,只要您只使用鼠标图标而不上传自己的X服务器。

第二个显而易见的事情是Color主题,但不幸的是没有颜色主题的标准,Gtk +和Qt框架都以独立的方式提供这个功能(桌面主题配置器理解和操纵两者以提供一致性)。您可以做一些魔术来确定用户是喜欢Gtk +颜色还是Qt颜色(例如,运行Gnome或KDE),然后从那里稍微提取颜色。

然而,最难的是提供UI元素的外观和感觉,这对用户选择的UI工具包主题是真实的。首先,您需要再次决定Gtk +和Qt(其他工具包也是主题存在,但通常不是由用户主题,或者像Enlightenment这样的小众玩家)。然后,您将不得不重新实现相同的功能。有趣的是,许多主题在Gtk +中都有自己的主题引擎,并且可以让主题引擎为您完成工作。已有多方采纳的方法。例子:

  • Java Swing支持通过实现Gtk +主题API并让Gtk +主题引擎完成工作来模仿Gtk +应用程序,并解决一些不一致问题。
  • 使用XUL的Firefox和其他Mozilla应用程序也可以这样做,但从默认字体大小开始总是存在令人讨厌的差异。
  • Qt本身具有兼容性Gtk +主题,基本上相同;这个很好用。

我的建议是不要重新发明轮子,而是使用Qt(或Gtk +,如果你愿意的话)用于超出基本绘图操作的GUI元素。请注意,根据我的经验,即使原始绘图通常使用Qt比使用Xlib更好。 用户可以获得她期望的外观和感觉(不仅只有外观),界面丰富而稳定,并且您可以节省大量时间来编写所有这些内容。