20 个版本 (11 个重大更新)
0.12.1 | 2024 年 2 月 22 日 |
---|---|
0.10.0 | 2023 年 7 月 28 日 |
0.8.0 | 2023 年 2 月 18 日 |
0.6.0 | 2022 年 12 月 7 日 |
0.0.0 | 2019 年 5 月 29 日 |
#21 在 GUI
20,684 每月下载量
用于 108 个工具包 (100 个直接使用)
1.5MB
26K SLoC
功能
- 简单、易于使用、功能全面的 API
- 类型安全、响应式编程模型
- 跨平台支持 (Windows、macOS、Linux 和 Web)
- 响应式布局
- 内置小部件(包括 文本输入、可滚动内容 等!)
- 自定义小部件支持(创建自己的!)
- 带有性能指标的调试覆盖层
- 一等支持异步操作(使用 futures!)
- 模块化生态系统 分割成可重用部分
- 一个 与渲染器无关的本地运行时,允许与现有系统集成
- 两个 内置渲染器 利用
wgpu
和tiny-skia
iced_wgpu
支持 Vulkan、Metal 和 DX12iced_tiny_skia
提供作为后备的软件替代方案
- 一个 窗口外壳
- 一个 Web 运行时 利用 DOM
Iced 目前是实验性软件。 查看路线图,查看问题,并 自由贡献!
安装
将 iced
添加到您的 Cargo.toml
中的依赖项
iced = "0.12"
如果你的项目使用的是2021年之前的Rust版本,那么你还需要在[package]
部分设置resolver = "2"
。
Iced运行速度快,master
分支可能会包含破坏性变更!如果你想了解特定版本,请查看版本列表。
概述
Iced受到Elm架构的启发,期望你将用户界面拆分为四个不同的概念
- 状态 — 你的应用程序的状态
- 消息 — 用户交互或你关心的有意义的事件
- 视图逻辑 — 一种以小部件的形式显示你的状态的方式,这些小部件可能在用户交互时产生消息
- 更新逻辑 — 一种响应消息并更新你的状态的方式
我们可以构建一些内容来了解这是如何工作的!假设我们想要一个简单的计数器,可以通过两个按钮进行增加和减少。
我们首先对应用程序的状态进行建模
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现在能够
- 获取我们的视图逻辑的结果,并布局其小部件。
- 处理来自系统的事件并为我们更新逻辑产生消息。
- 绘制最终的用户界面。
实现细节
Iced最初是为了将Elm和Elm架构的简洁性带到Coffee,一个我正在开发的2D游戏引擎中。
该库的核心是在2019年5月通过这个拉取请求实现的。最初是作为第一个alpha版本发布的,作为一个无渲染器GUI库。该库不提供渲染器,并在ggez
(一个游戏库)之上实现了当前的示例。
从那时起,重点已转向提供一个包含电池的、面向最终用户的GUI库,同时保持生态系统模块化
贡献/反馈
我们非常欢迎贡献!如果你想贡献,请阅读我们的贡献指南以获取更多详细信息。
也欢迎反馈!你可以在我们的Discourse论坛中创建一个新的主题,或者加入我们的Discord服务器进行聊天。
赞助商
Iced的开发得到了Cryptowatch团队在Kraken.com的支持。
依赖项
~21–63MB
~1M SLoC