Masonry 0.1 发布,Rust GUI 框架


Masonry 是一个 Rust GUI 框架,其作者最近刚发布了 0.1 版本,并提出了对 Rust UI 的愿景,他称之为"Fearless GUI",具备以下特点:

  • 可迭代
  • 具备灵活性
  • 可测试
  • 可观测
  • 可重用

最新发布的 Masonry 0.1 旨在实现上述目标,目前提供了用于创建窗口的平台(使用 Glazier 作为后端),每个窗口都包含一个 Widget 树。它还提供了用于在 runtime 检测 Widget 树的工具,可编写单元测试,方便开发者调试和维护应用程序。

基于 Masonry,开发者可实现即时模式 (immediate-mode) GUI、Elm 架构、函数式响应 GUI。

示例代码

use masonry::widget::{
Button, CrossAxisAlignment, Flex, Label, Portal, SizedBox, TextBox, WidgetMut,
};
use masonry::{
Action, AppDelegate, AppLauncher, Color, DelegateCtx, Env, WidgetId, WindowDescription,
WindowId,
};

struct Delegate {
next_task: String,
}

impl AppDelegate for Delegate {
fn on_action(
&mut self,
ctx: &mut DelegateCtx,
action: Action,
) {
match action {
Action::ButtonPressed | Action::TextEntered(_) => {
let mut root: WidgetMut<Portal<Flex>> = ctx.get_root();
if self.next_task != "" {
let mut flex = root.child_mut();
flex.add_child(Label::new(self.next_task.clone()));
}
}
Action::TextChanged(new_text) => {
self.next_task = new_text.clone();
}
_ => {}
}
}
}

fn main() {
// The main button and text box with some space below,
// all inside a scrollable area.
let root_widget = Portal::new(
Flex::column()
.with_child(
Flex::row()
.with_child(TextBox::new(""))
.with_child(Button::new("Add task")),
)
.with_spacer(VERTICAL_WIDGET_SPACING),
)
.constrain_horizontal(true);

let main_window = WindowDescription::new(root_widget)
.title("To-do list")
.window_size((400.0, 400.0));

AppLauncher::with_window(main_window)
.with_delegate(Delegate {
next_task: String::new(),
})
.launch()
.expect("Failed to launch application");
}

发布公告


相關推薦

2023-02-24

经过一年多的开发,Ambient 终于发布了 0.1 版本,这是一款采用 Rust 构建的开源多人游戏引擎。 据介绍,Ambient 是一个用于构建高性能多人游戏和 3D 应用程序的 runtime,使用了 WebAssembly 和 WebGPU 技术,与任何编译为 WebAssembly 或在

2023-06-28

Slint 1.1 的发布,这是 1.0 里程碑后的第一个重要功能更新。 除了新功能,Slint 1.1 带来了新的免版税开源许可证:之前 Slint 遵循 GPLv3 和专有商业许可,现在有了新的免版税许可选项。 此外,Slint 的示例和教程现在已获得 MIT 许

2022-12-13

egui 0.20 已发布。egui 是易于使用、可移植的即时模式 (immediate mode) GUI 库,采用 Rust 编写,可运行在 Web 和原生应用中。 更新亮点 支持 thin space 添加与 AccessKit 的可选集成,以实现平台可访问性 APIs (#2294) 破

2022-10-07

Pop!_OS Linux 发行版的下一个演变。有趣的是,对于这个用 Rust 编写的大型 COSMIC 桌面项目,他们决定不再使用 GTK 工具包,而是使用 Iced-Rs 作为替代,后者是原生 Rust 跨平台图形工具包。 参与 COSMIC 项目的一位 System76 工程师在&n

2024-10-14

Tauri 2.0 稳定版已于近日正式发布。在此之际,InfoWorld 资深作家 Serdar Yegulalp 发布了一篇文章,探讨了由 Rust 驱动的 Tauri 和由 JavaScript 驱动的 Electron 这两个跨平台框架之间差异。 Electron “你很有可能是通过 Electron 的核心技术

2022-05-05

egui 0.18 已发布。egui 是易于使用、可移植的即时模式 (immediate mode) GUI 库,采用 Rust 编写,可运行在 Web 和原生应用中。 更新亮点 在 egui 中嵌入 3D 渲染 在明亮模式下提供更好的文本对比度 新增 egui_extras::Table 添加Plot::all

2023-04-05

Slint 1.0 已发布,标志着项目已顺利从开发阶段“毕业”,可正式用于生产环境。 1.0 文档:https://slint-ui.com/releases/1.0.0/docs/slint/ Slint(最初称为"SixtyFPS")是一个 Rust 编写的综合性 UI 工具包,用于为桌面和嵌入式设备构建原生用

2023-09-29

egui 0.23 版本已经发布了。egui 是易于使用、可移植的即时模式 (immediate mode) GUI 库,采用 Rust 编写,可运行在 Web 和原生应用中。 此版本包含一个简单且强大的图像 API: // Load from web: ui.image("https://www.example.com/some_image.png"); //

2023-11-13

于为桌面和嵌入式设备构建原生用户界面。 近日,Slint 发布了 1.3 版本,引入许多增强开发体验的新功能和改进。 下载地址:https://github.com/slint-ui/slint/releases/tag/v1.3.0 下面是值得关注的亮点: 为 Windows 和 Mac 引入新的

2023-03-11

rontend 和 Datanode 之间的操作 近日,GreptimeDB 发布了 0.1 版本,并在公告写道,自去年 11 月开源以来,已经近 4 个月,团队将之前设定的里程碑拆分成了 v0.1, v0.2 和 v0.3 三个小阶段,最终希望可以在 v0.3 交付一个单

2022-07-06

OpenAPI Generator v6.0.1 现已发布。OpenAPI Generator 可用于在给定 OpenAPI 规范(v2, v3)的情况下自动生成 API 客户端库、server stubs、文档以及配置。 v6.0.1 是一个包含增强功能的补丁版本,修复了涵盖 20 种编程语言的错误。有关更改

2022-06-12

,速度极快,它的灵感来源于 Hapi 和 Express。 Fastify 4.0.1 发布了,本此更新带来以下内容: ci:移动concurrency到正确的工作流程 #3981 chore(docs): 修正错字 #3983 将 Migration-Guide-V4 移动到 guides/  #3987 将路径参数示例

2023-09-25

开发者在用 React 开发时面临的一些棘手问题。v2.0.1 现已发布,具体更新内容包括: Patch Changes 修复使用 pnpm 时 MDX 文件的类型 ( #7491 ) 更新getDependenciesToBundle以处理没有 main exports 的 ESM 包 ( #7272 ) 注意,这

2022-11-18

与统一维护管理的模块。 通知公告:系统通知公告信息发布维护。 代码生成:一键生成模块 CRUD 的功能,包括后端和前端 Vue 等相关代码。 案例演示:常规代码生成器一键生成后的演示案例。 软件信息 软件名称:RXTh