13 个版本
0.1.6 | 2022 年 1 月 21 日 |
---|---|
0.1.5 | 2021 年 11 月 24 日 |
0.1.4 | 2021 年 10 月 22 日 |
0.1.0 | 2021 年 6 月 30 日 |
0.0.2 | 2020 年 10 月 22 日 |
#1311 in GUI
78 个月下载量
在 7 个 crate 中使用 (2 直接)
15KB
156 代码行
Slint 是一个用于在 Rust、C++ 或 JavaScript 中构建桌面和嵌入式应用程序原生用户界面的声明式 GUI 工具包。名称 Slint 来自我们的设计目标
- 可扩展性:Slint 应该支持响应式 UI 设计,允许跨平台使用,跨越操作系统和处理器架构,并支持多种编程语言。
- 轻量级:Slint 应该需要最少的资源,包括内存和处理能力,同时在任何设备上提供流畅、类似智能手机的用户体验。
- 直观性:设计师和开发者在享受 GUI 设计和开发过程的同时,应该感到高效。设计创建工具应该对设计师来说易于使用。同样,对于开发者来说,无论他们选择哪种编程语言,API 都应该一致且易于使用。
- 本地化:使用 Slint 构建的 GUI 应该符合最终用户对本地应用程序的期望,无论平台如何 - 桌面、移动、Web 或嵌入式系统。UI 设计应编译为机器代码,并提供只有本地应用程序才能提供的灵活性:访问完整的操作系统 API,利用所有 CPU 和 GPU 核心,连接到任何外围设备。
我们邀请您使用 Slint 并成为其社区的一部分。
访问 #MadeWithSlint 以查看使用 Slint 的项目并加入我们的 Slint 社区。
当前状态
Slint 正在积极开发。每个平台的支持状态如下
- 嵌入式: 准备就绪。Slint 正在被客户在生产嵌入式设备上使用,这些设备运行嵌入式 Linux 和 Windows。Slint 运行时需要的 RAM 少于 300KiB,可以在不同的处理器架构上运行,例如 ARM Cortex M、ESP32、STM32 等从 MCU 类别的到 ARM Cortex A、Intel x86 等从 MPU 类别。
- 桌面:进行中。虽然Slint在Windows、Linux和Mac上都很适用,但我们正在努力改进后续版本的平台支持。
- Web:进行中。Slint应用程序可以编译成WebAssembly,并可在网页浏览器中运行。由于存在许多其他Web框架,Web平台并不是我们的主要目标平台。目前,Web支持仅限于演示目的。
- 移动
- Android:进行中。在此处跟踪工作进展 https://github.com/slint-ui/slint/issues/46。
- iOS:待办。iOS支持将在Android初始支持完成后启动。
无障碍性
Slint支持许多小部件基于键盘的导航,用户界面可扩展。辅助技术如屏幕阅读器的基本基础设施已经到位。我们意识到,为了为有特殊需要的用户提供最佳支持,还需要做更多工作。
演示
嵌入式
RaspberryPi | STM32 | RP2040 |
---|---|---|
Raspberry Pi上Slint的视频 | STM32上Slint的视频 | RP2040上Slint的视频 |
桌面
Windows | macOS | Linux |
---|---|---|
使用WebAssembly的Web
打印机演示 | 拼图游戏 | 能源监控器 | 小部件展示厅 |
---|---|---|---|
开始使用
Hello World
UI是在一种声明性、易于使用、直观的领域特定语言中定义的,它提供了一种强大的方式来描述图形元素、它们的放置、层次结构、属性绑定以及不同状态间的数据流。
这里是必有的“Hello World”
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用户界面进行交互。
请参阅api
文件夹中每个语言目录的README
架构
应用程序由用Rust、C++或JavaScript编写的业务逻辑和.slint
用户界面设计标记组成,这些标记被编译成本地代码。
编译器
在编译时,`.slint` 文件会被编译。`.slint` 中的表达式是纯函数,编译器可以对其进行优化。例如,编译器可以选择“内联”属性并移除那些常量或未改变的属性。未来,我们希望通过预处理图像和文本来提高低端设备上的渲染时间。编译器可以确定一个 `Text` 或 `Image` 元素总是位于相同位置的另一个 `Image` 元素之上。因此,这两个元素可以预先渲染成一个单独的元素,从而减少渲染时间。
编译器使用典型的编译器阶段,包括词法分析、解析、优化,最后是代码生成。它为目标语言提供不同的代码生成后端。C++ 代码生成器生成 C++ 头文件,Rust 生成器生成 Rust 代码,等等。还包括动态语言的解释器。
运行时
运行时库由一个支持在 `.slint` 语言中声明的属性的引擎组成。具有其元素、项和属性的组件被布局在单个内存区域中,以减少内存分配。
在编译时可以配置渲染后端和样式
- 使用 OpenGL ES 2.0 进行渲染的
femtovg
渲染器。 - 使用 Skia 进行渲染的
skia
渲染器。 - 使用 CPU 进行渲染的
software
渲染器没有额外的依赖。
注意:当系统上安装了 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。
常见问题解答
请参阅我们单独的 FAQ。
关于我们(SixtyFPS GmbH)
我们对软件充满热情 - API设计、跨平台软件开发和用户界面组件。我们的目标是让每个人都能享受开发用户界面的乐趣:从JavaScript、C++或Rust开发者到UI/UX设计师。我们相信软件是自然生长的,保持其开源性是维持这种增长的最佳方式。我们的团队成员分布在全球各地的德国。
保持最新
- 关注 @slint-ui 在X/Twitter。
- 关注 @[email protected] 在Mastodon。
- 关注 @slint-ui 在LinkedIn。
联系我们
欢迎加入 Github discussions 进行一般聊天或提问。使用 Github issues 报告公开建议或错误。
我们在 我们的Mattermost实例 上聊天,您欢迎旁听或提问。
当然,您也可以通过电子邮件私下联系我们 [email protected]。
依赖
约1.5MB
约35K SLoC