图符控件

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

图符控件

图符控件用于显示用户自定义的字符(PS:也可以用来画字符画)。在你为图符控件预定义了字符的情况下,你可以在任何支持用户自定义字符的显示器上使用图符控件(大部分显示器都支持),当然这包括图形显示器(如:T6963)。你可以点击~硬件支持列表~来查看详细说明。

如果由于某种原因导致图符不能显示,那么将它将由星号’*’代替。

定义图符控件是一件非常简单的事:

  1. Widget <name> { # 控件名
  2. class 'icon' # 控件类型
  3. speed <number> # 速度
  4. visible <expr> # 可见性
  5. frame <expr> # 框(显示在位图外围的框)
  6. foreground <color> # 前景色
  7. background <color> # 背景色
  8. bitmap { # 位图
  9. row1 <string> # 第一行
  10. row2 <string> # 第二行
  11. ... # ...
  12. row8 <string>
  13. }
  14. }


参数

参数 含义 说明
speed 速度 动画效果的时间间隔(单位:毫秒), 默认值: 100 毫秒, 为 0 时代表无动态效果(用于静态图符)。
visible 可见性 其参数为表达式,用于控制控件的可见性(可用于制造闪烁效果)。
frame 其参数为表达式,该表达式用于控制在位图外围显示的框的种类(在两个或者多个动态图符需要同步时会非常有用)。
foreground 前景色 活动像素的颜色,(格式:RRGGBBAA 或 RRGGBB),默认为不透明的黑色(‘000000ff’),点击~颜色~了解更多。
background 背景色 非活动像素的颜色,(格式:RRGGBBAA 或 RRGGBB), 默认为透明(‘ffffff00’),点击~颜色~了解更多。
bitmap.row* 位图.行* 定义位图的字符串。


