diff --git a/Cargo.lock b/Cargo.lock index c9ac55c..5db9451 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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", diff --git a/krokiet/Cargo.toml b/krokiet/Cargo.toml index 8bffa6e..fd88895 100644 --- a/krokiet/Cargo.toml +++ b/krokiet/Cargo.toml @@ -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] diff --git a/krokiet/README.md b/krokiet/README.md index b8ef78d..3dd4447 100644 --- a/krokiet/README.md +++ b/krokiet/README.md @@ -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
- Elm architecture - simple to understand | - Mostly maintained by one person - slows down fixing bugs and implementing new features
- 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
- Docs are almost non-existent | | Tauri | - Easy to create ui(at least for web developers) - uses html/css/js
- Quite portable | - Webview dependency - it is not really lightweight and can be hard to compile on some platforms
- Cannot select directory - file chooser only can choose files - small thing but important for me
- 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. \ No newline at end of file +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. \ No newline at end of file