13个版本

0.2.3 2022年1月14日
0.2.2 2021年11月21日
0.2.0 2021年10月29日
0.1.1 2021年10月4日
0.0.3 2021年8月13日

#14 in #窗口事件

每月下载 35次

MIT 许可证

86KB
2.5K SLoC

awita

awita at crates.io awita at docs.rs

Windows的异步窗口库

概述

"awita" 是一个Windows异步窗口创建和管理库。可以使用接收器异步接收窗口事件。

示例

等待事件循环

#[tokio::main]
async main() {
    let window = awita::Window::builder()
        .title("awita hello")
        .build()
        .await
        .unwrap();
    let mut closed = window.closed_receiver().await;
    loop {
        tokio::select! {
            Ok(_) = closed.recv() => println!("closed"),
            _ = awita::UiThread::join() => break,
        }
    }
    awita::UiThread::maybe_unwind().await;
}

非等待事件循环

#[tokio::main]
async fn main() {
    let window = awita::Window::builder()
        .title("await non_waiting")
        .build()
        .await
        .unwrap();
    let mut resized = window.resized_receiver().await;
    let mut closed = window.closed_receiver().await;
    tokio::spawn(async move {
        loop {
            tokio::select! {
                Ok(_) = closed.recv() => println!("closed"),
                _ = awita::UiThread::join() => break,
            }
        }
    });
    tokio::task::spawn_blocking(move || {
        while awita::UiThread::is_running() {
            // For example, write a rendering code.

            if let Ok(Some(size)) = resized.try_recv() {
                println!("resized: ({}, {})", size.width, size.height);
            }
        }
    })
    .await?;
    awita::UiThread::maybe_unwind().await;
}

许可证

MIT许可证


版权所有 (c) 2021 LNSEAB

依赖项

~134MB
~2M SLoC