From 354f600f922265abf0b9b6a77a0ba80a70467a34 Mon Sep 17 00:00:00 2001 From: Andy Killorin <37423245+Speedy6451@users.noreply.github.com> Date: Sat, 8 Mar 2025 12:05:50 -0500 Subject: [PATCH] added icon (not testable on sway) --- interface/Cargo.lock | 478 +++++++++++++++++++++++++++++++++++- interface/Cargo.toml | 1 + interface/assets/lizard.png | Bin 0 -> 26886 bytes interface/src/gui.rs | 16 +- 4 files changed, 491 insertions(+), 4 deletions(-) create mode 100644 interface/assets/lizard.png diff --git a/interface/Cargo.lock b/interface/Cargo.lock index 04315c5..8fc4206 100644 --- a/interface/Cargo.lock +++ b/interface/Cargo.lock @@ -152,6 +152,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "aligned-vec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" + [[package]] name = "alsa" version = "0.9.1" @@ -240,6 +246,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "arbitrary" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" + [[package]] name = "arboard" version = "3.4.1" @@ -255,6 +267,17 @@ dependencies = [ "x11rb", ] +[[package]] +name = "arg_enum_proc_macro" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + [[package]] name = "arrayref" version = "0.3.9" @@ -514,6 +537,29 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +[[package]] +name = "av1-grain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6678909d8c5d46a42abcf571271e15fdbc0a225e3646cf23762cd415046c78bf" +dependencies = [ + "anyhow", + "arrayvec", + "log", + "nom", + "num-rational", + "v_frame", +] + +[[package]] +name = "avif-serialize" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98922d6a4cfbcb08820c69d8eeccc05bb1f29bfa06b4f5b1dbfe9a868bd7608e" +dependencies = [ + "arrayvec", +] + [[package]] name = "backtrace" version = "0.3.74" @@ -544,7 +590,7 @@ dependencies = [ "bitflags 2.8.0", "cexpr", "clang-sys", - "itertools", + "itertools 0.13.0", "proc-macro2", "quote", "regex", @@ -568,6 +614,12 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" +[[package]] +name = "bit_field" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" + [[package]] name = "bitflags" version = "1.3.2" @@ -583,6 +635,12 @@ dependencies = [ "serde", ] +[[package]] +name = "bitstream-io" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" + [[package]] name = "block" version = "0.1.6" @@ -620,6 +678,12 @@ dependencies = [ "piper", ] +[[package]] +name = "built" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b" + [[package]] name = "bumpalo" version = "3.16.0" @@ -716,6 +780,16 @@ dependencies = [ "nom", ] +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] + [[package]] name = "cfg-if" version = "1.0.0" @@ -808,6 +882,12 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + [[package]] name = "combine" version = "4.6.7" @@ -953,12 +1033,37 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +[[package]] +name = "crunchy" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" + [[package]] name = "crypto-common" version = "0.1.6" @@ -1342,6 +1447,21 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "exr" +version = "1.73.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83197f59927b46c04a183a619b7c29df34e63e63c7869320862268c0ef687e0" +dependencies = [ + "bit_field", + "half", + "lebe", + "miniz_oxide", + "rayon-core", + "smallvec", + "zune-inflate", +] + [[package]] name = "fastrand" version = "2.3.0" @@ -1517,6 +1637,16 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "gif" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" +dependencies = [ + "color_quant", + "weezl", +] + [[package]] name = "gimli" version = "0.31.1" @@ -1669,6 +1799,16 @@ dependencies = [ "bitflags 2.8.0", ] +[[package]] +name = "half" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +dependencies = [ + "cfg-if", + "crunchy", +] + [[package]] name = "hash32" version = "0.2.1" @@ -1710,6 +1850,12 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + [[package]] name = "hermit-abi" version = "0.1.19" @@ -1916,10 +2062,37 @@ checksum = "cd6f44aed642f18953a158afeb30206f4d50da59fbc66ecb53c66488de73563b" dependencies = [ "bytemuck", "byteorder-lite", + "color_quant", + "exr", + "gif", + "image-webp", "num-traits", "png", + "qoi", + "ravif", + "rayon", + "rgb", + "tiff", + "zune-core", + "zune-jpeg", ] +[[package]] +name = "image-webp" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b77d01e822461baa8409e156015a1d91735549f0f2c17691bd2d996bef238f7f" +dependencies = [ + "byteorder-lite", + "quick-error", +] + +[[package]] +name = "imgref" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" + [[package]] name = "immutable-chunkmap" version = "2.0.6" @@ -1953,6 +2126,7 @@ dependencies = [ "egui_extras", "heapless", "home", + "image", "pitch-detection", "postcard", "rust-music-theory", @@ -1960,6 +2134,26 @@ dependencies = [ "tokio", ] +[[package]] +name = "interpolate_name" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.13.0" @@ -2000,6 +2194,12 @@ dependencies = [ "libc", ] +[[package]] +name = "jpeg-decoder" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" + [[package]] name = "js-sys" version = "0.3.77" @@ -2033,12 +2233,28 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +[[package]] +name = "lebe" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" + [[package]] name = "libc" version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +[[package]] +name = "libfuzzer-sys" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf78f52d400cf2d84a3a973a78a592b4adc535739e0a5597a0da6f0c357adc75" +dependencies = [ + "arbitrary", + "cc", +] + [[package]] name = "libloading" version = "0.8.6" @@ -2094,6 +2310,15 @@ version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" +[[package]] +name = "loop9" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" +dependencies = [ + "imgref", +] + [[package]] name = "mach2" version = "0.4.2" @@ -2112,6 +2337,16 @@ dependencies = [ "libc", ] +[[package]] +name = "maybe-rayon" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" +dependencies = [ + "cfg-if", + "rayon", +] + [[package]] name = "memchr" version = "2.7.4" @@ -2283,6 +2518,12 @@ dependencies = [ "jni-sys", ] +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + [[package]] name = "nix" version = "0.29.0" @@ -2312,6 +2553,22 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "noop_proc_macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + [[package]] name = "num-complex" version = "0.4.6" @@ -2348,6 +2605,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ + "num-bigint", "num-integer", "num-traits", ] @@ -2841,6 +3099,34 @@ name = "profiling" version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afbdc74edc00b6f6a218ca6a5364d6226a259d4b8ea1af4a0ea063f27e179f4d" +dependencies = [ + "profiling-procmacros", +] + +[[package]] +name = "profiling-procmacros" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30" +dependencies = [ + "quote", + "syn 2.0.96", +] + +[[package]] +name = "qoi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quick-xml" @@ -2900,12 +3186,82 @@ dependencies = [ "getrandom 0.2.15", ] +[[package]] +name = "rav1e" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9" +dependencies = [ + "arbitrary", + "arg_enum_proc_macro", + "arrayvec", + "av1-grain", + "bitstream-io", + "built", + "cfg-if", + "interpolate_name", + "itertools 0.12.1", + "libc", + "libfuzzer-sys", + "log", + "maybe-rayon", + "new_debug_unreachable", + "noop_proc_macro", + "num-derive", + "num-traits", + "once_cell", + "paste", + "profiling", + "rand", + "rand_chacha", + "simd_helpers", + "system-deps", + "thiserror", + "v_frame", + "wasm-bindgen", +] + +[[package]] +name = "ravif" +version = "0.11.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2413fd96bd0ea5cdeeb37eaf446a22e6ed7b981d792828721e74ded1980a45c6" +dependencies = [ + "avif-serialize", + "imgref", + "loop9", + "quick-error", + "rav1e", + "rayon", + "rgb", +] + [[package]] name = "raw-window-handle" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + [[package]] name = "redox_syscall" version = "0.4.1" @@ -2959,6 +3315,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" +[[package]] +name = "rgb" +version = "0.8.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" + [[package]] name = "ron" version = "0.8.1" @@ -3109,6 +3471,15 @@ dependencies = [ "syn 2.0.96", ] +[[package]] +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +dependencies = [ + "serde", +] + [[package]] name = "sha1" version = "0.10.6" @@ -3153,6 +3524,15 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +[[package]] +name = "simd_helpers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" +dependencies = [ + "quote", +] + [[package]] name = "slab" version = "0.4.9" @@ -3292,7 +3672,7 @@ version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e6e163a520367c465f59e0a61a23cfae3b10b6546d78b6f672a382be79f7110" dependencies = [ - "heck", + "heck 0.3.3", "proc-macro2", "quote", "syn 1.0.109", @@ -3331,6 +3711,25 @@ dependencies = [ "syn 2.0.96", ] +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr", + "heck 0.5.0", + "pkg-config", + "toml", + "version-compare", +] + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + [[package]] name = "tempfile" version = "3.17.1" @@ -3383,6 +3782,17 @@ dependencies = [ "syn 2.0.96", ] +[[package]] +name = "tiff" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + [[package]] name = "tiny-skia" version = "0.11.4" @@ -3447,11 +3857,26 @@ dependencies = [ "syn 2.0.96", ] +[[package]] +name = "toml" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + [[package]] name = "toml_datetime" version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde", +] [[package]] name = "toml_edit" @@ -3460,6 +3885,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ "indexmap", + "serde", + "serde_spanned", "toml_datetime", "winnow", ] @@ -3590,12 +4017,29 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" +[[package]] +name = "v_frame" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f32aaa24bacd11e488aa9ba66369c7cd514885742c9fe08cfe85884db3e92b" +dependencies = [ + "aligned-vec", + "num-traits", + "wasm-bindgen", +] + [[package]] name = "vec_map" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" +[[package]] +name = "version-compare" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" + [[package]] name = "version_check" version = "0.9.5" @@ -3845,6 +4289,12 @@ dependencies = [ "web-sys", ] +[[package]] +name = "weezl" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" + [[package]] name = "wgpu" version = "23.0.1" @@ -4631,6 +5081,30 @@ dependencies = [ "syn 2.0.96", ] +[[package]] +name = "zune-core" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" + +[[package]] +name = "zune-inflate" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "zune-jpeg" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99a5bab8d7dedf81405c4bb1f2b83ea057643d9cb28778cea9eecddeedd2e028" +dependencies = [ + "zune-core", +] + [[package]] name = "zvariant" version = "4.2.0" diff --git a/interface/Cargo.toml b/interface/Cargo.toml index b4c2952..8732af4 100644 --- a/interface/Cargo.toml +++ b/interface/Cargo.toml @@ -20,3 +20,4 @@ egui-toast = "0.16.0" home = "0.5.11" atomic_float = "1.1.0" chrono = "0.4.40" +image = "0.25.5" diff --git a/interface/assets/lizard.png b/interface/assets/lizard.png new file mode 100644 index 0000000000000000000000000000000000000000..f76add009e506326456ae95214c8b39021b33b60 GIT binary patch literal 26886 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 literal 0 HcmV?d00001 diff --git a/interface/src/gui.rs b/interface/src/gui.rs index 0ec5318..f458bf4 100644 --- a/interface/src/gui.rs +++ b/interface/src/gui.rs @@ -2,7 +2,8 @@ use std::{cell::OnceCell, path::PathBuf, sync::atomic::Ordering, time::Duration}; use common::{ControlPacket, TelemetryPacket}; -use eframe::{egui::{self, containers, Align2, Checkbox, Context, Id, Label}, Storage}; +use eframe::{egui::{self, containers, Align2, Checkbox, Context, IconData, Id, ImageSource, Label}, Storage}; +use image::ImageFormat; use tokio::{runtime::Runtime, sync::{mpsc, watch::Receiver}}; use egui_toast::{Toast, Toasts}; @@ -11,10 +12,21 @@ use crate::{storage_dir::storage_dir, POWER_THRESHOLD}; pub const GUI: OnceCell = OnceCell::new(); pub fn gui(data: Receiver, toasts: mpsc::Receiver, executor: Runtime) -> eframe::Result { + let icon = egui::include_image!("../assets/lizard.png"); + + let icon = image::load_from_memory_with_format(include_bytes!("../assets/lizard.png"), ImageFormat::Png).unwrap(); + + let icon = IconData { + width: icon.width(), + height: icon.height(), + rgba: icon.into_rgba8().into_raw(), + }; + let options = eframe::NativeOptions { viewport: egui::ViewportBuilder::default() .with_inner_size([700.0, 480.0]) - .with_app_id("cruisecontrol"), + .with_app_id("cruisecontrol") + .with_icon(icon), ..Default::default() }; eframe::run_native(