#计时器 #时钟 #图片 #动画 #按钮 #yaml #纹理

app anipwatch

非常可爱的计时器

1 个不稳定版本

0.1.0 2023年10月19日

2 in #图片

MIT 协议

475KB
3.5K SLoC

Anipwatch (あにっぷウォッチ)

Anipwatch

索引

描述

非常可爱的时钟和计时器。它始终位于桌面顶部并显示动画图片。

LICENSE

标志和图标

用法

运行 Anipwatch。

anipwatch /path/to/settings_file.yaml

显示帮助。

anipwatch --help

# or

anipwatch -h

设置文件

查看 示例

定义主窗口大小

window_size:
    width: 480
    height: 270

指定保存数据文件的路径。
路径的根是放置设置文件的目录。

save_data_file: "save_file.data"

定义纹理名称并指定它们的文件路径。
路径的根是放置设置文件的目录。

textures:
    -
        name: "display"
        path: "display.png"
    -
        name: "body_texture_white"
        path: "body_texture_white.png"
    -
        name: "eyes_texture_white"
        path: "eyes_texture_white.png"
    -
        name: "body_texture_red"
        path: "body_texture_red.png"
    -
        name: "eyes_texture_red"
        path: "eyes_texture_red.png"
    -
        name: "body_texture_blue"
        path: "body_texture_blue.png"
    -
        name: "eyes_texture_blue"
        path: "eyes_texture_blue.png"
    -
        name: "numbers"
        path: "numbers.png"
    -
        name: "switch_btn"
        path: "switch_btn.png"
    -
        name: "start_stop_btn"
        path: "start_stop_btn.png"
    -
        name: "reset_btn"
        path: "reset_btn.png"
    -
        name: "quit_btn"
        path: "quit_btn.png"

定义皮肤。

  • skins: [] : 皮肤数组。
    • name: "skin name" : 定义皮肤名称。
    • display: : 指定数字放置的位置。
      • texture_name: "texture_name" : 数字纹理的名称。
      • depth: 0 : 0 表示纹理的前端。这个数字越大,纹理越深。
      • regions: : 指定每个数字放置的位置。
        • centiseconds: : 指定百分之一秒。
          • d1: : 第1位数字。
            • x: 440.0 : 此数字的 X 坐标。
            • y: 0.0 : 此数字的 Y 坐标。
            • width: 40.0 : 这个数字的宽度。
            • height: 60.0 : 这个数字的高度。
          • d2: : 第二位数字。
        • seconds: : 指定秒数。
        • minutes: : 指定分钟数。
        • hours: : 指定小时数。
    • switch_button: : 时钟/秒表切换按钮。
      • texture_name: "texture_name" : 此按钮的纹理名称。
      • depth: 0 : 0 表示纹理的前端。这个数字越大,纹理越深。
      • regions: : 指定按钮放置的位置。
        • x: 440.0 : 此按钮的X坐标。
        • y: 0.0 : 此按钮的Y坐标。
        • width: 40.0 : 此按钮的宽度。
        • height: 60.0 : 此按钮的高度。
      • start_stop_button: : 秒表的开始/停止按钮。
      • reset_button: : 秒表的复位按钮。
      • quit_button: : Anipwatch的退出按钮。
      • animations: [] : 动画图片数组。
        • texture_name: "texture_name" : 此图片的纹理名称。
        • depth: 0 : 0 表示纹理的前端。这个数字越大,纹理越深。
      • regions: : 指定此图片放置的位置。
        • x: 440.0 : 此按钮的X坐标。
        • y: 0.0 : 此按钮的Y坐标。
        • width: 40.0 : 此按钮的宽度。
        • height: 60.0 : 此按钮的高度。
      • frames: 1 : 帧数。
      • fps: 1.0 : 每秒帧数。
      • probability: 0.5 : 执行动画的概率。当动画停止时,每秒绘制一次。 (可选)
