1 个不稳定版本

0.22.2 2020 年 8 月 10 日

#799GUI

Download history 155/week @ 2024-03-13 205/week @ 2024-03-20 221/week @ 2024-03-27 248/week @ 2024-04-03 237/week @ 2024-04-10 201/week @ 2024-04-17 204/week @ 2024-04-24 175/week @ 2024-05-01 174/week @ 2024-05-08 179/week @ 2024-05-15 172/week @ 2024-05-22 187/week @ 2024-05-29 159/week @ 2024-06-05 115/week @ 2024-06-12 152/week @ 2024-06-19 121/week @ 2024-06-26

每月 581 次下载

Apache-2.0

1MB
26K SLoC

winit - Rust 中的跨平台窗口创建和管理

Crates.io Docs.rs CI Status

[dependencies]
winit = "0.22.2"

文档

关于 winit 作用域内的功能,请参阅 FEATURES.md

关于 winit 作用域外的功能,请参阅维基中的 其他 crates 提供的功能缺失

联系我们

加入我们吧

Freenode Matrix Gitter

用法

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