Iced
受 Elm 启发的 Rust 的跨平台 GUI 库
Rust 的跨平台 GUI 库,专注于简单性和类型安全。灵感来自elm。
Iced 目前是实验性软件。 查看路线图, 检查问题,并随时贡献!
添加 iced
为您的依赖项 Cargo.toml
:
iced = "0.4"
如果您的项目使用的是 2021 年以前的 Rust 版本,那么您还需要 resolver = "2"
在该 [package]
部分中进行设置。
iced的移动速度很快,master
分支可以包含重大变化! 如果您想了解特定版本,请查看版本列表。
受The Elm Architecture 的启发,Iced 希望您将用户界面拆分为四个不同的概念:
我们可以构建一些东西来看看它是如何工作的!假设我们想要一个可以使用两个按钮递增和递减的简单计数器。
我们首先对应用程序的状态进行建模:
struct Counter {
// The counter value
value: i32,
}
接下来,我们需要定义计数器的可能用户交互:按钮按下。这些交互是我们的 信息 :
#[derive(Debug, Clone, Copy)]
pub enum Message {
IncrementPressed,
DecrementPressed,
}
现在,让我们通过将它们放在我们的 视图逻辑中来显示实际的计数器:
use iced::widget::{button, column, text, Column};
impl Counter {
pub fn view(&self) -> Column<Message> {
// We use a column: a simple vertical layout
column![
// The increment button. We tell it to produce an
// `IncrementPressed` message when pressed
button("+").on_press(Message::IncrementPressed),
// We show the value of the counter here
text(self.value).size(50),
// The decrement button. We tell it to produce a
// `DecrementPressed` message when pressed
button("-").on_press(Message::DecrementPressed),
]
}
}
最后,我们需要能够对任何产生的消息做出反应,并在我们的更新逻辑中相应地改变我们的 状态 :
impl Counter {
// ...
pub fn update(&mut self, message: Message) {
match message {
Message::IncrementPressed => {
self.value += 1;
}
Message::DecrementPressed => {
self.value -= 1;
}
}
}
}
这就是一切!我们只是写了一个完整的用户界面。冰镇现在能够:
Iced 最初是为了将Elm和 Elm Architecture的简单性引入到Coffee中而诞生的,Coffee是我正在开发的 2D 游戏引擎。
该库的核心于 2019 年 5 月在此拉取请求中实施。 第一个 alpha 版本最终作为 与渲染器无关的 GUI 库发布。该库没有提供渲染器,而是在游戏库之上实现了当前的游览示例。ggez
从那时起,重点转向提供包含电池、面向最终用户的 GUI 库,同时保持生态系统模块化:
GraphicsAdapterNotFound
This occurs when the selected built-in renderer is not able to create a context.
这通常会在iced_wgpu
用作没有支持硬件(需要 Vulkan、Metal 或 DX12)的渲染器时发生。在这种情况下,您可以尝试使用 iced_glow
渲染器:
首先,检查它是否适用于
cargo run --features iced/glow --package game_of_life
然后在你的项目中使用它
iced = { version = "0.4", default-features = false, features = ["glow"] }
注意: 您有可能拥有至少支持 OpenGL 2.1 或 OpenGL ES 2.0 的硬件,但如果您不支持,那么现在没有软件回退,因此这意味着您的硬件不支持 Iced。
非常感谢您的贡献!如果您想贡献,请阅读我们的贡献指南以获取更多详细信息。
也欢迎反馈!你可以打开一个问题,或者,如果你想谈谈,可以来我们的Discord 服务器聊天。此外,您可以通过Rust 社区 Discord #games-and-graphics
的频道和 #gui-and-ui
频道找到我(以及一群很棒的人)。我去那里。lone_scientist#9554