桌面上的颜色反应性
在 1997 年 7 月到 1998 年 1 月下旬的七个月期间,我参与了一个名为 InSight 的操作系统开发项目。我在 InSight 开发小组中的部分职责是研究界面设计,试图进一步了解哪些方面在未来五到七年内对用户仍然可行和有用。除了界面之外,我还有机会参与底层操作系统的设计,因为我们在系统可见方面所做的大部分工作都与操作系统的底层运作紧密相关。将桌面设计与操作系统的底层机制结合在一起,我们想到了一个我们认为不错的主意——颜色反应性桌面元素的概念。
灯
灯是一种窗口元素,其颜色直接关联到使用该窗口的应用程序的运行状态。简单来说,它就像是该特定应用程序的状态 LED。当您使用程序时,它的灯会根据正在发生的事情以及您希望它反映的内容(如 CPU 使用率、程序状态等)而改变颜色。
假设您有一个电子邮件检查器,它每两分钟检查一次您的邮箱是否有新邮件。大多数时候,窗口中的灯保持蓝色,这意味着它只是闲置等待执行某些操作。每两分钟它会变成黄色,表示它正在忙于检查您的邮箱是否有新邮件。如果没有找到邮件,它会变回蓝色。如果找到新邮件 确实,它会变成黄色或开始闪烁。
信标就像微型灯,旨在仅在应用程序处于 图标化 状态时使用。如果您的桌面上打开了一个窗口,它会在窗口的一个角上有一个灯。现在,当您单击图标化按钮时,整个应用程序会被折叠成桌面上的一个图标。如果您仍然想监视该应用程序,请将其折叠为信标而不是图标。这样,您就可以看到应用程序正在发生什么,而无需不断地打开和关闭它。
例如,假设您正在通过 FTP 下载五个不同的 RPM。您可以将每个下载折叠成一个信标,其颜色反映下载是否正在顺利进行。此时,您的屏幕底部有五个小信标图标,您可以通过检查它们是否都仍然发出漂亮的绿色光来监视它们的进度。您甚至可以将其设置为颜色是传输速度的函数。亮绿色可能表示快速传输;红色可能表示慢速或死传输。
为了充分理解灯和信标的行为方式,请记住灯(或信标)的颜色可以与各种“行为集”相关联,例如 CPU 使用率、进程状态或特定应用程序中可能发生的特定事件。“行为集”决定了哪些操作将产生哪些颜色。这里有一些实际的例子。
假设上述 FTP 传输之一开始停滞。其中一个信标开始发出红光,并持续红光几分钟。只需弹出窗口,终止或重新启动传输。当您终止该进程时,其他四个信标开始更亮地发光,因为您刚刚通过释放一些带宽提高了其他四个信标的速度。
信标使监视多个应用程序的任务变得轻而易举。整个 3-D 渲染软件包可以折叠成一个单独的信标——例如,当场景渲染完成时,该信标将变为绿色。不再需要不断地弹出应用程序以查看正在发生的事情。
由于颜色反应性元素的行为在整个桌面上应保持一致,因此需要一个集中的控制点(例如,控制面板的形式)以允许用户进行顶层控制。从那里,允许应用程序(如果用户允许)决定自己的行为集也是明智之举。最终,用户必须拥有完全和彻底的自由来决定其桌面上颜色反应性元素的外观和行为。
有两种方法可以改变桌面上灯或信标的外观。在 InSight 中,计划只是通过加载适当颜色的图标来动态更改图标。第二种方法需要消耗更多的 CPU 时间来实现,它涉及将图标内的图像数据色相偏移 +/- 180 度以达到所需的颜色。
第一种方法需要一个小型的彩色图标缓存,这些图标需要预先存在并准备好加载。大约八个不同颜色的灯图标(和八个信标图标)通常足以处理大多数情况。在 FTP 站点 (ftp://ftp.linuxjournal.com/pub/lj/listings/issue58/) 上有一个名为 3039.zip 的文件,其中包含一个小型存档,其中包含不同颜色的示例灯和信标,供您查看和实验。这八种颜色是透明、蓝色、水绿色、绿色、黄色、琥珀色、红色和紫色。没错——原始图像数据已经为您提供。这些图标在各个方面都是即用型的。
以下是如何构建控制面板来处理颜色反应性桌面元素的行为集。
应该向用户展示一个潜在“状态”列表(例如,忙碌、空闲、睡眠、错误等),然后让用户能够将他们选择的颜色映射到每个状态。
颜色转换表允许用户指定灯或信标的物理行为。一整行“C”表示“对于此行为,颜色始终保持透明”。重复序列 BRBRBRBRBRBR 将使灯在蓝色和红色之间快速闪烁,一遍又一遍。要减慢闪烁速度,请使用像 BBBBRRRRBBBBRRRR 这样的序列。
颜色转换表还允许用户指定它将显示的颜色序列,以指示每个特定状态。如果您想引起用户的注意,您可能希望使灯或信标快速闪烁。这可以通过交替颜色序列来完成,就像歌曲中的鼓点一样。用一个类比来说,警车上的灯可以被认为是颜色反应性元素。当警车处于“追逐”状态时,它的行为是红、蓝、红、蓝、红、蓝。
要使灯或信标像着火一样闪烁,像 ROYOROYOR 这样的序列将使其从红色到橙色到黄色到橙色反复闪烁。
在规定颜色反应性桌面元素的精确行为时,颜色转换表提供了极大的灵活性。只需更改表中的条目,您就可以通过玩弄每个状态的颜色顺序,实现从纯色到狂野彩虹效果的一切。
列表 1 中显示了一个示例行为集。如果您想要以下效果,行为集将如下所示
空闲时为透明色
睡眠时为蓝色
低 CPU 使用率时为紫色
中等 CPU 使用率时为红色
高 CPU 使用率时为橙色
严重 CPU 使用率时为黄色
慢速闪烁绿色/透明色以引起注意
快速闪烁红色/透明色表示错误
正常闪烁水绿色/透明色表示忙碌
使用颜色作为 CPU 使用率的函数,行为集可能如下所示
死机:透明
轻微:紫色
中等:蓝色
高:绿色
严重:黄色
极度 CPU 密集型:红色
作为进程状态的函数,它可以这样定义
僵尸进程:透明
睡眠:紫色
空闲:蓝色
运行:绿色
等待:黄色
段错误/死机:红色
等待用户输入:蓝色
忙碌:黄色
渲染:绿色
错误:红色
完成:透明
寻呼程序或电子邮件检查器可以折叠成一个信标,当您有新消息等待时,该信标会变成绿色。可以使数据包嗅探器在收到可疑 ICMP 数据包时闪烁红色。FTP 客户端可以使用其灯来指示与主机的连接的各个阶段或文件传输的进度。
自从我第一次撰写这篇文章以来,GNOME 开发者 Eckehart Burns 已经为 GNOME UI 库开发了一个颜色反应性灯/信标小部件,该小部件目前是 GNOME CVS 树的一部分。GNOME 应用程序编码人员现在有能力自行决定将 CR 整合到他们的应用程序中。
本文中引用的所有列表都可以通过匿名下载文件 ftp.linuxjournal.com/pub/lj/listings/issue58/3039.tgz 获得。