Slint 是一个功能强大的用户界面库,用于桌面和嵌入式的下一代原生 GUI 工具包。伴随着一系列令人兴奋的新功能和改进, Slint 这个广受欢迎的 UI 库发布了1.1 版本,这是 1.0 里程碑后的第一个重要功能更新版本。
除了新功能,Slint 1.1 带来了新的免版税开源许可证:之前 Slint 遵循 GPLv3 和专有商业许可,现在有了新的免版税许可选项。
此外,Slint 的示例和教程现在已获得 MIT 许可,同时该项目还采用了简化的贡献值协议( CLA )。
新功能亮点(New Feature Highlights)
翻译(Translations)
引入了基础设施来本地化您的应用程序。在 Slint 代码中使用新的 @tr()
宏来标记要翻译的字符串。然后使用 gettext 框架提取并处理这些字符串。
Text { text: @tr("Hello, World"); }
增强的 Fluent Style 和新的小部件
Slint 1.1 调整了 fluent
小部件样式,以符合 Microsoft 的现代 Fluent2 设计原则。集合中添加了两个新的小部件, Switch
和 ProgressIndicator
。
新的小部件库现在展示了新调整的 Fluent2 风格,以及两个新的小部件:
AccessKit 的辅助功能
在 Slint 的早期版本中,要使用屏幕阅读器等辅助技术,需要安装 Qt。
现在有了新的 AccessKit 集成,所有桌面平台上均可启用辅助功能支持。 AccessKit 是一个丰富的跨平台库,提供了对操作系统可访问性 API 的抽象。
OpenGL 集成
Slint 主要关注 2D 图形用户界面。此版本中引入了 API,允许将 3D OpenGL 渲染直接集成到 Slint 场景中。使用Image::from_borrowed_gl_2d_rgba_ture(Rust)
或Image::create_from_borrowed_gl_2d_rgbon_ture
(C++)函数从 OpenGL 纹理创建slint::Image
。OpenGL 纹理示例演示了如何使用此 API 将带有 OpenGL 的场景渲染为纹理,然后将其与小部件混合。
OpenGL 3D Scene rendered into a Slint scene with widgets
Slint 语言中的枚举声明
在 Slint 中支持声明枚举是呼声最高的功能之一,本次升级实现了此特征,在 .slint
代码中声明枚举, export
将它们导出到 Rust 或 C++,并享受重构时增加的类型安全性。
以下是如何在Slint中定义枚举的示例:
enum Color { red, green, blue }
作为一个实验,Olivier记录了自己实现这一功能的过程。如果你喜欢视频编码,可以在YouTube上查看他的录音(www.youtube.com/watch?v=c4O…).
较小但值得注意的功能和错误修复
- 启用新的
renderer-winit-skia-vulkan
功能以使用 Vulkan 渲染到屏幕。 - 使用
absolute-position
属性可查询 Slint 中任何元素的窗口绝对坐标。 - 使用
spawn_local()
在 Slint 的事件循环中运行 Rust futures 。 - 使用新的
mix
、with-alpha
和transparentize
颜色函数微调颜色。 - 修复了对使用文本渲染 SVG 的支持。
有关所有更改的完整列表,请查看更改日志。
许可证变更:新增更宽松的免版税许可证
- 除了 GPLv3 和专有商业许可,此版本添加了新的免版税许可作为第三个选项,该许可证可免费用于构建桌面或 Web 应用程序,并消除了 Copyleft 许可证的限制。
- 所有示例、教程中的示例代码等现在都可以在宽松的 MIT 许可证下使用。这可以在应用程序中自由复制、修改和使用代码,而不受任何 Copyleft 条款的限制。
- 简化了 CLA 协议,所有贡献现在均在 MIT 无署名许可证下实现,没有版权限制。
总结
Slint 是一个声明性 GUI 工具包,用于为用 Rust、C++或JavaScript编写的桌面和嵌入式应用程序构建本地用户界面。更多信息,请访问 slint.dev 或在上查看源代码 github.com/slint-ui/sl…
参考
- Slint 升级公告:slint.dev/blog/slint-…
- Slint 更改日志: github.com/slint-ui/sl…
- Slint 免版税许可证: github.com/slint-ui/sl…
- Slint Docs:slint.dev/docs
- Slint 语言文档:slint.dev/releases/1.…
- Slint Rust 文档: slint.dev/releases/1.…