#用户界面 #slint #桌面应用程序 #跨平台UI #后端 #本地 #设计

sixtyfps-rendering-backend-default

用于选择 SixtyFPS 默认渲染后端的辅助库

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日

#1052 in GUI

Download history 43/week @ 2024-03-11 17/week @ 2024-03-18 9/week @ 2024-03-25 117/week @ 2024-04-01 15/week @ 2024-04-08 28/week @ 2024-04-15 34/week @ 2024-04-22 18/week @ 2024-04-29 16/week @ 2024-05-06 16/week @ 2024-05-13 22/week @ 2024-05-20 43/week @ 2024-05-27 22/week @ 2024-06-03 14/week @ 2024-06-10 22/week @ 2024-06-17 15/week @ 2024-06-24

83 每月下载量
3 个工具包中(2 个直接使用)中使用

(GPL-3.0-only…

635KB
12K SLoC

Slint Slint

Build Status REUSE status Discussions

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,并且可以在不同的处理器架构上运行,例如 ARM Cortex M、ESP32、STM32 等来自 MCU 类别的处理器,以及 ARM Cortex A、Intel x86 等来自 MPU 类别的处理器。
  • 桌面进行中。虽然 Slint 适合 Windows、Linux 和 Mac,但我们正在后续版本中改进平台支持。
  • Web: 进行中。Slint 应用可以编译成 WebAssembly,并在网页浏览器中运行。由于存在许多其他 Web 框架,Web 平台不是我们的主要目标平台。目前,Web 支持仅限于演示目的。
  • 移动

无障碍性

Slint 支持许多小部件的键盘导航,用户界面可缩放。辅助技术(如屏幕阅读器)的基本基础设施已到位。我们意识到需要做更多工作,以便为有特殊需求用户提供最佳支持。

演示

嵌入式

树莓派 STM32 RP2040
树莓派上 Slint 的视频 STM32 上 Slint 的视频 RP2040 上 Slint 的视频

桌面

Windows macOS Linux
Screenshot of the Gallery on Windows Screenshot of the Gallery on macOS Screenshot of the Gallery on Linux

使用 WebAssembly 的 Web

打印机演示 拼图游戏 能源监控器 小部件画廊
Screenshot of the Printer Demo Screenshot of the Slide Puzzle Screenshot of the Energy Monitor Demo Screenshot of the Gallery Demo

入门

你好,世界!

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 用户界面设计标记组成,该标记编译成本地代码。

Architecture Overview

编译器

`.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

  1. 免费许可,
  2. GNU GPLv3,
  3. 付费许可.

另请参阅 许可常见问题解答

贡献

我们欢迎您的贡献:可以是代码、错误报告或反馈。

常见问题解答

请参阅我们的单独FAQ

关于我们(SixtyFPS GmbH)

我们对软件充满热情——API设计、跨平台软件开发和用户界面组件。我们的目标是让每个人都能享受开发用户界面的乐趣:从JavaScript、C++或Rust开发者到UI/UX设计师。我们相信软件是自然生长的,保持其开源性是维持这种增长的最佳方式。我们的团队成员分布在全球各地。

保持更新

联系我们

请随时加入Github discussions进行一般聊天或提问。使用Github issues报告公开建议或错误。

我们可以在我们的Mattermost实例中聊天,您也可以加入旁听或提问。

当然,您也可以通过电子邮件[email protected]私下联系我们。

依赖关系

~4–20MB
~271K SLoC