skins:
    -
        name: "skin_white"
        display:
            texture_name: "numbers"
            depth: 0
            regions:
                centiseconds:
                    d1:
                        x: 440.0
                        y: 0.0
                        width: 40.0
                        height: 60.0
                    d2:
                        x: 400.0
                        y: 0.0
                        width: 40.0
                        height: 60.0
                seconds:
                    d1:
                        x: 340.0
                        y: 0.0
                        width: 40.0
                        height: 60.0
                    d2:
                        x: 300.0
                        y: 0.0
                        width: 40.0
                        height: 60.0
                minutes:
                    d1:
                        x: 240.0
                        y: 0.0
                        width: 40.0
                        height: 60.0
                    d2:
                        x: 200.0
                        y: 0.0
                        width: 40.0
                        height: 60.0
                hours:
                    d1:
                        x: 140.0
                        y: 0.0
                        width: 40.0
                        height: 60.0
                    d2:
                        x: 100.0
                        y: 0.0
                        width: 40.0
                        height: 60.0
        switch_button:
            texture_name: "switch_btn"
            depth: 2
            region:
                x: 100.0
                y: 60.0
                width: 95.0
                height: 20.0
        start_stop_button:
            texture_name: "start_stop_btn"
            depth: 3
            region:
                x: 195.0
                y: 60.0
                width: 95.0
                height: 20.0
        reset_button:
            texture_name: "reset_btn"
            depth: 4
            region:
                x: 290.0
                y: 60.0
                width: 95.0
                height: 20.0
        quit_button:
            texture_name: "quit_btn"
            depth: 5
            region:
                x: 385.0
                y: 60.0
                width: 95.0
                height: 20.0
        animations:
            -
                texture_name: "display"
                depth: 1
                region:
                    x: 100.0
                    y: 0.0
                    width: 380.0
                    height: 60.0
                frames: 1
                fps: 1.0
            -
                texture_name: "body_texture_white"
                depth: 7
                region:
                    x: 0.0
                    y: 0.0
                    width: 480.0
                    height: 270.0
                frames: 6
                fps: 2.0
            -
                texture_name: "eyes_texture_white"
                depth: 6
                region:
                    x: 0.0
                    y: 0.0
                    width: 480.0
                    height: 270.0
                frames: 2
                fps: 2.0
                probability: 0.5
    -
        name: "skin_red"
        display:
            texture_name: "numbers"
            depth: 0
            regions:
                centiseconds:
                    d1:
                        x: 440.0
                        y: 0.0
                        width: 40.0
                        height: 60.0
                    d2:
                        x: 400.0
                        y: 0.0
                        width: 40.0
                        height: 60.0
                seconds:
                    d1:
                        x: 340.0
                        y: 0.0
                        width: 40.0
                        height: 60.0
                    d2:
                        x: 300.0
                        y: 0.0
                        width: 40.0
                        height: 60.0
                minutes:
                    d1:
                        x: 240.0
                        y: 0.0
                        width: 40.0
                        height: 60.0
                    d2:
                        x: 200.0
                        y: 0.0
                        width: 40.0
                        height: 60.0
                hours:
                    d1:
                        x: 140.0
                        y: 0.0
                        width: 40.0
                        height: 60.0
                    d2:
                        x: 100.0
                        y: 0.0
                        width: 40.0
                        height: 60.0
        switch_button:
            texture_name: "switch_btn"
            depth: 2
            region:
                x: 100.0
                y: 60.0
                width: 95.0
                height: 20.0
        start_stop_button:
            texture_name: "start_stop_btn"
            depth: 3
            region:
                x: 195.0
                y: 60.0
                width: 95.0
                height: 20.0
        reset_button:
            texture_name: "reset_btn"
            depth: 4
            region:
                x: 290.0
                y: 60.0
                width: 95.0
                height: 20.0
        quit_button:
            texture_name: "quit_btn"
            depth: 5
            region:
                x: 385.0
                y: 60.0
                width: 95.0
                height: 20.0
        animations:
            -
                texture_name: "display"
                depth: 1
                region:
                    x: 100.0
                    y: 0.0
                    width: 380.0
                    height: 60.0
                frames: 1
                fps: 1.0
            -
                texture_name: "body_texture_red"
                depth: 7
                region:
                    x: 0.0
                    y: 0.0
                    width: 480.0
                    height: 270.0
                frames: 6
                fps: 2.0
            -
                texture_name: "eyes_texture_red"
                depth: 6
                region:
                    x: 0.0
                    y: 0.0
                    width: 480.0
                    height: 270.0
                frames: 2
                fps: 2.0
                probability: 0.5
    -
        name: "skin_blue"
        display:
            texture_name: "numbers"
            depth: 0
            regions:
                centiseconds:
                    d1:
                        x: 440.0
                        y: 0.0
                        width: 40.0
                        height: 60.0
                    d2:
                        x: 400.0
                        y: 0.0
                        width: 40.0
                        height: 60.0
                seconds:
                    d1:
                        x: 340.0
                        y: 0.0
                        width: 40.0
                        height: 60.0
                    d2:
                        x: 300.0
                        y: 0.0
                        width: 40.0
                        height: 60.0
                minutes:
                    d1:
                        x: 240.0
                        y: 0.0
                        width: 40.0
                        height: 60.0
                    d2:
                        x: 200.0
                        y: 0.0
                        width: 40.0
                        height: 60.0
                hours:
                    d1:
                        x: 140.0
                        y: 0.0
                        width: 40.0
                        height: 60.0
                    d2:
                        x: 100.0
                        y: 0.0
                        width: 40.0
                        height: 60.0
        switch_button:
            texture_name: "switch_btn"
            depth: 2
            region:
                x: 100.0
                y: 60.0
                width: 95.0
                height: 20.0
        start_stop_button:
            texture_name: "start_stop_btn"
            depth: 3
            region:
                x: 195.0
                y: 60.0
                width: 95.0
                height: 20.0
        reset_button:
            texture_name: "reset_btn"
            depth: 4
            region:
                x: 290.0
                y: 60.0
                width: 95.0
                height: 20.0
        quit_button:
            texture_name: "quit_btn"
            depth: 5
            region:
                x: 385.0
                y: 60.0
                width: 95.0
                height: 20.0
        animations:
            -
                texture_name: "display"
                depth: 1
                region:
                    x: 100.0
                    y: 0.0
                    width: 380.0
                    height: 60.0
                frames: 1
                fps: 1.0
            -
                texture_name: "body_texture_blue"
                depth: 7
                region:
                    x: 0.0
                    y: 0.0
                    width: 480.0
                    height: 270.0
                frames: 6
                fps: 2.0
            -
                texture_name: "eyes_texture_blue"
                depth: 6
                region:
                    x: 0.0
                    y: 0.0
                    width: 480.0
                    height: 270.0
                frames: 2
                fps: 2.0
                probability: 0.5

