1个稳定版本
7.0.0 | 2024年2月19日 |
---|
#151 in GUI
600KB
12K SLoC
克洛克
克洛克是新型的Czkawka前端,使用Slint编写,与主要使用C代码的Gtk 4前端不同。
不同的工具包意味着不同的外观、限制和功能,因此您不应期望与Gtk 4前端相同的功能(但当然我希望实现其他项目中大部分功能)。
用法
克洛克不应有任何特殊的运行时要求 - 它应该在几乎任何设备上运行,包括非抗性设备。
预构建的二进制文件应在Windows 10、11、Mac、Ubuntu 22.04/20.04以及类似操作系统上工作 - https://github.com/qarmin/czkawka/releases/
编译
在Ubuntu上,您需要安装以下依赖项
sudo apt install libfontconfig-dev libfreetype-dev
默认编译是通过 cargo build --release
完成的,并且应该在大多数系统上工作。
您需要最新版本的Rust来编译它,因为克洛克旨在支持最新的Slint版本,这应该提供最佳体验。
唯一的例外是构建skia渲染器,这是一个非默认功能,如果需要使用它,可以手动启用,这需要在Windows上使用msvc编译器(不确定如何确切安装)。
此外,skia渲染器是用C++编写的,并在x86_64和arm64等平台上使用预构建的二进制文件,因此如果您使用不同的架构,此库将从源代码构建,这可能需要很长时间并需要额外的依赖项。
附加渲染器
默认情况下,仅启用了femtovg(opengl)和软件渲染器,但您可以通过在编译应用程序时启用附加功能来启用更多渲染器。
大多数用户将希望使用具有窗口系统/合成器的应用程序,因此建议使用以 winit
命名的功能。
例如。
cargo build --release --features "winit_skia_opengl"
cargo build --release --features "winit_software"
要使用不同的渲染器运行应用程序,您需要使用它,通过添加 SLINT_BACKEND
环境变量
SLINT_BACKEND=winit-femtovg ./target/release/krokiet
SLINT_BACKEND=software ./target/release/krokiet
SLINT_BACKEND=skia ./target/release/krokiet # This uses now opengl - https://github.com/slint-ui/slint/discussions/3799
当您使用无效的/不存在的后端时,应用程序将显示警告
slint winit: unrecognized renderer skia, falling back to FemtoVG
要检查实际使用的内容,请添加 SLINT_DEBUG_PERFORMANCE=refresh_lazy,console,overlay
环境变量
SLINT_DEBUG_PERFORMANCE=refresh_lazy,console,overlay cargo run
应打印类似的内容
Slint: Build config: debug; Backend: software
不同的主题
应用是以深色流畅主题为基础创建的,但在编译时可以通过将环境变量 SLINT_STYLE
设置为 fluent-light
来使用浅色主题,例如。
SLINT_STYLE=fluent-light cargo run -- --path .
Slint 还支持其他主题,但它们不是由本应用程序官方支持,可能存在错误(但看起来与当前的样式搭配的 cupertino 看起来相当不错)。
SLINT_STYLE=cupertino-light cargo run -- --path .
SLINT_STYLE=cupertino-dark cargo run -- --path .
SLINT_STYLE=material-light cargo run -- --path .
SLINT_STYLE=material-dark cargo run -- --path .
如何帮助?
- 建议在 GUI 中进行可能的设计更改——当然,它们应该在 slint 中简单地实现,同时考虑到性能方面。
- 修改用户界面——GUI 使用类似于 qml 的简单语言编写,可以在 vscode/web 中进行修改并实时预览——slint 实时预览示例
- 改进应用程序的 Rust 代码
为什么选择 Slint?
有许多原因让我决定在 Krokiet 中使用 Slint 作为工具包,而不是其他工具包。
工具包 | 优点 | 缺点 |
---|---|---|
Gtk 4 | - 优秀的 Linux 支持 - Cambalache 可以用来创建图形 GUI - 优秀的 gtk4-rs 绑定(但有时不太直观) |
- 硬编译/交叉编译,并在 Windows 上捆绑所有必需的库 - 强制使用特定的 GUI 创建风格 - 奇怪的错误,基本功能无法使用等(主要在 Windows 上) - 强制在 Linux 上使用有缺陷/过时的但动态加载的库版本(例如 Ubuntu 22.04 上的 4.6)——并非所有修复都已回溯 |
Qt | - QML 支持——简化了从代码创建 GUI,易于使用且功能强大 - 非常灵活的框架 - TypeScript/javascript 与 QML 互操作性 - 可能是最成熟的 GUI 库 |
- 新的 Qt 绑定有限 - 交叉编译困难 - 在 QML 中创建和使用无效状态非常容易(意外的 null/undefined 值,混乱的属性绑定等) - 商业许可证或 GPL |
Slint | - 内部语言编译成原生代码 - 使用 Vscode/Vscodium 进行实时 GUI 预览,无需使用 Rust - 全 Rust 解决方案——易于编译/交叉编译,运行时需求最小化 - Slint 文件中的静态类型检查 |
- 内部 .slint 语言比 QML 更有限 - 越界和类似错误被静默地纠正而不是打印错误——这可能导致难以调试的问题 - 只提供 GPL 开源许可证 - 弹出窗口几乎不存在 - 内部小部件几乎不可定制,通常相当有限 |
Iced | - ~100% Rust 代码——因此编译简单 - Elm 架构——易于理解 |
- 主要由一个人维护——修复错误和实现新功能的速度减慢 - GUI 只能从 Rust 代码创建,这对于创建复杂的 GUI 来说真的很糟糕(主要由于 Rust 编译时间) - 文档几乎不存在 |
Tauri | - 容易创建 UI(至少对于 Web 开发者来说)——使用 html/css/js - 比较便携 |
- Webview 依赖——它并不真正轻量级,在一些平台上编译困难,例如在 Linux 上 webRTC 无法工作 - 无法选择目录——文件选择器只能选择文件——虽然小事,但对我来说很重要 - Rust 与 Javascript 之间的通信性能不佳(在 Tauri 2 中问题较少) |
由于我没有时间创建复杂且美观的 GUI,我需要一个辅助工具来创建 GUI 而不是从 Rust 创建(我不想使用不同的语言,因为这会使与 czkawka_core 的通信更加困难),所以我决定不查看只允许从 Rust 创建 GUI 的 Iced。
GTK和QT也因为C/C++内部使用造成的交叉编译问题而被我放弃。在Czkawka中使用GTK是我开始寻找其他工具包的原因。
Tauri - 我并不真的喜欢使用JavaScript,因为我已经使用过Qt(C++) + QML + TypeScript的组合,并且我发现用这种语言创建UI可能一开始很简单,但后来任何较大的更改都会导致许多运行时错误。
因此,只剩下Slint及其优缺点。
许可证
代码根据MIT许可证授权,但由于Slint许可证的限制,整个项目是根据GPL-3.0许可证授权的。
名称
为什么叫Krokiet(英文:Croquette)?
因为我喜欢波兰语的krokiet(即croquette),特别是有肉、蘑菇包裹在面包糠中的那种,它让我垂涎欲滴。
我还考虑了其他我喜欢的食物,比如 pierogi、żurek、pączek、schabowy或zapiekanka。
这个名字应该比czkawka或szyszka更容易记住。
依赖项
~61–105MB
~1.5M SLoC