1 个不稳定版本
0.22.2 | 2020 年 8 月 10 日 |
---|
#799 在 GUI
每月 581 次下载
1MB
26K SLoC
winit - Rust 中的跨平台窗口创建和管理
[dependencies]
winit = "0.22.2"
文档
关于 winit 作用域内的功能,请参阅 FEATURES.md。
关于 winit 作用域外的功能,请参阅维基中的 其他 crates 提供的功能缺失。
联系我们
加入我们吧
用法
Winit 是一个窗口创建和管理库。它可以创建窗口,并允许你处理窗口产生的各种事件(例如:窗口大小调整、按键、鼠标移动等)。
Winit 被设计为库层次结构中的底层模块。因此,为了在窗口上显示内容,你需要使用 winit 提供的平台特定 getter 或其他库。
use winit::{
event::{Event, WindowEvent},
event_loop::{ControlFlow, EventLoop},
window::WindowBuilder,
};
fn main() {
let event_loop = EventLoop::new();
let window = WindowBuilder::new().build(&event_loop).unwrap();
event_loop.run(move |event, _, control_flow| {
*control_flow = ControlFlow::Wait;
match event {
Event::WindowEvent {
event: WindowEvent::CloseRequested,
window_id,
} if window_id == window.id() => *control_flow = ControlFlow::Exit,
_ => (),
}
});
}
Winit 仅在 Rust 编译器的最新稳定版本上得到官方支持。
Cargo 特性
Winit 提供以下特性,可以在你的 Cargo.toml
文件中启用
serde
: 启用使用 Serde 的特定类型的序列化和反序列化。x11
(默认启用):在 Unix 平台上,使用 X11 后端进行编译wayland
(默认启用):在 Unix 平台上,使用 Wayland 后端进行编译
平台特定用法
WebAssembly
构建一个二进制文件将生成一个 .js
文件。为了在 HTML 文件中使用它,你需要
- 在 HTML 文件中添加一个
<canvas id="my_id"></canvas>
元素。canvas 对应于 winit 中的 "窗口"。 - 编写一段JavaScript代码,创建一个名为
Module
的全局变量。将Module.canvas
设置为<canvas>
元素的对象(在示例中,您可以通过document.getElementById("my_id")
来获取它)。更多信息请参阅这里。 - 确保在创建
Module
变量之后插入由Rust生成的.js
文件。
Android
这个库使用了ndk-rs包,更多文档请参阅那个仓库。
在Android设备上运行需要动态系统库,请在Cargo.toml中添加以下内容
[[example]]
name = "request_redraw_threaded"
crate-type = ["cdylib"]
并将以下内容添加到示例文件中,以添加原生活动粘合剂
#[cfg(target_os = "android")]
ndk_glue::ndk_glue!(main);
使用以下命令运行应用程序cargo apk run --example request_redraw_threaded
依赖项
~0.2–13MB
~147K SLoC