指定默认模式。

  • clock : 时钟模式。
  • stopwatch : 秒表模式。
default_mode: "clock"

指定秒表模式的默认皮肤名称。

default_stopwatch_skin_name: "skin_white"

指定时钟模式的默认皮肤名称。

default_clock_skin_name: "skin_white"

定义在秒表模式下更改皮肤的事件。

  • stopwatch_events: [] : 事件数组。
    • skin_name: "skin_name" : 皮肤名称。
    • from: : 指定更改皮肤的时间。
      • centiseconds: 0 : 百分之一秒。 [0, 99]
      • seconds: 30 : 秒。 [0, 59]
      • minutes: 0 : 分钟。 [0, 59]
      • hours: 0 : 小时。 [0, 99]
stopwatch_events:
    -
        skin_name: "skin_red"
        from:
            centiseconds: 0
            seconds: 30
            minutes: 0
            hours: 0
    -
        skin_name: "skin_blue"
        from:
            centiseconds: 0
            seconds: 0
            minutes: 1
            hours: 0
    -
        skin_name: "skin_white"
        from:
            centiseconds: 0
            seconds: 30
            minutes: 1
            hours: 0

定义在时钟模式下更改皮肤的事件。

  • clock_events: [] : 事件数组。
    • skin_name: "skin_name" : 皮肤名称。
    • from: : 指定更改皮肤的时间。
      • centiseconds: 0 : 百分之一秒。 [0, 99]
      • seconds: 0 : 秒数。[0, 59]
      • minutes: 0 : 分钟。 [0, 59]
      • hours: 8 : 小时。[0, 23]
clock_events:
    -
        skin_name: "skin_red"
        from:
            centiseconds: 0
            seconds: 0
            minutes: 0
            hours: 8
    -
        skin_name: "skin_blue"
        from:
            centiseconds: 0
            seconds: 0
            minutes: 1
            hours: 16

纹理

至少支持PNG和JPEG。

数字

从左到右排列0到9同样大小的图片。

开关按钮

‘计时器模式转为时钟模式’按钮位于左侧。(显示在计时器模式)
‘时钟模式转为计时器模式’按钮位于左侧。(显示在时钟模式)

其他按钮

每个其他按钮都是简单的图片。

开始和停止按钮,

重置按钮,

退出按钮,

动画图片

从第一帧到最后一帧,从左到右排列同样大小的图片。

运行示例

将当前工作目录更改为examples并执行以下命令。

cargo run --release -- example_settings.yaml

依赖项

~26–47MB
~553K SLoC