#tui #color #console #no-std

no-std tooey

一个简单的无需 std 的终端显示库

12 个版本 (6 个重大更新)

0.7.2 2024年8月9日
0.7.1 2023年3月23日
0.7.1-readme2024年8月9日
0.6.0 2023年3月21日

#257命令行界面

Download history • Rust 包仓库 46/week @ 2024-07-01 • Rust 包仓库 86/week @ 2024-07-29 • Rust 包仓库 177/week @ 2024-08-05 • Rust 包仓库

每月263次下载

MIT 许可证

42KB
453

Tooey 已被 Tuit 取代 Tuit

Tooey 是一个基础 TUI 库,但它有一些缺陷。Tuit 修复了这些错误。

适用于与 SprinklesOS 一起使用。

Tooey 仍处于初级阶段。随着我对 Tooey 的完善,请期待频繁(非常频繁,每日)的重大更改!

什么是 Tooey?

Tooey 是一个为 Sprinkles OS 个人使用编写的无需 std 的 TUI 库!

为什么是 Tooey?

我找不到任何无需 std 的 TUI 库,这让我很难过 :(

幸运的是,我现在找到了自己的快乐(通过编写 Tooey) :)

Tooey 架构

Tooey 中的每个 "小部件" 都是一个对象 -- 对象不能相互通信,但它们可以从中央控制器接收更新。

Tooey 中的渲染工作类似于层。

A diagram demonstrating how rendering is carried out by Tooey

每个层包含一个对象;该对象可以是空对象(不做任何事情),也可以是显示在屏幕中间文本的提示等对象。

虚拟终端不会自动重绘自己,除非它被更新或明确重绘。对象在初始化时不能自行绘制,直到发生重绘,因此建议在初始化后绘制您的对象(如果您喜欢看到它们的话 :))。

虚拟终端本身不处理显示其内容;它只是屏幕上字符的存储 -- 显示这些字符应由库用户处理;这使得库在运行时环境方面比其他替代方案更具灵活性,因为它不强制终端遵循任何特定标准才能运行,只要终端支持所需的最小功能即可。

这类似于 嵌入式图形 的方法,其中嵌入式图形不处理像素显示,只处理像素操作。

对象

对象类似于小部件;它们可以包含数据以帮助它们保存状态(例如,文本小部件中的字符串,或计数器中的数字)。

每个层都有一个这样的对象,它们的 on_draw 和 on_update 方法在屏幕绘制或发送更新时被调用。

TerminalObject 结构

on_update

on_update 函数在控制器每次调用终端的 .update() 时都会被调用。

该方法通过向对象的 on_update 方法传递一个 TerminalUpdate 枚举来通知事件。

on_update 方法本身接受三个参数;self、虚拟终端的字符和更新有效载荷。

然后,on_update 事件返回一个 LifecycleEvent 来指定对象接下来会发生什么。

/// Here's an example of what an on_update could look like!
fn prompt_on_update(
        &mut self,
        _screen: &mut Vec<Vec<CHARACTER>>,
        update_payload: &TerminalUpdate,
    ) -> LifecycleEvent {
        // Only die if the event was a keypress or mouseclick.
        match update_payload {
            TerminalUpdate::KeyboardEvent(_) | TerminalUpdate::MouseClick(_, _) => LifecycleEvent::Death,
            _ => LifecycleEvent::NoEvent
        }
    }

依赖项

~1.5MB
~28K SLoC