From 090bea5805aa2b95a7f820f89bb3b3bae839b83b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabor=20K=C3=B6rber?= Date: Sat, 8 Jun 2024 23:41:07 +0200 Subject: [PATCH] feat: icon for app, and windows specific build code --- Cargo.lock | 971 ++++++++++++++++----------------- Cargo.toml | 24 +- build.rs | 5 +- icons/soundboard.ico | Bin 0 -> 216106 bytes soundboard.rc | 2 +- src/bin/strinto_declarative.rs | 68 --- src/bin/ui_icon.rs | 251 +++++++++ src/bin/ui_test.rs | 5 +- src/bin/ui_tray_icon.rs | 11 +- src/icon.rs | 144 +++++ src/main.rs | 3 +- src/ui.rs | 68 ++- src/vbplay.rs | 4 +- strinto/.gitignore | 1 - strinto/Cargo.lock | 47 -- strinto/Cargo.toml | 14 - strinto/src/lib.rs | 62 --- 17 files changed, 937 insertions(+), 743 deletions(-) create mode 100644 icons/soundboard.ico delete mode 100644 src/bin/strinto_declarative.rs create mode 100644 src/bin/ui_icon.rs create mode 100644 src/icon.rs delete mode 100644 strinto/.gitignore delete mode 100644 strinto/Cargo.lock delete mode 100644 strinto/Cargo.toml delete mode 100644 strinto/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 8a2aee3..55ea40e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -126,6 +126,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 = "allocator-api2" version = "0.2.18" @@ -210,6 +216,18 @@ dependencies = [ "libc", ] +[[package]] +name = "anyhow" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" + +[[package]] +name = "arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" + [[package]] name = "arboard" version = "3.4.0" @@ -225,6 +243,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.66", +] + [[package]] name = "arrayref" version = "0.3.7" @@ -427,29 +456,6 @@ dependencies = [ "syn 2.0.66", ] -[[package]] -name = "atk" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4af014b17dd80e8af9fa689b2d4a211ddba6eb583c1622f35d0cb543f6b17e4" -dependencies = [ - "atk-sys", - "glib", - "libc", -] - -[[package]] -name = "atk-sys" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "251e0b7d90e33e0ba930891a505a9a35ece37b2dd37a14f3ffc306c13b980009" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - [[package]] name = "atomic-waker" version = "1.1.2" @@ -510,6 +516,29 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876c75a42f6364451a033496a14c44bffe41f5f4a8236f697391f11024e596d2" +dependencies = [ + "arrayvec", +] + [[package]] name = "axum" version = "0.7.5" @@ -627,6 +656,12 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +[[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" @@ -638,9 +673,12 @@ name = "bitflags" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" -dependencies = [ - "serde", -] + +[[package]] +name = "bitstream-io" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c12d1856e42f0d817a835fe55853957c85c8c8a470114029143d3f12671446e" [[package]] name = "block" @@ -727,6 +765,12 @@ dependencies = [ "piper", ] +[[package]] +name = "built" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6a6c0b39c38fd754ac338b00a88066436389c0f029da5d37d1e01091d9b7c17" + [[package]] name = "bumpalo" version = "3.13.0" @@ -759,37 +803,18 @@ version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +[[package]] +name = "byteorder-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" + [[package]] name = "bytes" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" -[[package]] -name = "cairo-rs" -version = "0.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" -dependencies = [ - "bitflags 2.5.0", - "cairo-sys-rs", - "glib", - "libc", - "once_cell", - "thiserror", -] - -[[package]] -name = "cairo-sys-rs" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - [[package]] name = "calloop" version = "0.12.4" @@ -1107,10 +1132,20 @@ dependencies = [ ] [[package]] -name = "crossbeam-channel" -version = "0.5.13" +name = "crossbeam-deque" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +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", ] @@ -1121,6 +1156,12 @@ version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + [[package]] name = "crypto-common" version = "0.1.6" @@ -1164,27 +1205,6 @@ dependencies = [ "crypto-common", ] -[[package]] -name = "dirs" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" -dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.48.0", -] - [[package]] name = "dispatch" version = "0.2.0" @@ -1252,7 +1272,7 @@ dependencies = [ "glow", "glutin", "glutin-winit", - "image", + "image 0.24.9", "js-sys", "log", "objc", @@ -1334,6 +1354,12 @@ dependencies = [ "winit 0.29.15", ] +[[package]] +name = "either" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" + [[package]] name = "emath" version = "0.27.2" @@ -1480,6 +1506,22 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "exr" +version = "1.72.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "887d93f60543e9a9362ef8a21beedd0a833c5d9610e18c67abe15a5963dcb1a4" +dependencies = [ + "bit_field", + "flume", + "half", + "lebe", + "miniz_oxide", + "rayon-core", + "smallvec", + "zune-inflate", +] + [[package]] name = "fastrand" version = "1.9.0" @@ -1504,16 +1546,6 @@ dependencies = [ "simd-adler32", ] -[[package]] -name = "field-offset" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" -dependencies = [ - "memoffset 0.9.1", - "rustc_version", -] - [[package]] name = "flate2" version = "1.0.30" @@ -1524,6 +1556,15 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "flume" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +dependencies = [ + "spin", +] + [[package]] name = "fnv" version = "1.0.7" @@ -1581,17 +1622,6 @@ version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" -[[package]] -name = "futures-executor" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - [[package]] name = "futures-io" version = "0.3.30" @@ -1626,17 +1656,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "futures-macro" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - [[package]] name = "futures-sink" version = "0.3.30" @@ -1657,7 +1676,6 @@ checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ "futures-core", "futures-io", - "futures-macro", "futures-sink", "futures-task", "memchr", @@ -1666,64 +1684,6 @@ dependencies = [ "slab", ] -[[package]] -name = "gdk" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5ba081bdef3b75ebcdbfc953699ed2d7417d6bd853347a42a37d76406a33646" -dependencies = [ - "cairo-rs", - "gdk-pixbuf", - "gdk-sys", - "gio", - "glib", - "libc", - "pango", -] - -[[package]] -name = "gdk-pixbuf" -version = "0.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" -dependencies = [ - "gdk-pixbuf-sys", - "gio", - "glib", - "libc", - "once_cell", -] - -[[package]] -name = "gdk-pixbuf-sys" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gdk-sys" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31ff856cb3386dae1703a920f803abafcc580e9b5f711ca62ed1620c25b51ff2" -dependencies = [ - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "pkg-config", - "system-deps", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -1755,44 +1715,22 @@ dependencies = [ "wasi", ] +[[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.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" -[[package]] -name = "gio" -version = "0.18.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "gio-sys", - "glib", - "libc", - "once_cell", - "pin-project-lite", - "smallvec", - "thiserror", -] - -[[package]] -name = "gio-sys" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", - "winapi", -] - [[package]] name = "gl_generator" version = "0.14.0" @@ -1804,53 +1742,6 @@ dependencies = [ "xml-rs", ] -[[package]] -name = "glib" -version = "0.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" -dependencies = [ - "bitflags 2.5.0", - "futures-channel", - "futures-core", - "futures-executor", - "futures-task", - "futures-util", - "gio-sys", - "glib-macros", - "glib-sys", - "gobject-sys", - "libc", - "memchr", - "once_cell", - "smallvec", - "thiserror", -] - -[[package]] -name = "glib-macros" -version = "0.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" -dependencies = [ - "heck 0.4.1", - "proc-macro-crate 2.0.2", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.66", -] - -[[package]] -name = "glib-sys" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" -dependencies = [ - "libc", - "system-deps", -] - [[package]] name = "glob" version = "0.3.1" @@ -1934,17 +1825,6 @@ dependencies = [ "gl_generator", ] -[[package]] -name = "gobject-sys" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - [[package]] name = "gpu-alloc" version = "0.6.0" @@ -1998,55 +1878,13 @@ dependencies = [ ] [[package]] -name = "gtk" -version = "0.18.1" +name = "half" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93c4f5e0e20b60e10631a5f06da7fe3dda744b05ad0ea71fee2f47adf865890c" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" dependencies = [ - "atk", - "cairo-rs", - "field-offset", - "futures-channel", - "gdk", - "gdk-pixbuf", - "gio", - "glib", - "gtk-sys", - "gtk3-macros", - "libc", - "pango", - "pkg-config", -] - -[[package]] -name = "gtk-sys" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "771437bf1de2c1c0b496c11505bdf748e26066bbe942dfc8f614c9460f6d7722" -dependencies = [ - "atk-sys", - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "system-deps", -] - -[[package]] -name = "gtk3-macros" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6063efb63db582968fb7df72e1ae68aa6360dcfb0a75143f34fc7d616bad75e" -dependencies = [ - "proc-macro-crate 1.3.1", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.66", + "cfg-if", + "crunchy", ] [[package]] @@ -2074,12 +1912,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - [[package]] name = "heck" version = "0.5.0" @@ -2243,6 +2075,45 @@ dependencies = [ "png", ] +[[package]] +name = "image" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd54d660e773627692c524beaad361aca785a4f9f5730ce91f42aabe5bce3d11" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "exr", + "gif", + "image-webp", + "num-traits", + "png", + "qoi", + "ravif", + "rayon", + "rgb", + "tiff", + "zune-core", + "zune-jpeg", +] + +[[package]] +name = "image-webp" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d730b085583c4d789dfd07fdcf185be59501666a90c97c40162b37e4fdad272d" +dependencies = [ + "byteorder-lite", + "thiserror", +] + +[[package]] +name = "imgref" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44feda355f4159a7c757171a77de25daf6411e217b4cabd03bd6650690468126" + [[package]] name = "indexmap" version = "2.0.0" @@ -2262,6 +2133,17 @@ dependencies = [ "cfg-if", ] +[[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.66", +] + [[package]] name = "io-lifetimes" version = "1.0.11" @@ -2273,6 +2155,15 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.9" @@ -2310,6 +2201,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.69" @@ -2319,17 +2216,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "keyboard-types" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" -dependencies = [ - "bitflags 2.5.0", - "serde", - "unicode-segmentation", -] - [[package]] name = "khronos-egl" version = "6.0.0" @@ -2359,6 +2245,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" +[[package]] +name = "lebe" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" + [[package]] name = "lewton" version = "0.10.2" @@ -2370,36 +2262,23 @@ dependencies = [ "tinyvec", ] -[[package]] -name = "libappindicator" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" -dependencies = [ - "glib", - "gtk", - "gtk-sys", - "libappindicator-sys", - "log", -] - -[[package]] -name = "libappindicator-sys" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" -dependencies = [ - "gtk-sys", - "libloading 0.7.4", - "once_cell", -] - [[package]] name = "libc" version = "0.2.152" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" +[[package]] +name = "libfuzzer-sys" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a96cfd5557eb82f2b83fed4955246c988d331975a002961b07c81584d107e7f7" +dependencies = [ + "arbitrary", + "cc", + "once_cell", +] + [[package]] name = "libloading" version = "0.7.4" @@ -2431,35 +2310,6 @@ dependencies = [ "redox_syscall 0.4.1", ] -[[package]] -name = "libredox" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" -dependencies = [ - "bitflags 2.5.0", - "libc", -] - -[[package]] -name = "libxdo" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00333b8756a3d28e78def82067a377de7fa61b24909000aeaa2b446a948d14db" -dependencies = [ - "libxdo-sys", -] - -[[package]] -name = "libxdo-sys" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db23b9e7e2b7831bbd8aac0bbeeeb7b68cbebc162b227e7052e8e55829a09212" -dependencies = [ - "libc", - "x11", -] - [[package]] name = "linux-raw-sys" version = "0.3.8" @@ -2494,6 +2344,15 @@ version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +[[package]] +name = "loop9" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" +dependencies = [ + "imgref", +] + [[package]] name = "mach" version = "0.3.2" @@ -2527,6 +2386,16 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" +[[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.2" @@ -2663,25 +2532,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "muda" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b959f97c97044e4c96e32e1db292a7d594449546a3c6b77ae613dc3a5b5145" -dependencies = [ - "cocoa", - "crossbeam-channel", - "dpi", - "gtk", - "keyboard-types", - "libxdo", - "objc", - "once_cell", - "png", - "thiserror", - "windows-sys 0.52.0", -] - [[package]] name = "naga" version = "0.19.2" @@ -2757,6 +2607,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.26.4" @@ -2785,6 +2641,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.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" +dependencies = [ + "num-integer", + "num-traits", +] + [[package]] name = "num-derive" version = "0.4.2" @@ -2797,10 +2669,30 @@ dependencies = [ ] [[package]] -name = "num-traits" -version = "0.2.15" +name = "num-integer" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -3064,19 +2956,13 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - [[package]] name = "orbclient" version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166" dependencies = [ - "libredox 0.0.2", + "libredox", ] [[package]] @@ -3104,31 +2990,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c10569378a1dacd9f30dbe7ae49e054d2c45dc2f8ee49899903e09c3924e8b6f" -[[package]] -name = "pango" -version = "0.18.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" -dependencies = [ - "gio", - "glib", - "libc", - "once_cell", - "pango-sys", -] - -[[package]] -name = "pango-sys" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - [[package]] name = "parking" version = "2.2.0" @@ -3301,30 +3162,6 @@ dependencies = [ "toml_edit 0.20.2", ] -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - [[package]] name = "proc-macro2" version = "1.0.85" @@ -3339,6 +3176,34 @@ name = "profiling" version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43d84d1d7a6ac92673717f9f6d1518374ef257669c24ebc5ac25d5033828be58" +dependencies = [ + "profiling-procmacros", +] + +[[package]] +name = "profiling-procmacros" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8021cf59c8ec9c432cfc2526ac6b8aa508ecaf29cd415f271b8406c1b851c3fd" +dependencies = [ + "quote", + "syn 2.0.66", +] + +[[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" @@ -3388,6 +3253,56 @@ dependencies = [ "getrandom", ] +[[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", + "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.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc13288f5ab39e6d7c9d501759712e6969fcc9734220846fc9ed26cae2cc4234" +dependencies = [ + "avif-serialize", + "imgref", + "loop9", + "quick-error", + "rav1e", + "rayon", + "rgb", +] + [[package]] name = "raw-window-handle" version = "0.5.2" @@ -3400,6 +3315,26 @@ 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.3.5" @@ -3418,17 +3353,6 @@ dependencies = [ "bitflags 1.3.2", ] -[[package]] -name = "redox_users" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" -dependencies = [ - "getrandom", - "libredox 0.1.3", - "thiserror", -] - [[package]] name = "regex" version = "1.9.1" @@ -3464,6 +3388,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" +[[package]] +name = "rgb" +version = "0.8.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8" +dependencies = [ + "bytemuck", +] + [[package]] name = "rodio" version = "0.18.1" @@ -3702,6 +3635,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" @@ -3803,6 +3745,7 @@ dependencies = [ "eframe", "embed-resource", "enigo", + "image 0.25.1", "log", "minijinja", "minimp3", @@ -3812,15 +3755,22 @@ dependencies = [ "regex", "rodio", "serde", - "strinto", "tokio", - "tray-icon", "tray-item", "windows 0.57.0", "winit 0.30.0", "xxhash-rust", ] +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + [[package]] name = "spirv" version = "0.3.0+sdk-1.3.268.0" @@ -3842,14 +3792,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" -[[package]] -name = "strinto" -version = "0.1.0" -dependencies = [ - "quote", - "syn 2.0.66", -] - [[package]] name = "symphonia" version = "0.5.3" @@ -3941,7 +3883,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" dependencies = [ "cfg-expr", - "heck 0.5.0", + "heck", "pkg-config", "toml", "version-compare", @@ -3994,6 +3936,17 @@ dependencies = [ "syn 2.0.66", ] +[[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" @@ -4170,25 +4123,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "tray-icon" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ad8319cca93189ea9ab1b290de0595960529750b6b8b501a399ed1ec3775d60" -dependencies = [ - "cocoa", - "core-graphics", - "crossbeam-channel", - "dirs", - "libappindicator", - "muda", - "objc", - "once_cell", - "png", - "thiserror", - "windows-sys 0.52.0", -] - [[package]] name = "tray-item" version = "0.10.0" @@ -4287,6 +4221,17 @@ dependencies = [ "percent-encoding", ] +[[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 = "version-compare" version = "0.2.0" @@ -4563,6 +4508,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 = "0.19.4" @@ -5194,16 +5145,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "x11" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" -dependencies = [ - "libc", - "pkg-config", -] - [[package]] name = "x11-dl" version = "2.21.0" @@ -5380,6 +5321,30 @@ dependencies = [ "syn 2.0.66", ] +[[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.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec866b44a2a1fd6133d363f073ca1b179f438f99e7e5bfb1e33f7181facfe448" +dependencies = [ + "zune-core", +] + [[package]] name = "zvariant" version = "3.15.2" diff --git a/Cargo.toml b/Cargo.toml index 910746e..6346f59 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,18 +21,16 @@ rodio = "0.18.1" serde = { version = "1.0.171", features = ["derive"] } tokio = { version = "1.29.1", features = ["full"] } xxhash-rust = { version = "0.8.6", features = ["xxh3", "const_xxh3"] } -strinto = { path = "./strinto" } eframe = "0.27.2" tray-item = "0.10" -winit = "0.30" once_cell = "1.19.0" -tray-icon = "0.14.3" raw-window-handle = "0.6.2" +image = "0.25.1" -[build-dependencies] -embed-resource = "2.3" +[target.'cfg(windows)'.dependencies] +winit = "0.30" -[dependencies.windows] +[target.'cfg(windows)'.dependencies.windows] version = "0.57.0" features = [ "Data_Xml_Dom", @@ -40,4 +38,18 @@ features = [ "Win32_Security", "Win32_System_Threading", "Win32_UI_WindowsAndMessaging", + + "Win32_System_LibraryLoader", + "Win32_Graphics_Gdi", + "Win32_UI_Input_KeyboardAndMouse", + + "Win32_UI_Controls", + "Win32_Graphics_Dwm", + "Win32_UI_Shell", ] + +#[target.'cfg(windows)'.dependencies.windows-sys] +#version = "0.52.0" + +[target.'cfg(windows)'.build-dependencies] +embed-resource = "2.3" diff --git a/build.rs b/build.rs index b7ea7d5..79a065a 100644 --- a/build.rs +++ b/build.rs @@ -1,5 +1,8 @@ +#[cfg(windows)] extern crate embed_resource; fn main() { - embed_resource::compile("soundboard.rc", embed_resource::NONE); + if cfg!(target_os = "windows") { + embed_resource::compile("soundboard.rc", embed_resource::NONE); + } } diff --git a/icons/soundboard.ico b/icons/soundboard.ico new file mode 100644 index 0000000000000000000000000000000000000000..76428a60e495c2eb61a6879539fa9b1a8aba5d0f GIT binary patch literal 216106 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 I2o;t82V`IcxBvhE literal 0 HcmV?d00001 diff --git a/soundboard.rc b/soundboard.rc index 5c701b4..0256017 100644 --- a/soundboard.rc +++ b/soundboard.rc @@ -1 +1 @@ -icon-red ICON "icons/icon-red.ico" \ No newline at end of file +icon-soundboard ICON "icons/soundboard.ico" \ No newline at end of file diff --git a/src/bin/strinto_declarative.rs b/src/bin/strinto_declarative.rs deleted file mode 100644 index 502c6e4..0000000 --- a/src/bin/strinto_declarative.rs +++ /dev/null @@ -1,68 +0,0 @@ -/// -/// Trying to get around "".into() for String values. -/// Or "".to_owned(). -/// Or String::from(""). -/// Or "".to_string(). -/// Choose your church. -/// -/// This is as far as you will get declaratively. - -#[macro_export] -macro_rules! strinto { - ($struct:ident { $($field:ident : $value:expr),* $(,)? }) => { - $struct { - $( - $field: $crate::strinto!(@convert $value), - )* - } - }; - - (@convert $value:literal) => { - match () { - _ if stringify!($value).starts_with("\"") => { - $value.to_string() - }, - _ => $value.into(), // <-- no getting rid of the into! - } - }; -} - -struct SomeStruct { - first_name: String, - //last_name: String, // NOPE because of @convert. - //age: usize, // reason of .into() in the first place. -} - -pub fn main() { - let x = strinto!(SomeStruct { - first_name: "First", - //last_name: String::from("Last"), // NOPE 2. - //age: 1, // NOPE 1. But I went further. - }); -} - -// while this compiles for only &str "", it is also useless compared to into! -// the reason is, that you cannot type check in the declarative macros. -// while yes, you would conditionally run stringify!($value) in the match, but the match expansion -// will always lead you to type errors if you don't do an .into() in the other arm. -// also in the end it fails to compile for anything but all members of the struct being Strings. - -// the last idea was going with a helper trait, but that will bleed into the runtime code, and yet again only work on pure String structs. - -// I guess I have to embrace String::from(), .to_string(), .to_owned(), .into() madness, for something every human reader can deduce in a second, -// if you would just implicitly convert &str to String if literally written in the code. - -// It is kinda amusing, that the other solution, to use new() kind of turns me off, because I cannot be explicit about the parameter name in the call. -// I would literally love the option to be more explicit in function param names. - -// while builder patterns feel a bit bloated for static runtime options, i will probably look into automations for that. - -// this is probably the only aesthetic decision in rust I probably will hate forever. -// It does not make sense, Strings as literals already are special in your code. -// Because numbers are as well, you dont have to write 123.into() either. -// I know I probably made some really harsh logical mistakes in my opinion here, and maybe it can be proven, that I am wrong, and I would love to hear that -// However it kind of feels like an excuse to not simplify assigning declaratively written &str to Strings in the code. - -// And it makes sense to be explicit about creating a String Buffer sometimes, but it does not make sense mostly. - -// Anyway, I will still try a procedural macro for this, just for fun. diff --git a/src/bin/ui_icon.rs b/src/bin/ui_icon.rs new file mode 100644 index 0000000..164d3c1 --- /dev/null +++ b/src/bin/ui_icon.rs @@ -0,0 +1,251 @@ +use eframe::{egui, NativeOptions}; +use std::{ffi::OsStr, os::windows::ffi::OsStrExt, ptr}; +use windows::{ + core::PCWSTR, + Win32::{ + System::LibraryLoader::GetModuleHandleW, + UI::WindowsAndMessaging::{LoadImageW, IMAGE_ICON, LR_DEFAULTCOLOR}, + }, +}; + +// https://github.com/emilk/egui/issues/920 + +#[tokio::main] +async fn main() { + // Run the UI on the main thread + run_ui(); +} + +fn run_ui() { + let app = NativeApp {}; + + // Attempt to load the icon from resources + let icon_handle = match load_icon_from_resource("icon-soundboard") { + Ok(handle) => Some(handle as isize), + Err(e) => { + eprintln!("Failed to load icon: {}", e); + None + } + }; + + // load from icon resource, cross platform. + // let icon = load_icon_static(); + // load from exe resource + let icon = from_windows::load_app_icon("icon-soundboard"); + + let native_options = NativeOptions { + viewport: egui::ViewportBuilder::default().with_icon(icon), + ..Default::default() + }; + + eframe::run_native( + "Custom window frame", // unused title + native_options, + Box::new(|_cc| Box::new(app)), + ) + .unwrap(); +} +struct NativeApp {} + +impl eframe::App for NativeApp { + fn update(&mut self, ctx: &eframe::egui::Context, frame: &mut eframe::Frame) { + egui::CentralPanel::default().show(ctx, |ui| { + ui.heading("Testing Software"); + + ui.horizontal(|ui| { + ui.label("Blah:"); + }); + + if ui.button("Apply").clicked() { + eprintln!("Apply clicked"); + } + }); + } +} + +fn to_wstring(str: &str) -> Vec { + OsStr::new(str) + .encode_wide() + .chain(Some(0).into_iter()) + .collect::>() +} + +fn load_icon_from_resource(resource_name: &str) -> Result { + let icon = unsafe { + let hmodule = if let Ok(hmodule) = GetModuleHandleW(None) { + hmodule + } else { + return Err("Error getting windows module handle".to_owned()); + }; + let handle = if let Ok(handle) = LoadImageW( + hmodule, + PCWSTR(to_wstring(resource_name).as_ptr()), + IMAGE_ICON, + 64, + 64, + LR_DEFAULTCOLOR, + ) { + handle + } else { + return Err("Error getting image handle".to_owned()); + }; + + handle + }; + Ok(icon.0) +} + +fn load_icon(path: &str) -> egui::IconData { + let (icon_rgba, icon_width, icon_height) = { + let image = image::open(path) + .expect("Failed to open icon path") + .into_rgba8(); + let (width, height) = image.dimensions(); + let rgba = image.into_raw(); + (rgba, width, height) + }; + + egui::IconData { + rgba: icon_rgba, + width: icon_width, + height: icon_height, + } +} + +pub(crate) fn load_icon_static() -> egui::IconData { + let (icon_rgba, icon_width, icon_height) = { + let icon = include_bytes!("../../icons/soundboard.ico"); + let image = image::load_from_memory(icon) + .expect("Failed to open icon path") + .into_rgba8(); + let (width, height) = image.dimensions(); + let rgba = image.into_raw(); + (rgba, width, height) + }; + + egui::IconData { + rgba: icon_rgba, + width: icon_width, + height: icon_height, + } +} + +mod from_windows { + use std::{ffi::OsStr, os::windows::ffi::OsStrExt, ptr}; + + use eframe::egui; + use windows::{ + core::PCWSTR, + Win32::{ + Graphics::Gdi::{ + CreateCompatibleDC, DeleteDC, GetDIBits, GetObjectA, SelectObject, BITMAP, + BITMAPINFO, BITMAPINFOHEADER, DIB_RGB_COLORS, + }, + System::LibraryLoader::GetModuleHandleW, + UI::WindowsAndMessaging::{ + GetIconInfo, LoadImageW, HICON, ICONINFO, IMAGE_ICON, LR_DEFAULTCOLOR, + }, + }, + }; + + fn to_wstring(str: &str) -> Vec { + OsStr::new(str) + .encode_wide() + .chain(Some(0).into_iter()) + .collect::>() + } + + // Grab the icon from the exe and hand it over to egui + pub fn load_app_icon(icon_name: &str) -> egui::IconData { + let (mut buffer, width, height) = unsafe { + let resource_name = to_wstring(icon_name); + let h_instance = GetModuleHandleW(None).unwrap(); + let icon = LoadImageW( + h_instance, + PCWSTR(resource_name.as_ptr()), + IMAGE_ICON, + 512, + 512, + LR_DEFAULTCOLOR, + ) + .unwrap(); + + let mut icon_info = ICONINFO::default(); + GetIconInfo(HICON(icon.0), &mut icon_info as *mut _).expect("Failed to load icon info"); + + let mut bitmap = BITMAP::default(); + GetObjectA( + icon_info.hbmColor, + std::mem::size_of::() as i32, + Some(&mut bitmap as *mut _ as *mut _), + ); + + let width = bitmap.bmWidth; + let height = bitmap.bmHeight; + + let b_size = (width * height * 4) as usize; + let mut buffer = Vec::::with_capacity(b_size); + + let h_dc = CreateCompatibleDC(None); + let h_bitmap = SelectObject(h_dc, icon_info.hbmColor); + + let mut bitmap_info = BITMAPINFO::default(); + bitmap_info.bmiHeader.biSize = std::mem::size_of::() as u32; + bitmap_info.bmiHeader.biWidth = width; + bitmap_info.bmiHeader.biHeight = height; + bitmap_info.bmiHeader.biPlanes = 1; + bitmap_info.bmiHeader.biBitCount = 32; + bitmap_info.bmiHeader.biCompression = 0; + bitmap_info.bmiHeader.biSizeImage = 0; + + let res = GetDIBits( + h_dc, + icon_info.hbmColor, + 0, + height as u32, + Some(buffer.spare_capacity_mut().as_mut_ptr() as *mut _), + &mut bitmap_info as *mut _, + DIB_RGB_COLORS, + ); + if res == 0 { + panic!("Failed to get RGB DI bits"); + } + + SelectObject(h_dc, h_bitmap); + let _ = DeleteDC(h_dc); + + assert_eq!( + bitmap_info.bmiHeader.biSizeImage as usize, b_size, + "returned biSizeImage must equal to b_size" + ); + + // set the new size + buffer.set_len(bitmap_info.bmiHeader.biSizeImage as usize); + + (buffer, width as u32, height as u32) + }; + + // RGBA -> BGRA + for pixel in buffer.as_mut_slice().chunks_mut(4) { + pixel.swap(0, 2); + } + + // Flip the image vertically + let row_size = width as usize * 4; // number of pixels in each row + let row_count = buffer.len() as usize / row_size; // number of rows in the image + for row in 0..row_count / 2 { + // loop through half of the rows + let start = row * row_size; // index of the start of the current row + let end = (row_count - row - 1) * row_size; // index of the end of the current row + for i in 0..row_size { + buffer.swap(start + i, end + i); + } + } + + egui::IconData { + rgba: buffer, + width, + height, + } + } +} diff --git a/src/bin/ui_test.rs b/src/bin/ui_test.rs index 405e51f..2a34ba6 100644 --- a/src/bin/ui_test.rs +++ b/src/bin/ui_test.rs @@ -1,7 +1,4 @@ -use axum::{ - routing::{self, get}, - Router, -}; +use axum::{routing::get, Router}; use eframe::egui; use serde::{Deserialize, Serialize}; use std::{ diff --git a/src/bin/ui_tray_icon.rs b/src/bin/ui_tray_icon.rs index 9fc8c29..90abac8 100644 --- a/src/bin/ui_tray_icon.rs +++ b/src/bin/ui_tray_icon.rs @@ -1,7 +1,4 @@ -use axum::{ - routing::{self, get}, - Router, -}; +use axum::{routing::get, Router}; use eframe::egui; use serde::{Deserialize, Serialize}; use std::{ @@ -56,7 +53,11 @@ async fn main() { // Set up the system tray icon let (tray_tx, tray_rx) = std::sync::mpsc::channel(); - let mut tray = TrayItem::new("App Name", tray_item::IconSource::Resource("icon-red")).unwrap(); + let mut tray = TrayItem::new( + "App Name", + tray_item::IconSource::Resource("icon-soundboard"), + ) + .unwrap(); tray.add_label("Server Control").unwrap(); tray.add_menu_item("Show/Hide", { let tray_tx = tray_tx.clone(); diff --git a/src/icon.rs b/src/icon.rs new file mode 100644 index 0000000..08dbcbc --- /dev/null +++ b/src/icon.rs @@ -0,0 +1,144 @@ +// https://github.com/emilk/egui/issues/920 + +#[cfg(not(windows))] +pub fn load_app_icon(_icon_name: &str) -> eframe::egui::IconData { + let (icon_rgba, icon_width, icon_height) = { + let icon = include_bytes!("../../icons/soundboard.ico"); + let image = image::load_from_memory(icon) + .expect("Failed to open icon path") + .into_rgba8(); + let (width, height) = image.dimensions(); + let rgba = image.into_raw(); + (rgba, width, height) + }; + + eframe::egui::IconData { + rgba: icon_rgba, + width: icon_width, + height: icon_height, + } +} + +#[cfg(windows)] +pub use from_windows::load_app_icon; + +#[cfg(windows)] +mod from_windows { + use std::{ffi::OsStr, os::windows::ffi::OsStrExt}; + + use eframe::egui; + use windows::{ + core::PCWSTR, + Win32::{ + Graphics::Gdi::{ + CreateCompatibleDC, DeleteDC, GetDIBits, GetObjectA, SelectObject, BITMAP, + BITMAPINFO, BITMAPINFOHEADER, DIB_RGB_COLORS, + }, + System::LibraryLoader::GetModuleHandleW, + UI::WindowsAndMessaging::{ + GetIconInfo, LoadImageW, HICON, ICONINFO, IMAGE_ICON, LR_DEFAULTCOLOR, + }, + }, + }; + + fn to_wstring(str: &str) -> Vec { + OsStr::new(str) + .encode_wide() + .chain(Some(0).into_iter()) + .collect::>() + } + + // Grab the icon from the exe and hand it over to egui + pub fn load_app_icon(icon_name: &str) -> egui::IconData { + let (mut buffer, width, height) = unsafe { + let resource_name = to_wstring(icon_name); + let h_instance = GetModuleHandleW(None).unwrap(); + let icon = LoadImageW( + h_instance, + PCWSTR(resource_name.as_ptr()), + IMAGE_ICON, + 512, + 512, + LR_DEFAULTCOLOR, + ) + .unwrap(); + + let mut icon_info = ICONINFO::default(); + GetIconInfo(HICON(icon.0), &mut icon_info as *mut _).expect("Failed to load icon info"); + + let mut bitmap = BITMAP::default(); + GetObjectA( + icon_info.hbmColor, + std::mem::size_of::() as i32, + Some(&mut bitmap as *mut _ as *mut _), + ); + + let width = bitmap.bmWidth; + let height = bitmap.bmHeight; + + let b_size = (width * height * 4) as usize; + let mut buffer = Vec::::with_capacity(b_size); + + let h_dc = CreateCompatibleDC(None); + let h_bitmap = SelectObject(h_dc, icon_info.hbmColor); + + let mut bitmap_info = BITMAPINFO::default(); + bitmap_info.bmiHeader.biSize = std::mem::size_of::() as u32; + bitmap_info.bmiHeader.biWidth = width; + bitmap_info.bmiHeader.biHeight = height; + bitmap_info.bmiHeader.biPlanes = 1; + bitmap_info.bmiHeader.biBitCount = 32; + bitmap_info.bmiHeader.biCompression = 0; + bitmap_info.bmiHeader.biSizeImage = 0; + + let res = GetDIBits( + h_dc, + icon_info.hbmColor, + 0, + height as u32, + Some(buffer.spare_capacity_mut().as_mut_ptr() as *mut _), + &mut bitmap_info as *mut _, + DIB_RGB_COLORS, + ); + if res == 0 { + panic!("Failed to get RGB DI bits"); + } + + SelectObject(h_dc, h_bitmap); + let _ = DeleteDC(h_dc); + + assert_eq!( + bitmap_info.bmiHeader.biSizeImage as usize, b_size, + "returned biSizeImage must equal to b_size" + ); + + // set the new size + buffer.set_len(bitmap_info.bmiHeader.biSizeImage as usize); + + (buffer, width as u32, height as u32) + }; + + // RGBA -> BGRA + for pixel in buffer.as_mut_slice().chunks_mut(4) { + pixel.swap(0, 2); + } + + // Flip the image vertically + let row_size = width as usize * 4; // number of pixels in each row + let row_count = buffer.len() as usize / row_size; // number of rows in the image + for row in 0..row_count / 2 { + // loop through half of the rows + let start = row * row_size; // index of the start of the current row + let end = (row_count - row - 1) * row_size; // index of the end of the current row + for i in 0..row_size { + buffer.swap(start + i, end + i); + } + } + + egui::IconData { + rgba: buffer, + width, + height, + } + } +} diff --git a/src/main.rs b/src/main.rs index f16d74c..afe537a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,6 +10,7 @@ use dotenvy::dotenv; use vbplay::{example_handler, DeviceSelection, SoundDecoder}; mod handlers; +mod icon; mod server; mod soundclips; mod state; @@ -36,7 +37,7 @@ fn main() { let audio = Arc::new(Mutex::new(audio)); let server_settings = Arc::new(Mutex::new(server::ServerSettings { - port: "3000".to_string(), + port: "3311".to_string(), })); let should_run = Arc::new(Mutex::new(true)); diff --git a/src/ui.rs b/src/ui.rs index 3f02b25..25c7f81 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -15,7 +15,13 @@ pub fn run_ui( static VISIBLE: once_cell::sync::Lazy> = once_cell::sync::Lazy::new(|| Mutex::new(true)); - let native_options = eframe::NativeOptions::default(); + let icon = crate::icon::load_app_icon("icon-soundboard"); + + let native_options = eframe::NativeOptions { + viewport: egui::ViewportBuilder::default().with_icon(icon), + ..Default::default() + }; + eframe::run_native( "App", native_options, @@ -23,38 +29,44 @@ pub fn run_ui( // Set up the tray icon event handler let window_handle = cc.window_handle().unwrap(); let window_handle = window_handle.as_raw(); - let mut tray = - TrayItem::new("Soundboard", tray_item::IconSource::Resource("icon-red")).unwrap(); + let mut tray = TrayItem::new( + "Soundboard", + tray_item::IconSource::Resource("icon-soundboard"), + ) + .unwrap(); if let RawWindowHandle::Win32(handle) = window_handle { - // Windows Only. - use windows::Win32::Foundation::HWND; - use windows::Win32::UI::WindowsAndMessaging::{ - ShowWindow, - SW_HIDE, - SW_RESTORE, // SW_SHOWDEFAULT, SW_SHOWNORMAL, - }; + #[cfg(windows)] + { + // Windows Only. + use windows::Win32::Foundation::HWND; + use windows::Win32::UI::WindowsAndMessaging::{ + ShowWindow, + SW_HIDE, + SW_RESTORE, // SW_SHOWDEFAULT, SW_SHOWNORMAL, + }; - tray.add_label("Server Control").unwrap(); + tray.add_label("Server Control").unwrap(); - tray.add_menu_item("Show/Hide", { - move || { - let mut visible_lock = VISIBLE.lock().unwrap(); - let window_handle = HWND(handle.hwnd.into()); + tray.add_menu_item("Show/Hide", { + move || { + let mut visible_lock = VISIBLE.lock().unwrap(); + let window_handle = HWND(handle.hwnd.into()); - if *visible_lock { - unsafe { - _ = ShowWindow(window_handle, SW_HIDE); + if *visible_lock { + unsafe { + _ = ShowWindow(window_handle, SW_HIDE); + } + *visible_lock = false; + } else { + unsafe { + _ = ShowWindow(window_handle, SW_RESTORE); + } + *visible_lock = true; } - *visible_lock = false; - } else { - unsafe { - _ = ShowWindow(window_handle, SW_RESTORE); - } - *visible_lock = true; } - } - }) - .unwrap(); + }) + .unwrap(); + } } else { println!("Unsupported platform for tray icon."); } @@ -62,7 +74,7 @@ pub fn run_ui( let my_tx = tx.clone(); tray.add_menu_item("Quit", move || { my_tx.try_send(ServerMessage::Shutdown).unwrap(); - //std::process::exit(0); + std::process::exit(0); }) .unwrap(); diff --git a/src/vbplay.rs b/src/vbplay.rs index 89ece08..2f8f2a3 100644 --- a/src/vbplay.rs +++ b/src/vbplay.rs @@ -200,7 +200,7 @@ pub fn audio_thread( error!("Mutex Lock Failure while trying to play sound.") } } - Command::PlayWhilePressing(file_name, press_button) => { + Command::PlayWhilePressing(file_name, _press_button) => { if let Ok(sink) = sink_mutex.lock() { play_file(&sink, file_name, &select_decoder); } else { @@ -239,7 +239,7 @@ pub fn audio_thread( tx } -fn detect_decoder(file_name: &str, sound_decoder: &SoundDecoder) -> SoundDecoder { +fn detect_decoder(_file_name: &str, sound_decoder: &SoundDecoder) -> SoundDecoder { // TODO: File detection via ending or whitelisting? // This function MUST NOT return SoundDecoder::Detect match sound_decoder { diff --git a/strinto/.gitignore b/strinto/.gitignore deleted file mode 100644 index ea8c4bf..0000000 --- a/strinto/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target diff --git a/strinto/Cargo.lock b/strinto/Cargo.lock deleted file mode 100644 index 7f8aab3..0000000 --- a/strinto/Cargo.lock +++ /dev/null @@ -1,47 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "proc-macro2" -version = "1.0.78" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "strinto" -version = "0.1.0" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "syn" -version = "2.0.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" diff --git a/strinto/Cargo.toml b/strinto/Cargo.toml deleted file mode 100644 index d47f7cc..0000000 --- a/strinto/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -name = "strinto" -version = "0.1.0" -edition = "2021" - -[lib] -proc-macro = true - -[dependencies] -syn = { version = "2.0", features = ["full"] } -quote = "1.0" - -[dev-dependencies] -proc-macro2 = "1.0" diff --git a/strinto/src/lib.rs b/strinto/src/lib.rs deleted file mode 100644 index b147e4d..0000000 --- a/strinto/src/lib.rs +++ /dev/null @@ -1,62 +0,0 @@ -extern crate proc_macro; -use proc_macro::TokenStream; -use quote::quote; -use syn::{parse_macro_input, Expr, ExprStruct}; - -/// # literal strings in a struct insantiation are converted .into(). -/// -/// ```rust -/// use strinto::strinto; -/// #[derive(Debug)] -/// struct TestStruct { -/// name: String, -/// title: String, -/// description: String, -/// age: usize, -/// } -/// -/// let descr = "description"; -/// -/// let output = strinto!(TestStruct { -/// name: "John", // Literal string. -/// title: String::from("Wicked"), -/// description: descr.to_string(), -/// age: 30, -/// }); -/// -/// let output_string = format!("{:?}", output); -/// assert_eq!( -/// output_string, -/// "TestStruct { name: \"John\", title: \"Wicked\", description: \"description\", age: 30 }" -/// ); -/// ``` - -#[proc_macro] -pub fn strinto(input: TokenStream) -> TokenStream { - let expr_struct = parse_macro_input!(input as ExprStruct); - - // Extract struct name and fields - let struct_name = &expr_struct.path; - let fields = expr_struct.fields.iter().map(|field| { - let field_name = field.member.clone(); - let field_value = &field.expr; - // Determine if the field value is a string literal and transform it - if let Expr::Lit(expr_lit) = field_value { - if let syn::Lit::Str(_) = expr_lit.lit { - quote! { #field_name: #field_value.into() } - } else { - quote! { #field_name: #field_value } - } - } else { - quote! { #field_name: #field_value } - } - }); - - let expanded = quote! { - #struct_name { - #(#fields,)* - } - }; - - expanded.into() -}