12 个版本 (6 个重大更新)
新 0.7.2 | 2024年8月9日 |
---|---|
0.7.1 | 2023年3月23日 |
0.7.1-readme | 2024年8月9日 |
0.6.0 | 2023年3月21日 |
#257 在 命令行界面
每月263次下载
42KB
453 行
Tooey 已被 Tuit 取代 Tuit
Tooey 是一个基础 TUI 库,但它有一些缺陷。Tuit 修复了这些错误。
适用于与 SprinklesOS 一起使用。
Tooey 仍处于初级阶段。随着我对 Tooey 的完善,请期待频繁(非常频繁,每日)的重大更改!
什么是 Tooey?
Tooey 是一个为 Sprinkles OS 个人使用编写的无需 std 的 TUI 库!
为什么是 Tooey?
我找不到任何无需 std 的 TUI 库,这让我很难过 :(
幸运的是,我现在找到了自己的快乐(通过编写 Tooey) :)
Tooey 架构
Tooey 中的每个 "小部件" 都是一个对象 -- 对象不能相互通信,但它们可以从中央控制器接收更新。
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