3个不稳定版本

0.2.0 2024年2月19日
0.1.1 2024年1月20日
0.1.0 2024年1月14日

#185 in 图形API

每月下载 33

AGPL-3.0

170KB
5K SLoC

libccanvas

libccanvas简化了创建ccanvas组件的过程。更多详细信息,请参阅ccanvas主仓库。

快速入门

当组件加载时,您的组件将由canvas运行,通过使用 Client::new(ClientConfig::default()) 创建客户端来开始。

请将您的Rust项目命名为 ccanvas-XXXXX 格式,以便识别。

#[tokio::main]
async fn main() {
    let mut client = Client::default();

    client.hidecursor();
    client.setchar(0, 0, 'H');
    client.setchar(1, 0, 'e');
    client.setchar(2, 0, 'l');
    client.setchar(3, 0, 'l');
    client.setchar(4, 0, 'o');
    client.setchar(5, 0, '!');

    // flush all changes
    client.renderall().await;


    // listen to all key presses
    client.subscribe(Subscription::AllKeyPresses).await;

    loop {
        let event = client.recv().await;
        // exit when 'q' is pressed
        if let EventVariant::Key(key) = event.get() {
            if key.code == KeyCode::Char('q') => {
                client.exit().await;
                break;
            }
        }
    }
}

运行组件

您需要在您的系统上安装ccanvas

  1. 使用cargo安装组件。
cargo install --path . # where `.` is your project directory
  1. 加载组件后运行ccanvas。
ccanvas hello ccanvas-hello # where `ccanvas-hello` is the command to run your component

您可以在/examples 中找到更多高级用法示例。

实现细节

这不仅仅是ccanvas绑定,这里是一些Client在幕后为了简化开发者易用性所做的事情。

确认接收事件

服务器(从现在起我将ccanvas的服务器简称为服务器)将事件传递给客户端时,它期望客户端确认它已收到事件,并确定事件是否应该传递给其他组件。

  • Event超出作用域时,会自动发送确认。
  • 您还可以使用 Event.done(true) 手动触发此行为。

处理响应

为了保持请求的顺序,客户端请求将等待直到服务器响应任务完成的确认。

自动自我销毁

Client 离开作用域时,它将自动调用自身的 drop,从而将其从 ccanvas 会话中移除,避免出现“幽灵组件”的情况。

特性

请随意在非默认特性门控下向此 crate 添加您自己的 API/绑定/功能实现。有关更多信息,请查看 src/features

依赖

~3–14MB
~124K SLoC