1
0
Fork 0
mirror of synced 2024-05-17 19:03:08 +12:00
This commit is contained in:
Rafał Mikrut 2023-11-10 20:19:35 +01:00
parent a0e151e5fe
commit 49871e433c
3 changed files with 138 additions and 83 deletions

124
Cargo.lock generated
View file

@ -231,19 +231,6 @@ dependencies = [
"futures-core",
]
[[package]]
name = "async-channel"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d37875bd9915b7d67c2f117ea2c30a0989874d0b2cb694fe25403c85763c0c9e"
dependencies = [
"concurrent-queue",
"event-listener 3.0.1",
"event-listener-strategy",
"futures-core",
"pin-project-lite",
]
[[package]]
name = "async-executor"
version = "1.6.0"
@ -276,7 +263,7 @@ version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776"
dependencies = [
"async-channel 1.9.0",
"async-channel",
"async-executor",
"async-io 1.13.0",
"async-lock 2.8.0",
@ -397,7 +384,7 @@ version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d"
dependencies = [
"async-channel 1.9.0",
"async-channel",
"async-global-executor",
"async-io 1.13.0",
"async-lock 2.8.0",
@ -606,16 +593,16 @@ dependencies = [
[[package]]
name = "blocking"
version = "1.5.0"
version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "864b30e660d766b7e9b47347d9b6558a17f1cfa22274034fa6f55b274b3e4620"
checksum = "8c36a4d0d48574b3dd360b4b7d95cc651d2b6557b6402848a27d4b228a473e2a"
dependencies = [
"async-channel 2.1.0",
"async-lock 3.0.0",
"async-channel",
"async-lock 2.8.0",
"async-task",
"fastrand 2.0.1",
"futures-io",
"futures-lite 2.0.1",
"futures-lite 1.13.0",
"piper",
"tracing",
]
@ -1014,7 +1001,8 @@ dependencies = [
[[package]]
name = "const-field-offset"
version = "0.1.3"
source = "git+https://github.com/slint-ui/slint.git#2acaa222d0aa8c3787f6cd700d0c76768b9612ed"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6304465f16f463cddc572b737c3df93576edd3a6b53f057bd8beeb29f4ef8dfd"
dependencies = [
"const-field-offset-macro",
"field-offset",
@ -1023,7 +1011,8 @@ dependencies = [
[[package]]
name = "const-field-offset-macro"
version = "0.1.3"
source = "git+https://github.com/slint-ui/slint.git#2acaa222d0aa8c3787f6cd700d0c76768b9612ed"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57aaaad9185d3bcb3afe63549d8ba60b2fb0ea8dc2da83f62dd56805edf56fd1"
dependencies = [
"proc-macro2",
"quote",
@ -1646,9 +1635,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
[[package]]
name = "errno"
version = "0.3.5"
version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860"
checksum = "7c18ee0ed65a5f1f81cac6b1d213b69c35fa47d4252ad41f1486dbd8226fe36e"
dependencies = [
"libc",
"windows-sys 0.48.0",
@ -2241,9 +2230,9 @@ dependencies = [
[[package]]
name = "getrandom"
version = "0.2.10"
version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
dependencies = [
"cfg-if",
"js-sys",
@ -2673,7 +2662,8 @@ dependencies = [
[[package]]
name = "i-slint-backend-linuxkms"
version = "1.3.0"
source = "git+https://github.com/slint-ui/slint.git#2acaa222d0aa8c3787f6cd700d0c76768b9612ed"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8955a5385270c9a8d76530e872a397eb6717bd1020f16c09c7f9c7fc1a59cd39"
dependencies = [
"calloop 0.11.0",
"drm",
@ -2694,7 +2684,8 @@ dependencies = [
[[package]]
name = "i-slint-backend-selector"
version = "1.3.0"
source = "git+https://github.com/slint-ui/slint.git#2acaa222d0aa8c3787f6cd700d0c76768b9612ed"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "059bb78add36aaa9cc1a4f7e5978f47e5ec1ece31ca281451cc646ef3a7e4d85"
dependencies = [
"cfg-if",
"i-slint-backend-linuxkms",
@ -2707,7 +2698,8 @@ dependencies = [
[[package]]
name = "i-slint-backend-winit"
version = "1.3.0"
source = "git+https://github.com/slint-ui/slint.git#2acaa222d0aa8c3787f6cd700d0c76768b9612ed"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8992e2356a2331502261987d2a6803e798bf7a2a5272907713c08f46a7ad0652"
dependencies = [
"bytemuck",
"cfg-if",
@ -2742,7 +2734,8 @@ dependencies = [
[[package]]
name = "i-slint-common"
version = "1.3.0"
source = "git+https://github.com/slint-ui/slint.git#2acaa222d0aa8c3787f6cd700d0c76768b9612ed"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "181a597710932e4ba09cd29fed3d479587fe33d3c880b0addd5421dbed4940bd"
dependencies = [
"cfg-if",
"derive_more",
@ -2753,7 +2746,8 @@ dependencies = [
[[package]]
name = "i-slint-compiler"
version = "1.3.0"
source = "git+https://github.com/slint-ui/slint.git#2acaa222d0aa8c3787f6cd700d0c76768b9612ed"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0020485613a80b6dfe86a46f93c946b8382045ccbb29f7b9faf20725658fc7f0"
dependencies = [
"by_address",
"codemap",
@ -2782,7 +2776,8 @@ dependencies = [
[[package]]
name = "i-slint-core"
version = "1.3.0"
source = "git+https://github.com/slint-ui/slint.git#2acaa222d0aa8c3787f6cd700d0c76768b9612ed"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "408aa4fe8a28ae7284d18d0b35612fe172c096392dc429342e3626926c70e595"
dependencies = [
"auto_enums",
"bytemuck",
@ -2825,7 +2820,8 @@ dependencies = [
[[package]]
name = "i-slint-core-macros"
version = "1.3.0"
source = "git+https://github.com/slint-ui/slint.git#2acaa222d0aa8c3787f6cd700d0c76768b9612ed"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8d582a1644a5d818ee813f393490a5b2496936ef3962b62ff077e42a81626ef"
dependencies = [
"quote",
"syn 2.0.39",
@ -2834,7 +2830,8 @@ dependencies = [
[[package]]
name = "i-slint-renderer-femtovg"
version = "1.3.0"
source = "git+https://github.com/slint-ui/slint.git#2acaa222d0aa8c3787f6cd700d0c76768b9612ed"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fbc056f6daab6224bb55a55751456ab2897a41ade84ca7772001a1cff46a6b26"
dependencies = [
"cfg-if",
"const-field-offset",
@ -2866,7 +2863,8 @@ dependencies = [
[[package]]
name = "i-slint-renderer-skia"
version = "1.3.0"
source = "git+https://github.com/slint-ui/slint.git#2acaa222d0aa8c3787f6cd700d0c76768b9612ed"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "82c4893627aa07956397bc997b4bcb83a22e1b364f8109be72505168837e2eb7"
dependencies = [
"ash",
"bytemuck",
@ -2909,7 +2907,7 @@ dependencies = [
"serde",
"serde_derive",
"thiserror",
"toml 0.8.6",
"toml 0.8.8",
"unic-langid",
]
@ -3497,9 +3495,9 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
[[package]]
name = "linux-raw-sys"
version = "0.4.10"
version = "0.4.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"
checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829"
[[package]]
name = "locale_config"
@ -4786,7 +4784,7 @@ dependencies = [
"bitflags 2.4.1",
"errno",
"libc",
"linux-raw-sys 0.4.10",
"linux-raw-sys 0.4.11",
"windows-sys 0.48.0",
]
@ -4920,18 +4918,18 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73"
[[package]]
name = "serde"
version = "1.0.191"
version = "1.0.192"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a834c4821019838224821468552240d4d95d14e751986442c816572d39a080c9"
checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.191"
version = "1.0.192"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "46fa52d5646bce91b680189fe5b1c049d2ea38dabb4e2e7c8d00ca12cfbfbcfd"
checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1"
dependencies = [
"proc-macro2",
"quote",
@ -5062,7 +5060,7 @@ dependencies = [
"regex",
"serde_json",
"tar",
"toml 0.8.6",
"toml 0.8.8",
"ureq",
]
@ -5091,7 +5089,8 @@ dependencies = [
[[package]]
name = "slint"
version = "1.3.0"
source = "git+https://github.com/slint-ui/slint.git#2acaa222d0aa8c3787f6cd700d0c76768b9612ed"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b9d589a30c2812877798eecf2b5cb51e7f2c4531f7c9e8746be6b25a24f37e6"
dependencies = [
"const-field-offset",
"i-slint-backend-selector",
@ -5107,7 +5106,8 @@ dependencies = [
[[package]]
name = "slint-build"
version = "1.3.0"
source = "git+https://github.com/slint-ui/slint.git#2acaa222d0aa8c3787f6cd700d0c76768b9612ed"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2edbdfb7bdb1688273656c301ffa221a3939869620e7a12f02d7cae6532098ee"
dependencies = [
"i-slint-compiler",
"spin_on",
@ -5118,7 +5118,8 @@ dependencies = [
[[package]]
name = "slint-macros"
version = "1.3.0"
source = "git+https://github.com/slint-ui/slint.git#2acaa222d0aa8c3787f6cd700d0c76768b9612ed"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee1b8b49389eb768793499fce1c60d613ac52d14fe77383a65f233327cd65715"
dependencies = [
"i-slint-compiler",
"proc-macro2",
@ -5137,9 +5138,9 @@ dependencies = [
[[package]]
name = "smallvec"
version = "1.11.1"
version = "1.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"
checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
[[package]]
name = "smithay-client-toolkit"
@ -5571,7 +5572,7 @@ dependencies = [
"cfg-expr",
"heck",
"pkg-config",
"toml 0.8.6",
"toml 0.8.8",
"version-compare",
]
@ -5790,14 +5791,14 @@ dependencies = [
[[package]]
name = "toml"
version = "0.8.6"
version = "0.8.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ff9e3abce27ee2c9a37f9ad37238c1bdd4e789c84ba37df76aa4d528f5072cc"
checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35"
dependencies = [
"serde",
"serde_spanned",
"toml_datetime",
"toml_edit 0.20.7",
"toml_edit 0.21.0",
]
[[package]]
@ -5825,6 +5826,17 @@ name = "toml_edit"
version = "0.20.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81"
dependencies = [
"indexmap 2.1.0",
"toml_datetime",
"winnow",
]
[[package]]
name = "toml_edit"
version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03"
dependencies = [
"indexmap 2.1.0",
"serde",
@ -6252,7 +6264,8 @@ dependencies = [
[[package]]
name = "vtable"
version = "0.1.11"
source = "git+https://github.com/slint-ui/slint.git#2acaa222d0aa8c3787f6cd700d0c76768b9612ed"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f4c7506238561777a1861d3dc3c0001877c475187e7bc4392ea87ebf631fd9c"
dependencies = [
"const-field-offset",
"portable-atomic",
@ -6263,7 +6276,8 @@ dependencies = [
[[package]]
name = "vtable-macro"
version = "0.1.10"
source = "git+https://github.com/slint-ui/slint.git#2acaa222d0aa8c3787f6cd700d0c76768b9612ed"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6b2b8eecdb8e4284adf5546fc518f048f6dc33e7203dbe36fa93a4add39b31f6"
dependencies = [
"proc-macro2",
"quote",

View file

@ -11,20 +11,14 @@ repository = "https://github.com/qarmin/czkawka"
build = "build.rs"
[dependencies]
#slint = "1.2.2"
#slint = { git = "https://github.com/slint-ui/slint.git"}
# Try to use only needed features from https://github.com/slint-ui/slint/blob/master/api/rs/slint/Cargo.toml#L23-L31
slint = { git = "https://github.com/slint-ui/slint.git", default-features = false, features = ["std",
#slint = { path = "/home/rafal/test/slint/api/rs/slint/", default-features = false, features = ["std",
#slint = { git = "https://github.com/slint-ui/slint.git", default-features = false, features = [
slint = { version = "1.3.0", default-features = false, features = [
"std",
"backend-winit",
# "accessibility",
"compat-1-2"
] }
#slint = { path = "/home/rafal/test/slint/api/rs/slint/", default-features = false, features = ["std",
# "backend-winit",
# "accessibility",
# "compat-1-2"
#] }
rand = "0.8.5"
czkawka_core = { version = "6.1.0", path = "../czkawka_core" }
@ -39,8 +33,8 @@ serde = "1.0"
serde_json = "1.0"
[build-dependencies]
#slint-build = "1.2.2"
slint-build = { git = "https://github.com/slint-ui/slint.git" }
slint-build = "1.3.0"
#slint-build = { git = "https://github.com/slint-ui/slint.git" }
#slint-build = { path = "/home/rafal/test/slint/api/rs/build/"}
[features]

View file

@ -1,16 +1,21 @@
# Krokiet
Krokiet is new Czkawka frontend written in Slint(written mostly in Rust) in opposite to Gtk 4 frontend which uses mostly C code.
Krokiet is new Czkawka frontend written in Slint(written mostly in Rust) in opposite to Gtk 4 frontend which uses mostly
C code.
Different toolkit means different look, limitations and features, so you should not expect same features like in Gtk 4 frontend.
Different toolkit means different look, limitations and features, so you should not expect same features like in Gtk 4
frontend(but of course I want implement most of features from other project).
## Requirements
Krokiet should not have any special runtime requirements - it should work on almost any OpenGL ES 2 capable device.
Alternatively, it can be run with software rendering.
Alternatively, it can be run with software rendering on computers that don't have graphics card.
## Compilation
On Ubuntu you need to install this dependencies:
```
sudo apt install libfontconfig-dev libfreetype-dev
```
@ -20,48 +25,66 @@ Default compilation is done by `cargo build --release` and should work on most s
You need the latest available version of Rust to compile it, because Krokiet aims to support the latest slint verions,
that should provide best experience(fixed more bugs/new features).
The only exception is building non default skia renderer, that require on windows msvc compiler(not sure how to exactly install it).
The only exception is building non default skia renderer, that require on windows msvc compiler(not sure how to exactly
install it).
Also skia renderer is written in C++ and uses on platforms like x86_64 and arm64 prebuild binaries, so if you are using different architecture, this library will be build from source, which can take a lot of time and require additional dependencies.
Also skia renderer is written in C++ and uses on platforms like x86_64 and arm64 prebuild binaries, so if you are using
different architecture, this library will be build from source, which can take a lot of time and require additional
dependencies.
## Additional Renderers
By default, only femtovg(opengl) and software renderer are enabled, but you can enable more renderers by compiling app with additional features.
Most of the users will want to use app with windowing system/compositor, so features starting with `winit` in name are recommended.
By default, only femtovg(opengl) and software renderer are enabled, but you can enable more renderers by compiling app
with additional features.
Most of the users will want to use app with windowing system/compositor, so features starting with `winit` in name are
recommended.
E.g.
E.g.
```
cargo build --release --features "winit_skia_opengl"
cargo build --release --features "winit_software"
```
to run app with different renderers you need to use it, by adding `SLINT_BACKEND` environment
```
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
```
when you will use invalid/non-existing backend, app will show warning
```
slint winit: unrecognized renderer skia, falling back to FemtoVG
```
to check what is really used, add `SLINT_DEBUG_PERFORMANCE=refresh_lazy,console,overlay` env
```
SLINT_DEBUG_PERFORMANCE=refresh_lazy,console,overlay cargo run
```
should print something like
```
Slint: Build config: debug; Backend: software
```
## Dark/Different theme
App was created with white fluent theme by default, but is easily possible to use dark theme by setting `SLINT_STYLE` environment variable to `fluent-dark` during compilation
e.g.
App was created with white fluent theme by default, but is easily possible to use dark theme by setting `SLINT_STYLE`
environment variable to `fluent-dark` during compilation
e.g.
```
SLINT_STYLE=fluent-dark cargo run -- --path .
```
Slint supports also other themes, but they are not officially supported by this app and may be broken.
```
SLINT_STYLE=cupertino-light cargo run -- --path .
SLINT_STYLE=cupertino-dark cargo run -- --path .
@ -70,12 +93,28 @@ SLINT_STYLE=material-dark cargo run -- --path .
```
## How to help?
- Suggesting possible design changes in the gui - of course, they should be possible to be simply implemented in the slint keeping in mind the performance aspect as well
- Modifying user interface - gui is written in simple language similar to qml - [slint live preview example](https://slint.dev/releases/1.2.2/editor/?load_demo=examples/printerdemo/ui/printerdemo.slint)
- Suggesting possible design changes in the gui - of course, they should be possible to be simply implemented in the
slint keeping in mind the performance aspect as well
- Modifying user interface - gui is written in simple language similar to qml, that can be modified in vscode/web with
live preview - [slint live preview example](https://slint.dev/releases/1.2.2/editor/?load_demo=examples/printerdemo/ui/printerdemo.slint)
- Improving libraries used by Krokiet e.g. czkawka_core, image-rs etc.
- Improving app rust code
## Missing features available in GTK 4 frontend
- preview support
- selecting/deselecting results
- icons in buttons
- resizable input files panel
- settings
- moving files
- deleting files
- implementing all modes
- multiple languages
## Why Slint?
There are multiple reasons why I decided to use Slint as toolkit for Krokiet over other toolkits.
| Toolkit | Pros | Cons |
@ -86,14 +125,22 @@ There are multiple reasons why I decided to use Slint as toolkit for Krokiet ove
| Iced | - ~100% rust code - so compilation is simple </br> - Elm architecture - simple to understand | - Mostly maintained by one person - slows down fixing bugs and implementing new features </br> - GUI can be created only from rust code, which really is bad for creating complex GUIs(mostly due rust compile times) and this is also </br> - Docs are almost non-existent |
| Tauri | - Easy to create ui(at least for web developers) - uses html/css/js</br>- Quite portable | - Webview dependency - it is not really lightweight and can be hard to compile on some platforms</br>- Cannot select directory - file chooser only can choose files - small thing but important for me</br>- Not very performant Rust <=> Javascript communication |
Since I don't have time to create really complex and good looking GUI, I needed a helper tool to create GUI not from Rust(I don't want to use different language, because this will make communication with czkawka_core harder) so I decided to not look at Iced which only allows to create GUI from Rust.
Since I don't have time to create really complex and good looking GUI, I needed a helper tool to create GUI not from
Rust(I don't want to use different language, because this will make communication with czkawka_core harder) so I decided
to not look at Iced which only allows to create GUI from Rust.
GTK and QT also I throw away due cross compilation problems caused mostly by using C/C++ internally.
Tauri - I don't really like to use Javascript because I already used it with Qt(C++) + QML + Typescript combination and I found that creating ui in such language may be simple at start but later any bigger changes cause a lot of runtime errors.
Tauri - I don't really like to use Javascript because I already used it with Qt(C++) + QML + Typescript combination and
I found that creating ui in such language may be simple at start but later any bigger changes cause a lot of runtime
errors.
So only Slint left.
So only Slint left with its cons and pros.
## Name
Why Krokiet(eng. Croquette)?
Because I like croquettes, the ones with meat, mushrooms wrapped in breadcrumbs... it makes my mouth water.
Because I like croquettes(Polish version), the ones with meat, mushrooms wrapped in breadcrumbs... it makes my mouth
water.
I considered also other dishes which I like to eat like pierogi, żurek, pączek, schabowy or zapiekanka.
This name should be a lot of easier to remember than Czkawka.