栏控件

官网地址:https://lcd4linux.bulix.org/wiki/widget_bar

栏控件 (类似于柱状图)

栏控件用来显示各种栏。

LCD4Linux在栏的处理上做的很好。它支持水平栏、垂直栏和拆分栏(两个独立的栏在同一行,用到expression2),各种类型的栏可以同时使用。

目前只有一种样式可用于方向( direction )为 ‘E’ 和 ‘W’ 的栏,即: hollow (空心),它是一个围绕在栏外层的框架。(你可以点击~CoolStuff~来查看它的用例。)

处理栏控件是一件很棘手的工作:大部分显示器对于用户自定义的字符数有限制(通常是八个),如果你想要精确地显示这些栏的话,这个数量实在是太少了。如果你同时还使用了图符控件的话,这个数量还会更少。所以LCD4Linux对它做了一些误差扩散(error diffusion) 的处理:把字符替换成另一个与它相似的字符。在这里,你必须考虑另一点:如果你重定义一个正在显示的字符的话,显示器上将会闪烁。所以LCD4Linux不允许对正在显示的字符重定义,即使它在下一次刷新后不会被使用。只有当误差扩散(error diffusion)失败时,字符才会在被重定义后显示。

如果你不相信我这个东西很奇怪的话,你可以看一下在 drv_generic_text.c 中处理栏控件的代码。

一个栏控件看起来是这样的:

  1. Widget <name> { # 控件名
  2. class 'Bar' # 控件类型
  3. expression <expr> # 表达式1
  4. expression2 <expr> # 表达式2 (注:用于拆分栏)
  5. length <number> # 栏的长度
  6. min <number> # 栏的最小值(起始位置)
  7. max <number> # 栏的最大值(终止位置)
  8. direction <char> # 方向
  9. style <char> # 样式
  10. foreground <color> # 前景色
  11. background <color> # 背景色
  12. update <number> # 刷新频率
  13. barcolor0 <color> # 上半栏颜色
  14. barcolor1 <color> # 下半栏颜色 (注:用于拆分栏)
  15. }


参数

参数 含义 说明
expression 表达式 表达式的执行结果作为(栏的)上半栏的长度。
expression2 表达式 表达式的执行结果作为(栏的)下半栏的长度。(注:用于拆分栏)
length 长度 栏的填充长度。
min 最小值 栏的最小长度。
max 最大值 栏的最大长度。
direction 方向 ‘E’ (向东:从左边朝向右边,默认值), ‘W’ (向西: 从右边朝向左边), ‘N’ (向北:从底部朝向顶部) or ‘S’ (向南:从顶部朝向底部)
style 样式 ‘H’ (hollow样式:栏的外围有框架围绕),默认值为: none
foreground 前景色 活动像素的颜色,(格式:RRGGBBAA 或 RRGGBB),默认为不透明的黑色(‘000000ff’),点击~颜色~了解更多。
background 背景色 非活动像素的颜色,(格式:RRGGBBAA 或 RRGGBB), 默认为透明(‘ffffff00’),点击~颜色~了解更多。
update 刷新频率 刷新频率(单位:ms),默认值为1000ms(即1秒)。
barcolor0 上半栏颜色 上半栏的颜色,默认与前景色相同
barcolor1 下半栏颜色 下半栏的颜色,默认为前景色相同


例子

下面是一个例子:

  1. Widget BusyBar {
  2. class 'Bar'
  3. expression proc_stat::cpu('busy', 500)
  4. expression2 proc_stat::cpu('system', 500)
  5. length 10
  6. direction 'E'
  7. style 'H'
  8. update 100
  9. BarColor0 'ff0000'
  10. BarColor1 '00ff00'

如果你省略 expression2 的值, 你将会得到一个只由 expression 控制的单一的栏(single bar)。如果你指定了 expression2 的值(同时你的显示器支持拆分栏的话),那么你将得到一个拆分栏(split bars),其中上半栏由 expression 控制,下半栏由 expression2 控制。


另一个例子

  1. Widget MP3Bar {
  2. class 'Bar'
  3. expression xmms('uSecPosition')
  4. length 20
  5. min 0
  6. max xmms('uSecTime')
  7. direction 'E'
  8. update tick
  9. }

栏控件可以用在XMMS(一个音频播放器)插件上,作为进度条使用,参数 length 用于设置进度条的总长度。


缩放

通常情况下,栏控件可以自动缩放,这意味着它们从0开始,到最大值结束,然后根据最大值自动缩放。

有时候,这种特性并不是你想要的(例如对于温度来说)。在这种情况下,你可以通过指定参数 minmax 的值来自定义栏的长度。

从0.9版本开始,LCD4Linux开始支持对数栏(logarithmic bars),只需在表达式里好函数即可。