6 个版本
0.1.5 | 2024年3月14日 |
---|---|
0.1.4 | 2024年2月20日 |
0.1.3 | 2023年4月3日 |
0.1.2 | 2021年11月24日 |
0.1.0 | 2020年8月26日 |
1305 在 GUI 中排名
63,354 每月下载量
在 45 个Crate中使用(通过 const-field-offset)
15KB
219 代码行
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: 待办。iOS 的支持将在 Android 的初始支持完成后开始。
无障碍性
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。
常见问题
请参阅我们的单独的FAQ。
关于我们(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
:
此软件包允许在常量或静态上下文中获取结构体字段的偏移量。
从 const_field_offset
软件包重新导出使用
依赖项
~310–770KB
~18K SLoC