例子

  • 静态图符:

    1. Widget Lightning {
    2. class 'icon'
    3. bitmap {
    4. row1 '...***'
    5. row2 '..***.'
    6. row3 '.***..'
    7. row4 '.****.'
    8. row5 '..**..'
    9. row6 '.**...'
    10. row7 '**....'
    11. row8 '*.....'
    12. }
    13. }
  • 动态图符:

    1. Widget Heartbeat {
    2. class 'Icon'
    3. speed 800
    4. Bitmap {
    5. Row1 '.....|.....'
    6. Row2 '.*.*.|.*.*.'
    7. Row3 '*****|*.*.*'
    8. Row4 '*****|*...*'
    9. Row5 '.***.|.*.*.'
    10. Row6 '.***.|.*.*.'
    11. Row7 '..*..|..*..'
    12. Row8 '.....|.....'
    13. }
    14. }

    无需更多的解释…

  • 同步图符需要用到 frame 参数(你可以在附件一节中看到一个演示): ``` Widget MailIcon_left { class ‘Icon’ speed 100 update 100

    注意:下面的位图(bitmap)可以只写当前(current size)尺寸的一半,因为它是一个上下对称的动态图符,这里是为了给你举个例子所以才全部写了。

    Bitmap { Row1 ‘…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..’ Row2 ‘…..|…..|…..|…..|…..|…..|…..|….|…|..|.|*|*|*|*|*|*|.*|..|…|….|…..|…..|…..|…..|…..|…..|…..|…..|…..’ Row3 ‘…..|…..|…..|…..|…..|…..|…..|….|….|...|...|...|...|...|...|...|...|...|...|….|….|…..|…..|…..|…..|…..|…..|…..|…..|…..’ Row4 ‘…..|…..|…..|…..|…..|…..|…..|….|….|....|...|...|...|...|...|...|...|...|....|….|….|…..|…..|…..|…..|…..|…..|…..|…..|…..’ ↑对称 Row5 ‘…..|…..|…..|…..|…..|…..|…..|….|….|....|.…|||||||.…|....|….|….|…..|…..|…..|…..|…..|…..|…..|…..|…..’ ↓对称 Row6 ‘…..|…..|…..|…..|…..|…..|…..|….|….|....|.…|….|….|….|….|….|….|.…|....|….|….|…..|…..|…..|…..|…..|…..|…..|…..|…..’ Row7 ‘…..|…..|…..|…..|…..|…..|…..|….|…|..|.*|*|*|*|*|*|*|.*|..|…*|….|…..|…..|…..|…..|…..|…..|…..|…..|…..’ Row8 ‘…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..|…..’ }

    注意:下行中第一次引用bar8是为增加/减少计数器(counter)的值,而且可见性( visibility)公式也不需要这么复杂,这里只是为你做个演示。

    visible ( test::bar(8,29,0,1) > 6 & test::bar(8,29,0,0) < 21 ) * ( exec(mailcheck_script,mailcheck_refresh) > 0 ) ——-mailcheck_script在这里

    选择要显示的框(frame)

    frame test::bar(8,29,0,0) }

Widget MailIcon_right { class ‘Icon’ speed 100 update 100

  1. # 这行也适用于MailIcon_left
  2. frame test::bar(8,29,0,0)
  3. Bitmap {
  4. Row1 '.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|'
  5. Row2 '.....|.....|....*|...**|..***|.****|*****|*****|*****|*****|*****|*****|*****|*****|*****|*****|*****|*****|*****|*****|*****|*****|.****|..***|...**|....*|.....|.....|.....|.....|'
  6. Row3 '.....|.....|....*|...*.|..*.*|.*.*.|*.*..|.*...|*....|....*|...*.|..*.*|..*.*|..*.*|..*.*|..*.*|..*.*|...*.|....*|*....|.*...|*.*..|.*.*.|..*.*|...*.|....*|.....|.....|.....|.....|'
  7. Row4 '.....|.....|....*|...*.|..*..|.*...|*..*.|..*..|.*...|*..*.|..*..|.*..*|.*..*|.*..*|.*..*|.*..*|.*..*|..*..|*..*.|.*...|..*..|*..*.|.*...|..*..|...*.|....*|.....|.....|.....|.....|'
  8. Row5 '.....|.....|....*|...*.|..*..|.*...|*...*|...**|..**.|.**..|**...|*...*|*...*|*...*|*...*|*...*|*...*|**...|.**..|..**.|...**|*...*|.*...|..*..|...*.|....*|.....|.....|.....|.....|'
  9. Row6 '.....|.....|....*|...*.|..*..|.*...|*....|.....|.....|.....|.....|....*|....*|....*|....*|....*|....*|.....|.....|.....|.....|*....|.*...|..*..|...*.|....*|.....|.....|.....|.....|'
  10. Row7 '.....|.....|....*|...**|..***|.****|*****|*****|*****|*****|*****|*****|*****|*****|*****|*****|*****|*****|*****|*****|*****|*****|.****|..***|...**|....*|.....|.....|.....|.....|'
  11. Row8 '.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|'
  12. }
  13. #名为bar8的计数器(counter)已经通过MailIcon_left增加了
  14. visible ( test::bar(8,29,0,0) > 1 & test::bar(8,29,0,0) < 26 ) * ( exec(mailcheck_script,mailcheck_refresh) > 0 ) -----mailcheck_script在这里
  15. frame test::bar(8,29,0,0)

}

  1. *mailcheck_script* 这个脚本里面可能有这样一些内容:

!/usr/bin/php

<?php $mbox = imap_open(“{localhost/tls/novalidate-cert}”, “username”, “password”, OP_HALFOPEN) or die(“can’t connect: “ . imap_last_error());

$status = imap_status($mbox, “{localhost}Inbox”, SA_UNSEEN); if ($status) { echo $status->unseen; } else { echo “0”; } imap_close($mbox); ?> ```


可见性

你可以为 visible 指定一个表达式,它将控制(每个速度毫秒内)图符的刷新(即控制图符在刷新时显示与否)。如果这个这个表达式的值为0,那么图符将不可见,(图符的内容)将由空白代替。如果表达式的值不为0的话,图符将会显示。这对于制造闪烁效果和动态显示来说非常有用。

附件下载