31 个版本 (19 个稳定版)
1.7.2 | 2024 年 8 月 14 日 |
---|---|
1.7.1 | 2024 年 7 月 25 日 |
1.6.0 | 2024 年 5 月 13 日 |
1.5.1 | 2024 年 3 月 20 日 |
0.2.1 | 2022 年 3 月 10 日 |
#933 在 GUI
34,148 每月下载量
被 23 个 库(21 个直接)使用
1.5MB
33K SLoC
Slint 是一个用于构建桌面和嵌入式应用程序原生用户界面的声明式 GUI 工具包,支持用 Rust、C++ 或 JavaScript 编写。名称 Slint 来自我们的设计目标
- 可扩展性:Slint 应支持响应式 UI 设计,允许跨操作系统和处理器架构使用,并支持多种编程语言。
- 轻量级:Slint 应该需要最少的资源,在内存和处理能力方面,同时在任何设备上提供流畅、类似智能手机的用户体验。
- 直观性:设计师和开发者应该在使用 GUI 设计和开发过程中感到高效,同时享受设计过程。设计创建工具应该对设计师来说易于使用。同样,对于开发者来说,API 应该一致且易于使用,无论他们选择哪种编程语言。
- 原生性:使用 Slint 构建的 GUI 应该符合最终用户对原生应用程序的期望,无论平台是桌面、移动、Web 还是嵌入式系统。UI 设计应该编译成机器代码,并提供只有原生应用程序才能提供的灵活性:访问完整的操作系统 API,利用所有 CPU 和 GPU 内核,连接到任何外围设备。
我们邀请您使用 Slint 并成为其社区的一员。
访问 #MadeWithSlint 查看一些使用 Slint 的项目,并加入我们的 Slint 社区。
当前状态
Slint 正在积极开发。每个平台的支持状态如下
- 嵌入式: 就绪。Slint 正在生产环境中由客户在运行嵌入式 Linux 和 Windows 的嵌入式设备上使用。Slint 运行时需要少于 300KiB 的 RAM,并且可以在不同的处理器架构上运行,例如来自 MCU 类别的 ARM Cortex M、ESP32、STM32,以及来自 MPU 类别的 ARM Cortex A、Intel x86。
- 桌面:进行中。虽然Slint在Windows、Linux和Mac上都很适用,但我们正在努力在后续版本中改进平台支持。
- Web:进行中。Slint应用可以编译成WebAssembly,并在浏览器中运行。由于存在许多其他Web框架,Web平台不是我们的主要目标平台。Web支持目前仅限于演示目的。
- 移动
- Android:进行中。在此处跟踪工作进度https://github.com/slint-ui/slint/issues/46。
- iOS:待办。在Android初始支持完成后,将开始支持iOS。
无障碍性
Slint支持许多小部件的键盘导航,用户界面可缩放。辅助技术(如屏幕阅读器)的基本基础设施已经到位。我们清楚,为了为有特殊需要的用户提供最佳支持,还需要做更多的工作。
演示
嵌入式
树莓派 | STM32 | RP2040 |
---|---|---|
树莓派上Slint的视频 | STM32上Slint的视频 | RP2040上Slint的视频 |
桌面
Windows | macOS | Linux |
---|---|---|
使用WebAssembly的Web
打印机演示 | 滑动拼图 | 能源监控器 | 小部件展示馆 |
---|---|---|---|
开始使用
你好,世界!
UI定义在一个声明性、易于使用、直观且提供了描述图形元素、它们的放置、它们的层次结构、属性绑定以及在不同状态间数据流的有效方法的域特定语言中。
下面是必不可少的“你好,世界”示例。
export component HelloWorld inherits Window {
width: 400px;
height: 400px;
Text {
y: parent.width / 2;
x: parent.x + 200px;
text: "Hello, world";
color: blue;
}
}
文档
更多详情,请参阅Slint语言文档。
示例文件夹examples包含示例和演示,展示了如何使用Slint标记语言以及如何从支持的编程语言与Slint用户界面交互。
示例文件夹docs包含大量信息,包括构建说明和内部开发者文档。
请参阅api文件夹中每个语言目录的README。
架构
应用程序由用Rust、C++或JavaScript编写的业务逻辑和编译成本地代码的.slint
用户界面设计标记组成。
编译器
.slint
文件是预编译的。在 .slint
中的表达式是纯函数,编译器可以对其进行优化。例如,编译器可以选择将属性“内联”并删除那些常量或未更改的属性。未来我们希望通过预处理图像和文本来提高低端设备的渲染时间。编译器可以确定一个 Text
或一个 Image
元素总是在同一位置的其他 Image
元素之上。因此,这两个元素可以预渲染成一个单一元素,从而减少渲染时间。
编译器使用典型的编译器阶段,包括词法分析、解析、优化和最终代码生成。它为目标语言的代码生成提供不同的后端。C++ 代码生成器生成一个 C++ 头文件,Rust 生成器生成 Rust 代码,等等。还包括动态语言的解释器。
运行时
运行时库由一个支持在 .slint
语言中声明的属性的引擎组成。具有其元素、项目和属性的组件布局在单个内存区域中,以减少内存分配。
渲染后端和样式可以在编译时配置
femtovg
渲染器使用 OpenGL ES 2.0 进行渲染。skia
渲染器使用 Skia 进行渲染。software
渲染器使用 CPU,没有额外的依赖。
注意:当系统上安装了 Qt 时,将可用 qt
风格,使用 Qt 的 QStyle 实现具有本地外观的小部件。
工具
我们有一些工具可以帮助开发 .slint 文件
- 一个 LSP 服务器,为许多编辑器添加了自动完成和 .slint 文件的实时预览等功能。
- 它包含在 Visual Studio Code 扩展 中,可在市场获取。
- 一个 slint-viewer 工具,用于显示 .slint 文件。使用
--auto-reload
参数可以轻松在您工作时预览您的 UI(当使用 LSP 预览不可用时)。 - SlintPad,一个在线编辑器,可以尝试 .slint 语法,无需安装任何东西(源代码)。
- 一个 更新器,可以将旧版本的 .slint 文件转换为新版本。
- 一个实验性的 Figma 导入器。
请查看我们的 编辑器 README,了解如何配置您的首选编辑器以与 Slint 一起良好工作。
许可证
您可以选择以下任一许可证使用 Slint
另请参阅 许可证常见问题解答
贡献
我们欢迎您的贡献:可以是代码、错误报告或反馈。
- 如果您在某个问题中看到 RFC 标签,请随时参与。
- 有关贡献指南,请参阅 CONTRIBUTING.md。
常见问题
请参阅我们单独的常见问题。
关于我们(SixtyFPS GmbH)
我们对软件充满热情——API 设计、跨平台软件开发和用户界面组件。我们的目标是让每个人都能享受开发用户界面的乐趣:从 JavaScript、C++ 或 Rust 开发者到 UI/UX 设计师。我们相信软件是自然成长的,而保持开源是维持这种成长的最佳方式。我们的团队成员分布在全球的德国。
保持更新
- 在 X/Twitter 上关注@slint-ui。
- 在 Mastodon 上关注@[email protected]。
- 在 LinkedIn 上关注@slint-ui。
联系我们
请随时加入Github discussions进行一般聊天或提问。使用Github issues报告公开建议或错误。
我们使用我们的 Mattermost 实例进行聊天,您也可以在此收听或提问。
当然,您也可以通过电子邮件[email protected]私下联系我们。
lib.rs
:
此软件包作为 slint 软件包的配套软件包。它旨在允许您从 .slint
文件中编译 build.rs
脚本。
此软件包的主要入口点是 [compile()
] 函数
示例
在您的 Cargo.toml 文件中
[package]
...
build = "build.rs"
[dependencies]
slint = "1.7.0"
...
[build-dependencies]
slint-build = "1.7.0"
在 build.rs
文件中
fn main() {
slint_build::compile("ui/hello.slint").unwrap();
}
然后在您的主文件中
slint::include_modules!();
fn main() {
HelloWorld::new().run();
}
依赖关系
~18–27MB
~411K SLoC