diff --git a/CHANGELOG.md b/CHANGELOG.md index edbee198..d69be4ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased ] +### Added +- `rog-control-center` has now been moved in to the main workspace due to + the heavy dependencies on most of the rog crates + ## [4.3.0] - 2022-07-21 ### Added diff --git a/Cargo.lock b/Cargo.lock index 7a4d2887..c44fdf93 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,12 +2,45 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "ab_glyph" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24606928a235e73cdef55a0c909719cadd72fce573e5713d58cb2952d8f5794c" +dependencies = [ + "ab_glyph_rasterizer", + "owned_ttf_parser", +] + +[[package]] +name = "ab_glyph_rasterizer" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a13739d7177fbd22bb0ed28badfff9f372f8bef46c863db4e1c6248f6b223b6e" + [[package]] name = "adler" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "ahash" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" + +[[package]] +name = "ahash" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + [[package]] name = "aho-corasick" version = "0.7.18" @@ -17,6 +50,29 @@ dependencies = [ "memchr", ] +[[package]] +name = "android_glue" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "000444226fcff248f2bc4c7625be32c63caccfecc2723a2b9f78a7487a49c407" + +[[package]] +name = "arboard" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc120354d1b5ec6d7aaf4876b602def75595937b5e15d356eb554ab5177e08bb" +dependencies = [ + "clipboard-win", + "log", + "objc", + "objc-foundation", + "objc_id", + "parking_lot 0.12.1", + "thiserror", + "winapi", + "x11rb", +] + [[package]] name = "asus-notify" version = "3.1.0" @@ -59,7 +115,7 @@ dependencies = [ "easy-parallel", "event-listener", "futures-core", - "parking_lot", + "parking_lot 0.11.2", ] [[package]] @@ -145,7 +201,7 @@ checksum = "cf2c06e30a24e8c78a3987d07f0930edf76ef35e027e7bdb063fccafdad1f60c" dependencies = [ "async-io", "blocking", - "cfg-if", + "cfg-if 1.0.0", "event-listener", "futures-lite", "libc", @@ -188,6 +244,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a" +[[package]] +name = "atomic_refcell" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73b5e5f48b927f04e952dedc932f31995a65a0bf65ec971c74436e51bf6e970d" + [[package]] name = "atty" version = "0.2.14" @@ -213,9 +275,9 @@ checksum = "f771a5d1f5503f7f4279a30f3643d3421ba149848b89ecaaec0ea2acf04a5ac4" [[package]] name = "bitflags" -version = "1.3.2" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" [[package]] name = "block" @@ -237,36 +299,151 @@ dependencies = [ "once_cell", ] +[[package]] +name = "bumpalo" +version = "3.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" + +[[package]] +name = "bytemuck" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5377c8865e74a160d21f29c2d40669f53286db6eab59b88540cbb12ffc8b835" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfd2f4180c5721da6335cc9e9061cce522b87a35e51cc57636d28d22a9863c80" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "byteorder" version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +[[package]] +name = "bytes" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0b3de4a0c5e67e16066a0715723abd91edc2f9001d09c46e1dca929351e130e" + [[package]] name = "cache-padded" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" +[[package]] +name = "calloop" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf2eec61efe56aa1e813f5126959296933cf0700030e4314786c48779a66ab82" +dependencies = [ + "log", + "nix 0.22.3", +] + [[package]] name = "cc" version = "1.0.73" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cgl" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" +dependencies = [ + "libc", +] + +[[package]] +name = "clipboard-win" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4ab1b92798304eedc095b53942963240037c0516452cb11aeba709d420b2219" +dependencies = [ + "error-code", + "str-buf", + "winapi", +] + +[[package]] +name = "cocoa" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63902e9223530efb4e26ccd0cf55ec30d592d3b42e21a28defc42a9586e832" +dependencies = [ + "bitflags", + "block", + "cocoa-foundation", + "core-foundation 0.9.3", + "core-graphics 0.22.3", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" +dependencies = [ + "bitflags", + "block", + "core-foundation 0.9.3", + "core-graphics-types", + "foreign-types", + "libc", + "objc", +] + [[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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a604e93b79d1808327a6fca85a6f2d69de66461e7620f5a4cbf5fb4d1d7c948" +dependencies = [ + "bytes", + "memchr", +] + [[package]] name = "concurrent-queue" version = "1.2.2" @@ -276,6 +453,94 @@ dependencies = [ "cache-padded", ] +[[package]] +name = "core-foundation" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" +dependencies = [ + "core-foundation-sys 0.7.0", + "libc", +] + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys 0.8.3", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" + +[[package]] +name = "core-foundation-sys" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" + +[[package]] +name = "core-graphics" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3889374e6ea6ab25dba90bb5d96202f61108058361f6dc72e8b03e6f8bbe923" +dependencies = [ + "bitflags", + "core-foundation 0.7.0", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" +dependencies = [ + "bitflags", + "core-foundation 0.9.3", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" +dependencies = [ + "bitflags", + "core-foundation 0.9.3", + "foreign-types", + "libc", +] + +[[package]] +name = "core-video-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34ecad23610ad9757664d644e369246edde1803fcb43ed72876565098a5d3828" +dependencies = [ + "cfg-if 0.1.10", + "core-foundation-sys 0.7.0", + "core-graphics 0.19.2", + "libc", + "objc", +] + +[[package]] +name = "cty" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" + [[package]] name = "daemon" version = "4.3.1" @@ -305,7 +570,7 @@ dependencies = [ name = "daemon-user" version = "1.3.0" dependencies = [ - "dirs", + "dirs 4.0.0", "rog_anime", "rog_dbus", "rog_supported", @@ -318,6 +583,64 @@ dependencies = [ "zvariant_derive", ] +[[package]] +name = "dark-light" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b83576e2eee2d9cdaa8d08812ae59cbfe1b5ac7ac5ac4b8400303c6148a88c1" +dependencies = [ + "dconf_rs", + "detect-desktop-environment", + "dirs 4.0.0", + "objc", + "rust-ini", + "web-sys", + "winreg", + "zbus", + "zvariant", +] + +[[package]] +name = "darling" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +dependencies = [ + "darling_core", + "quote", + "syn", +] + +[[package]] +name = "dconf_rs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7046468a81e6a002061c01e6a7c83139daf91b11c30e66795b13217c2d885c8b" + [[package]] name = "derivative" version = "2.2.0" @@ -329,6 +652,21 @@ dependencies = [ "syn", ] +[[package]] +name = "detect-desktop-environment" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21d8ad60dd5b13a4ee6bd8fa2d5d88965c597c67bce32b5fc49c94f55cb50810" + +[[package]] +name = "dirs" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30baa043103c9d0c2a57cf537cc2f35623889dc0d405e6c3cccfadbc81c71309" +dependencies = [ + "dirs-sys", +] + [[package]] name = "dirs" version = "4.0.0" @@ -344,7 +682,7 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "dirs-sys-next", ] @@ -370,12 +708,110 @@ dependencies = [ "winapi", ] +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dlib" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794" +dependencies = [ + "libloading", +] + +[[package]] +name = "dlv-list" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68df3f2b690c1b86e65ef7830956aededf3cb0a16f898f79b9a6f421a7b6211b" +dependencies = [ + "rand", +] + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + [[package]] name = "easy-parallel" version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6907e25393cdcc1f4f3f513d9aac1e840eb1cc341a0fccb01171f7d14d10b946" +[[package]] +name = "eframe" +version = "0.18.0" +source = "git+https://github.com/emilk/egui#0bf9fc9428423b375ae079782c095504e85ca42c" +dependencies = [ + "bytemuck", + "dark-light", + "egui", + "egui-winit", + "egui_glow", + "glow", + "glutin", + "js-sys", + "percent-encoding", + "tracing", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winit", +] + +[[package]] +name = "egui" +version = "0.18.1" +source = "git+https://github.com/emilk/egui#0bf9fc9428423b375ae079782c095504e85ca42c" +dependencies = [ + "ahash 0.7.6", + "epaint", + "nohash-hasher", + "tracing", +] + +[[package]] +name = "egui-winit" +version = "0.18.0" +source = "git+https://github.com/emilk/egui#0bf9fc9428423b375ae079782c095504e85ca42c" +dependencies = [ + "arboard", + "egui", + "instant", + "smithay-clipboard", + "tracing", + "webbrowser", + "winit", +] + +[[package]] +name = "egui_glow" +version = "0.18.1" +source = "git+https://github.com/emilk/egui#0bf9fc9428423b375ae079782c095504e85ca42c" +dependencies = [ + "bytemuck", + "egui", + "glow", + "memoffset", + "tracing", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "emath" +version = "0.18.0" +source = "git+https://github.com/emilk/egui#0bf9fc9428423b375ae079782c095504e85ca42c" +dependencies = [ + "bytemuck", +] + [[package]] name = "embedded-graphics" version = "0.7.1" @@ -433,6 +869,30 @@ dependencies = [ "termcolor", ] +[[package]] +name = "epaint" +version = "0.18.1" +source = "git+https://github.com/emilk/egui#0bf9fc9428423b375ae079782c095504e85ca42c" +dependencies = [ + "ab_glyph", + "ahash 0.7.6", + "atomic_refcell", + "bytemuck", + "emath", + "nohash-hasher", + "parking_lot 0.12.1", +] + +[[package]] +name = "error-code" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21" +dependencies = [ + "libc", + "str-buf", +] + [[package]] name = "event-listener" version = "2.5.2" @@ -457,6 +917,37 @@ dependencies = [ "num-traits", ] +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +dependencies = [ + "matches", + "percent-encoding", +] + [[package]] name = "futures-core" version = "0.3.21" @@ -510,13 +1001,23 @@ dependencies = [ "slab", ] +[[package]] +name = "gethostname" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "getrandom" version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "libc", "wasi", ] @@ -531,6 +1032,17 @@ dependencies = [ "weezl", ] +[[package]] +name = "gl_generator" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" +dependencies = [ + "khronos_api", + "log", + "xml-rs", +] + [[package]] name = "glam" version = "0.20.5" @@ -540,6 +1052,90 @@ dependencies = [ "serde", ] +[[package]] +name = "glow" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8bd5877156a19b8ac83a29b2306fe20537429d318f3ff0a1a2119f8d9c61919" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "glutin" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00ea9dbe544bc8a657c4c4a798c2d16cd01b549820e47657297549d28371f6d2" +dependencies = [ + "android_glue", + "cgl", + "cocoa", + "core-foundation 0.9.3", + "glutin_egl_sys", + "glutin_emscripten_sys", + "glutin_gles2_sys", + "glutin_glx_sys", + "glutin_wgl_sys", + "lazy_static", + "libloading", + "log", + "objc", + "osmesa-sys", + "parking_lot 0.11.2", + "wayland-client", + "wayland-egl", + "winapi", + "winit", +] + +[[package]] +name = "glutin_egl_sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2abb6aa55523480c4adc5a56bbaa249992e2dddb2fc63dc96e04a3355364c211" +dependencies = [ + "gl_generator", + "winapi", +] + +[[package]] +name = "glutin_emscripten_sys" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80de4146df76e8a6c32b03007bc764ff3249dcaeb4f675d68a06caf1bac363f1" + +[[package]] +name = "glutin_gles2_sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094e708b730a7c8a1954f4f8a31880af00eb8a1c5b5bf85d28a0a3c6d69103" +dependencies = [ + "gl_generator", + "objc", +] + +[[package]] +name = "glutin_glx_sys" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e393c8fc02b807459410429150e9c4faffdb312d59b8c038566173c81991351" +dependencies = [ + "gl_generator", + "x11-dl", +] + +[[package]] +name = "glutin_wgl_sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3da5951a1569dbab865c6f2a863efafff193a93caf05538d193e9e3816d21696" +dependencies = [ + "gl_generator", +] + [[package]] name = "gumdrop" version = "0.8.1" @@ -560,6 +1156,15 @@ dependencies = [ "syn", ] +[[package]] +name = "hashbrown" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" +dependencies = [ + "ahash 0.4.7", +] + [[package]] name = "heck" version = "0.3.3" @@ -590,13 +1195,33 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + [[package]] name = "instant" version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", + "js-sys", + "wasm-bindgen", + "web-sys", ] [[package]] @@ -605,6 +1230,41 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" +[[package]] +name = "jni" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "js-sys" +version = "0.3.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "khronos_api" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" + [[package]] name = "lazy_static" version = "1.4.0" @@ -617,6 +1277,16 @@ version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" +[[package]] +name = "libloading" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd" +dependencies = [ + "cfg-if 1.0.0", + "winapi", +] + [[package]] name = "libudev-sys" version = "0.1.4" @@ -655,7 +1325,7 @@ version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", ] [[package]] @@ -691,12 +1361,36 @@ dependencies = [ "libc", ] +[[package]] +name = "matches" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" + [[package]] name = "memchr" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +[[package]] +name = "memmap2" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b6c2ebff6180198788f5db08d7ce3bc1d0b617176678831a7510825973e357" +dependencies = [ + "libc", +] + +[[package]] +name = "memmap2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a79b39c93a7a5a27eeaf9a23b5ff43f1b9e0ad6b1cdd441140ae53c35613fc7" +dependencies = [ + "libc", +] + [[package]] name = "memoffset" version = "0.6.5" @@ -712,6 +1406,12 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc4010833aea396656c2f91ee704d51a6f1329ec2ab56ffd00bfd56f7481ea94" +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" version = "0.4.4" @@ -722,6 +1422,134 @@ dependencies = [ "autocfg", ] +[[package]] +name = "mio" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys", +] + +[[package]] +name = "ndk" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d868f654c72e75f8687572699cdabe755f03effbb62542768e995d5b8d699d" +dependencies = [ + "bitflags", + "jni-sys", + "ndk-sys 0.2.2", + "num_enum", + "thiserror", +] + +[[package]] +name = "ndk" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" +dependencies = [ + "bitflags", + "jni-sys", + "ndk-sys 0.3.0", + "num_enum", + "thiserror", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-glue" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c71bee8ea72d685477e28bd004cfe1bf99c754d688cd78cad139eae4089484d4" +dependencies = [ + "lazy_static", + "libc", + "log", + "ndk 0.5.0", + "ndk-context", + "ndk-macro", + "ndk-sys 0.2.2", +] + +[[package]] +name = "ndk-glue" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d0c4a7b83860226e6b4183edac21851f05d5a51756e97a1144b7f5a6b63e65f" +dependencies = [ + "lazy_static", + "libc", + "log", + "ndk 0.6.0", + "ndk-context", + "ndk-macro", + "ndk-sys 0.3.0", +] + +[[package]] +name = "ndk-macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0df7ac00c4672f9d5aece54ee3347520b7e20f158656c7db2e6de01902eb7a6c" +dependencies = [ + "darling", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ndk-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1bcdd74c20ad5d95aacd60ef9ba40fdf77f767051040541df557b7a9b2a2121" + +[[package]] +name = "ndk-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "nix" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5e06129fb611568ef4e868c14b326274959aa70ff7776e9d55323531c374945" +dependencies = [ + "bitflags", + "cc", + "cfg-if 1.0.0", + "libc", + "memoffset", +] + +[[package]] +name = "nix" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4916f159ed8e5de0082076562152a76b7a1f64a01fd9d1e0fea002c37624faf" +dependencies = [ + "bitflags", + "cc", + "cfg-if 1.0.0", + "libc", + "memoffset", +] + [[package]] name = "nix" version = "0.23.1" @@ -730,11 +1558,28 @@ checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6" dependencies = [ "bitflags", "cc", - "cfg-if", + "cfg-if 1.0.0", "libc", "memoffset", ] +[[package]] +name = "nix" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "195cdbc1741b8134346d515b3a56a1c94b0912758009cfd53f99ea0f57b065fc" +dependencies = [ + "bitflags", + "cfg-if 1.0.0", + "libc", +] + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + [[package]] name = "nom" version = "6.1.2" @@ -745,6 +1590,16 @@ dependencies = [ "version_check", ] +[[package]] +name = "nom" +version = "7.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" +dependencies = [ + "memchr", + "minimal-lexical", +] + [[package]] name = "notify-rust" version = "4.5.8" @@ -768,6 +1623,27 @@ dependencies = [ "autocfg", ] +[[package]] +name = "num_enum" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf5395665662ef45796a4ff5486c5d41d29e0c09640af4c5f17fd94ee2c119c9" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "num_threads" version = "0.1.6" @@ -818,6 +1694,16 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225" +[[package]] +name = "ordered-multimap" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c672c7ad9ec066e428c00eb917124a06f08db19e2584de982cc34b1f4c12485" +dependencies = [ + "dlv-list", + "hashbrown", +] + [[package]] name = "ordered-stream" version = "0.0.1" @@ -828,6 +1714,24 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "osmesa-sys" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88cfece6e95d2e717e0872a7f53a8684712ad13822a7979bc760b9c77ec0013b" +dependencies = [ + "shared_library", +] + +[[package]] +name = "owned_ttf_parser" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb1e509cfe7a12db2a90bfa057dfcdbc55a347f5da677c506b53dd099cfec9d" +dependencies = [ + "ttf-parser", +] + [[package]] name = "parking" version = "2.0.0" @@ -842,7 +1746,17 @@ checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" dependencies = [ "instant", "lock_api", - "parking_lot_core", + "parking_lot_core 0.8.5", +] + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core 0.9.3", ] [[package]] @@ -851,7 +1765,7 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "instant", "libc", "redox_syscall", @@ -859,6 +1773,25 @@ dependencies = [ "winapi", ] +[[package]] +name = "parking_lot_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "redox_syscall", + "smallvec", + "windows-sys", +] + +[[package]] +name = "percent-encoding" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" + [[package]] name = "pin-project-lite" version = "0.2.9" @@ -899,7 +1832,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "libc", "log", "wepoll-ffi", @@ -970,6 +1903,15 @@ dependencies = [ "getrandom", ] +[[package]] +name = "raw-window-handle" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b800beb9b6e7d2df1fe337c9e3d04e3af22a124460fb4c30fcc22c9117cefb41" +dependencies = [ + "cty", +] + [[package]] name = "redox_syscall" version = "0.2.13" @@ -1016,6 +1958,28 @@ dependencies = [ "winapi", ] +[[package]] +name = "rog-control-center" +version = "0.1.3" +dependencies = [ + "dirs 3.0.2", + "eframe", + "egui", + "nix 0.20.2", + "notify-rust", + "rog_aura", + "rog_dbus", + "rog_profiles", + "rog_supported", + "serde", + "serde_derive", + "serde_json", + "smol", + "tempfile", + "toml", + "zbus", +] + [[package]] name = "rog_anime" version = "1.3.5" @@ -1087,12 +2051,37 @@ dependencies = [ "libusb1-sys", ] +[[package]] +name = "rust-ini" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63471c4aa97a1cf8332a5f97709a79a4234698de6a1f5087faf66f2dae810e22" +dependencies = [ + "cfg-if 1.0.0", + "ordered-multimap", +] + [[package]] name = "ryu" version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scoped-tls" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" + [[package]] name = "scopeguard" version = "1.1.0" @@ -1156,6 +2145,16 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" +[[package]] +name = "shared_library" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11" +dependencies = [ + "lazy_static", + "libc", +] + [[package]] name = "signal-hook" version = "0.3.14" @@ -1181,12 +2180,68 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" +[[package]] +name = "slotmap" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" +dependencies = [ + "version_check", +] + [[package]] name = "smallvec" version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" +[[package]] +name = "smithay-client-toolkit" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a28f16a97fa0e8ce563b2774d1e732dd5d4025d2772c5dba0a41a0f90a29da3" +dependencies = [ + "bitflags", + "calloop", + "dlib", + "lazy_static", + "log", + "memmap2 0.3.1", + "nix 0.22.3", + "pkg-config", + "wayland-client", + "wayland-cursor", + "wayland-protocols", +] + +[[package]] +name = "smithay-client-toolkit" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f307c47d32d2715eb2e0ece5589057820e0e5e70d07c247d1063e844e107f454" +dependencies = [ + "bitflags", + "dlib", + "lazy_static", + "log", + "memmap2 0.5.5", + "nix 0.24.2", + "pkg-config", + "wayland-client", + "wayland-cursor", + "wayland-protocols", +] + +[[package]] +name = "smithay-clipboard" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a345c870a1fae0b1b779085e81b51e614767c239e93503588e54c5b17f4b0e8" +dependencies = [ + "smithay-client-toolkit 0.16.0", + "wayland-client", +] + [[package]] name = "smol" version = "1.2.5" @@ -1221,6 +2276,18 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "str-buf" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0" + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "strum" version = "0.22.0" @@ -1268,7 +2335,7 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "fastrand", "libc", "redox_syscall", @@ -1322,9 +2389,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44873aee48dd30712dc2610209902a78b9033a0148ac03c6c3e73e4ca2f49838" dependencies = [ "embedded-graphics", - "nom", + "nom 6.1.2", ] +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" + [[package]] name = "toml" version = "0.5.9" @@ -1340,7 +2422,7 @@ version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -1366,6 +2448,12 @@ dependencies = [ "once_cell", ] +[[package]] +name = "ttf-parser" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b3e06c9b9d80ed6b745c7159c40b311ad2916abb34a49e9be2653b90db0d8dd" + [[package]] name = "udev" version = "0.6.3" @@ -1387,18 +2475,45 @@ dependencies = [ "winapi", ] +[[package]] +name = "unicode-bidi" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" + [[package]] name = "unicode-ident" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" +[[package]] +name = "unicode-normalization" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6" +dependencies = [ + "tinyvec", +] + [[package]] name = "unicode-segmentation" version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" +[[package]] +name = "url" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +dependencies = [ + "form_urlencoded", + "idna", + "matches", + "percent-encoding", +] + [[package]] name = "vcpkg" version = "0.2.15" @@ -1417,12 +2532,196 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi", + "winapi-util", +] + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasm-bindgen" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994" +dependencies = [ + "cfg-if 1.0.0", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a" +dependencies = [ + "bumpalo", + "lazy_static", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de9a9cec1733468a8c657e57fa2413d2ae2c0129b95e87c5b72b8ace4d13f31f" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be" + +[[package]] +name = "wayland-client" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91223460e73257f697d9e23d401279123d36039a3f7a449e983f123292d4458f" +dependencies = [ + "bitflags", + "downcast-rs", + "libc", + "nix 0.22.3", + "scoped-tls", + "wayland-commons", + "wayland-scanner", + "wayland-sys", +] + +[[package]] +name = "wayland-commons" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94f6e5e340d7c13490eca867898c4cec5af56c27a5ffe5c80c6fc4708e22d33e" +dependencies = [ + "nix 0.22.3", + "once_cell", + "smallvec", + "wayland-sys", +] + +[[package]] +name = "wayland-cursor" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c52758f13d5e7861fc83d942d3d99bf270c83269575e52ac29e5b73cb956a6bd" +dependencies = [ + "nix 0.22.3", + "wayland-client", + "xcursor", +] + +[[package]] +name = "wayland-egl" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83281d69ee162b59031c666385e93bde4039ec553b90c4191cdb128ceea29a3a" +dependencies = [ + "wayland-client", + "wayland-sys", +] + +[[package]] +name = "wayland-protocols" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60147ae23303402e41fe034f74fb2c35ad0780ee88a1c40ac09a3be1e7465741" +dependencies = [ + "bitflags", + "wayland-client", + "wayland-commons", + "wayland-scanner", +] + +[[package]] +name = "wayland-scanner" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39a1ed3143f7a143187156a2ab52742e89dac33245ba505c17224df48939f9e0" +dependencies = [ + "proc-macro2", + "quote", + "xml-rs", +] + +[[package]] +name = "wayland-sys" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9341df79a8975679188e37dab3889bfa57c44ac2cb6da166f519a81cbe452d4" +dependencies = [ + "dlib", + "lazy_static", + "pkg-config", +] + +[[package]] +name = "web-sys" +version = "0.3.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fed94beee57daf8dd7d51f2b15dc2bcde92d7a72304cdf662a4371008b71b90" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webbrowser" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a3cffdb686fbb24d9fb8f03a213803277ed2300f11026a3afe1f108dc021b" +dependencies = [ + "jni", + "ndk-glue 0.6.2", + "url", + "web-sys", + "widestring", + "winapi", +] + [[package]] name = "weezl" version = "0.1.6" @@ -1438,6 +2737,12 @@ dependencies = [ "cc", ] +[[package]] +name = "widestring" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983" + [[package]] name = "winapi" version = "0.3.9" @@ -1463,6 +2768,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "winapi-wsapoll" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e" +dependencies = [ + "winapi", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -1475,36 +2789,121 @@ version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9f39345ae0c8ab072c0ac7fe8a8b411636aa34f89be19ddd0d9226544f13944" dependencies = [ - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_msvc", + "windows_i686_gnu 0.24.0", + "windows_i686_msvc 0.24.0", + "windows_x86_64_gnu 0.24.0", + "windows_x86_64_msvc 0.24.0", ] +[[package]] +name = "windows-sys" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +dependencies = [ + "windows_aarch64_msvc", + "windows_i686_gnu 0.36.1", + "windows_i686_msvc 0.36.1", + "windows_x86_64_gnu 0.36.1", + "windows_x86_64_msvc 0.36.1", +] + +[[package]] +name = "windows_aarch64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" + [[package]] name = "windows_i686_gnu" version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0866510a3eca9aed73a077490bbbf03e5eaac4e1fd70849d89539e5830501fd" +[[package]] +name = "windows_i686_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" + [[package]] name = "windows_i686_msvc" version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf0ffed56b7e9369a29078d2ab3aaeceea48eb58999d2cff3aa2494a275b95c6" +[[package]] +name = "windows_i686_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" + [[package]] name = "windows_x86_64_gnu" version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384a173630588044205a2993b6864a2f56e5a8c1e7668c07b93ec18cf4888dc4" +[[package]] +name = "windows_x86_64_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" + [[package]] name = "windows_x86_64_msvc" version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bd8f062d8ca5446358159d79a90be12c543b3a965c847c8f3eedf14b321d399" +[[package]] +name = "windows_x86_64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" + +[[package]] +name = "winit" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b43cc931d58b99461188607efd7acb2a093e65fc621f54cad78517a6063e73a" +dependencies = [ + "bitflags", + "cocoa", + "core-foundation 0.9.3", + "core-graphics 0.22.3", + "core-video-sys", + "dispatch", + "instant", + "lazy_static", + "libc", + "log", + "mio", + "ndk 0.5.0", + "ndk-glue 0.5.2", + "ndk-sys 0.2.2", + "objc", + "parking_lot 0.11.2", + "percent-encoding", + "raw-window-handle", + "smithay-client-toolkit 0.15.4", + "wasm-bindgen", + "wayland-client", + "wayland-protocols", + "web-sys", + "winapi", + "x11-dl", +] + +[[package]] +name = "winreg" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d107f8c6e916235c4c01cabb3e8acf7bea8ef6a63ca2e7fa0527c049badfc48c" +dependencies = [ + "winapi", +] + [[package]] name = "winrt-notification" version = "0.5.1" @@ -1516,6 +2915,38 @@ dependencies = [ "xml-rs", ] +[[package]] +name = "x11-dl" +version = "2.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea26926b4ce81a6f5d9d0f3a0bc401e5a37c6ae14a1bfaa8ff6099ca80038c59" +dependencies = [ + "lazy_static", + "libc", + "pkg-config", +] + +[[package]] +name = "x11rb" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e99be55648b3ae2a52342f9a870c0e138709a3493261ce9b469afe6e4df6d8a" +dependencies = [ + "gethostname", + "nix 0.22.3", + "winapi", + "winapi-wsapoll", +] + +[[package]] +name = "xcursor" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7" +dependencies = [ + "nom 7.1.1", +] + [[package]] name = "xml-rs" version = "0.8.4" @@ -1538,7 +2969,7 @@ dependencies = [ "async-trait", "byteorder", "derivative", - "dirs", + "dirs 4.0.0", "enumflags2", "event-listener", "futures-core", @@ -1546,7 +2977,7 @@ dependencies = [ "futures-util", "hex", "lazy_static", - "nix", + "nix 0.23.1", "once_cell", "ordered-stream", "rand", diff --git a/Cargo.toml b/Cargo.toml index 373086cb..b2caec6f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace] -members = ["asusctl", "asus-notify", "daemon", "daemon-user", "rog-supported", "rog-dbus", "rog-anime", "rog-aura", "rog-profiles"] +members = ["asusctl", "asus-notify", "daemon", "daemon-user", "rog-supported", "rog-dbus", "rog-anime", "rog-aura", "rog-profiles", "rog-control-center"] [profile.release] # thin = 57s, asusd = 9.0M diff --git a/Makefile b/Makefile index 2b377323..57dbfede 100644 --- a/Makefile +++ b/Makefile @@ -11,6 +11,7 @@ datarootdir = $(prefix)/share libdir = $(exec_prefix)/lib zshcpl = $(datarootdir)/zsh/site-functions +BIN_ROG := rog-control-center BIN_C := asusctl BIN_D := asusd BIN_U := asusd-user @@ -39,6 +40,10 @@ distclean: rm -rf .cargo vendor vendor.tar.xz install: + $(INSTALL_PROGRAM) "./target/release/$(BIN_ROG)" "$(DESTDIR)$(bindir)/$(BIN_ROG)" + $(INSTALL_DATA) "./rog-control-center/data/$(BIN_ROG).desktop" "$(DESTDIR)$(datarootdir)/applications/$(BIN_ROG).desktop" + $(INSTALL_DATA) "./rog-control-center/data/$(BIN_ROG).png" "$(DESTDIR)$(datarootdir)/icons/hicolor/512x512/apps/$(BIN_ROG).png" + $(INSTALL_PROGRAM) "./target/release/$(BIN_C)" "$(DESTDIR)$(bindir)/$(BIN_C)" $(INSTALL_PROGRAM) "./target/release/$(BIN_D)" "$(DESTDIR)$(bindir)/$(BIN_D)" $(INSTALL_PROGRAM) "./target/release/$(BIN_U)" "$(DESTDIR)$(bindir)/$(BIN_U)" @@ -68,6 +73,10 @@ install: cd rog-anime/data && find "./anime" -type f -exec install -Dm 755 "{}" "$(DESTDIR)$(datarootdir)/asusd/{}" \; uninstall: + rm -f "$(DESTDIR)$(bindir)/$(BIN_ROG)" + rm -r "$(DESTDIR)$(datarootdir)/applications/$(BIN_ROG).desktop" + rm -r "$(DESTDIR)$(datarootdir)/icons/hicolor/512x512/apps/$(BIN_ROG).png" + rm -f "$(DESTDIR)$(bindir)/$(BIN_C)" rm -f "$(DESTDIR)$(bindir)/$(BIN_D)" rm -f "$(DESTDIR)$(bindir)/$(BIN_N)" diff --git a/README.md b/README.md index 2f2f9cdc..af7d2122 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ `asusd` is a utility for Linux to control many aspects of various ASUS laptops but can also be used with non-asus laptops with reduced features. +Now includes a GUI, `rog-control-center`. + ## Kernel support **The minimum supported kernel version is 5.15** diff --git a/rog-control-center/.vscode/configurationCache.log b/rog-control-center/.vscode/configurationCache.log new file mode 100644 index 00000000..543723bc --- /dev/null +++ b/rog-control-center/.vscode/configurationCache.log @@ -0,0 +1 @@ +{"buildTargets":["all","build","clean","distclean","install","uninstall","update","vendor"],"launchTargets":[],"customConfigurationProvider":{"workspaceBrowse":{"browsePath":[],"compilerArgs":[]},"fileIndex":[]}} \ No newline at end of file diff --git a/rog-control-center/.vscode/dryrun.log b/rog-control-center/.vscode/dryrun.log new file mode 100644 index 00000000..97f807b7 --- /dev/null +++ b/rog-control-center/.vscode/dryrun.log @@ -0,0 +1,6 @@ +make --dry-run --always-make --keep-going --print-directory +make: Entering directory '/home/luke/Projects/rog-control-center' + +cargo build --release +make: Leaving directory '/home/luke/Projects/rog-control-center' + diff --git a/rog-control-center/.vscode/settings.json b/rog-control-center/.vscode/settings.json new file mode 100644 index 00000000..65e1ec07 --- /dev/null +++ b/rog-control-center/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "makefile.extensionOutputFolder": "./.vscode" +} \ No newline at end of file diff --git a/rog-control-center/.vscode/targets.log b/rog-control-center/.vscode/targets.log new file mode 100644 index 00000000..6a99a93d --- /dev/null +++ b/rog-control-center/.vscode/targets.log @@ -0,0 +1,414 @@ +make all --print-data-base --no-builtin-variables --no-builtin-rules --question +# GNU Make 4.3 +# Built for x86_64-redhat-linux-gnu +# Copyright (C) 1988-2020 Free Software Foundation, Inc. +# License GPLv3+: GNU GPL version 3 or later +# This is free software: you are free to change and redistribute it. +# There is NO WARRANTY, to the extent permitted by law. + +# Make data base, printed on Mon Jul 25 13:56:15 2022 + +# Variables + +# makefile (from 'Makefile', line 4) +INSTALL_PROGRAM = ${INSTALL} -D -m 0755 +# environment +GDK_BACKEND = x11 +# environment +LC_ALL = C +# environment +NO_AT_BRIDGE = 1 +# makefile (from 'Makefile', line 15) +SRC := Cargo.toml Cargo.lock Makefile ./src/error.rs ./src/config.rs ./src/widgets/mod.rs ./src/widgets/top_bar.rs ./src/widgets/side_panel.rs ./src/widgets/anime_page.rs ./src/widgets/aura_page.rs ./src/widgets/fan_curve_page.rs ./src/widgets/system_page.rs ./src/app.rs ./src/lib.rs ./src/main.rs ./src/notify.rs ./src/page_states.rs +# environment +STARSHIP_SESSION_KEY = 2042530886117081 +# environment +GJS_DEBUG_OUTPUT = stderr +# environment +VSCODE_CWD = /home/luke +# makefile (from 'Makefile', line 7) +prefix = /usr +# environment +GDM_LANG = en_NZ.UTF-8 +# environment +WASMER_DIR = /home/luke/.wasmer +# default +MAKE_COMMAND := make +# environment +define BASH_FUNC_which%% +() { ( alias; + eval ${which_declare} ) | /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot $@ +} +endef +# automatic +@D = $(patsubst %/,%,$(dir $@)) +# environment +VSCODE_HANDLES_UNCAUGHT_ERRORS = true +# makefile (from 'Makefile', line 13) +BIN_ROG := rog-control-center +# default +.VARIABLES := +# environment +PWD = /home/luke/Projects/rog-control-center +# automatic +%D = $(patsubst %/,%,$(dir $%)) +# environment +HOSTNAME = fedora +# environment +MAIL = /var/spool/mail/luke +# environment +STEAM_FRAME_FORCE_CLOSE = 1 +# environment +XDG_DATA_DIRS = /home/luke/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share/:/usr/share/ +# automatic +^D = $(patsubst %/,%,$(dir $^)) +# automatic +%F = $(notdir $%) +# environment +VSCODE_CODE_CACHE_PATH = /home/luke/.config/Code/CachedData/3b889b090b5ad5793f524b5d1d39fda662b96a2a +# environment +LANG = C +# environment +XAUTHORITY = /run/user/1000/.mutter-Xwaylandauth.WG1MP1 +# default +.LOADED := +# default +.INCLUDE_DIRS = /usr/include /usr/local/include /usr/include +# makefile +MAKEFLAGS = pqrR +# makefile +CURDIR := /home/luke/Projects/rog-control-center +# environment +APPLICATION_INSIGHTS_NO_DIAGNOSTIC_CHANNEL = true +# environment +LESSOPEN = ||/usr/bin/lesspipe.sh %s +# automatic +*D = $(patsubst %/,%,$(dir $*)) +# makefile (from 'Makefile', line 1) +VERSION := 0.1.2 +# environment +MFLAGS = -pqrR +# environment +SSH_AUTH_SOCK = /run/user/1000/keyring/ssh +# default +.SHELLFLAGS := -c +# environment +WAYLAND_DISPLAY = wayland-0 +# environment +HISTSIZE = 1000 +# automatic ++D = $(patsubst %/,%,$(dir $+)) +# environment +XDG_SESSION_DESKTOP = gnome +# makefile (from 'Makefile', line 1) +MAKEFILE_LIST := Makefile +# automatic +@F = $(notdir $@) +# environment +VSCODE_PID = 152272 +# environment +SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS = 0 +# environment +XDG_SESSION_TYPE = wayland +# automatic +?D = $(patsubst %/,%,$(dir $?)) +# makefile (from 'Makefile', line 3) +INSTALL = install +# environment +SESSION_MANAGER = local/unix:@/tmp/.ICE-unix/1985,unix/unix:/tmp/.ICE-unix/1985 +# automatic +*F = $(notdir $*) +# makefile (from 'Makefile', line 23) +VENDORED = 0 +# environment +CHROME_DESKTOP = code-url-handler.desktop +# environment +DBUS_SESSION_BUS_ADDRESS = unix:path=/run/user/1000/bus +# automatic + .cargo/config + echo 'directory = "vendor"' >> .cargo/config + mv .cargo/config ./cargo-config + rm -rf .cargo + tar pcfJ vendor_asusctl_$(VERSION).tar.xz vendor + rm -rf vendor + +uninstall: +# Phony target (prerequisite of .PHONY). +# Implicit rule search has not been done. +# File does not exist. +# File has not been updated. +# recipe to execute (from 'Makefile', line 42): + rm -f "$(DESTDIR)$(bindir)/$(BIN_ROG)" + rm -r "$(DESTDIR)$(datarootdir)/applications/$(BIN_ROG).desktop" + rm -r "$(DESTDIR)$(datarootdir)/icons/hicolor/512x512/apps/$(BIN_ROG).png" + +clean: +# Phony target (prerequisite of .PHONY). +# Implicit rule search has not been done. +# File does not exist. +# File has not been updated. +# recipe to execute (from 'Makefile', line 31): + cargo clean + +# Not a target: +.DEFAULT: +# Implicit rule search has not been done. +# Modification time never checked. +# File has not been updated. + +all: build +# Phony target (prerequisite of .PHONY). +# Command line target. +# Implicit rule search has not been done. +# File does not exist. +# File has been updated. +# Needs to be updated (-q is set). +# variable set hash-table stats: +# Load=0/32=0%, Rehash=0, Collisions=0/4=0% + +build: +# Phony target (prerequisite of .PHONY). +# Implicit rule search has not been done. +# Implicit/static pattern stem: '' +# File does not exist. +# File has been updated. +# Needs to be updated (-q is set). +# automatic +# @ := build +# automatic +# * := +# automatic +# < := +# automatic +# + := +# automatic +# % := +# automatic +# ^ := +# automatic +# ? := +# automatic +# | := +# variable set hash-table stats: +# Load=8/32=25%, Rehash=0, Collisions=6/12=50% +# recipe to execute (from 'Makefile', line 63): + cargo build $(ARGS) + +install: +# Phony target (prerequisite of .PHONY). +# Implicit rule search has not been done. +# File does not exist. +# File has not been updated. +# recipe to execute (from 'Makefile', line 37): + $(INSTALL_PROGRAM) "./target/release/$(BIN_ROG)" "$(DESTDIR)$(bindir)/$(BIN_ROG)" + $(INSTALL_DATA) "./data/$(BIN_ROG).desktop" "$(DESTDIR)$(datarootdir)/applications/$(BIN_ROG).desktop" + $(INSTALL_DATA) "./data/$(BIN_ROG).png" "$(DESTDIR)$(datarootdir)/icons/hicolor/512x512/apps/$(BIN_ROG).png" + +# Not a target: +.SUFFIXES: +# Implicit rule search has not been done. +# Modification time never checked. +# File has not been updated. + +.PHONY: all clean distclean install uninstall update build +# Implicit rule search has not been done. +# Modification time never checked. +# File has not been updated. + +# files hash-table stats: +# Load=12/1024=1%, Rehash=0, Collisions=0/33=0% +# VPATH Search Paths + +# No 'vpath' search paths. + +# No general ('VPATH' variable) search path. + +# strcache buffers: 1 (0) / strings = 29 / storage = 279 B / avg = 9 B +# current buf: size = 8162 B / used = 279 B / count = 29 / avg = 9 B + +# strcache performance: lookups = 52 / hit rate = 44% +# hash-table stats: +# Load=29/8192=0%, Rehash=0, Collisions=0/52=0% +# Finished Make data base on Mon Jul 25 13:56:15 2022 + + diff --git a/rog-control-center/Cargo.lock b/rog-control-center/Cargo.lock new file mode 100644 index 00000000..72e109b1 --- /dev/null +++ b/rog-control-center/Cargo.lock @@ -0,0 +1,2790 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ab_glyph" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24606928a235e73cdef55a0c909719cadd72fce573e5713d58cb2952d8f5794c" +dependencies = [ + "ab_glyph_rasterizer", + "owned_ttf_parser", +] + +[[package]] +name = "ab_glyph_rasterizer" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a13739d7177fbd22bb0ed28badfff9f372f8bef46c863db4e1c6248f6b223b6e" + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" + +[[package]] +name = "ahash" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "aho-corasick" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +dependencies = [ + "memchr", +] + +[[package]] +name = "android_glue" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "000444226fcff248f2bc4c7625be32c63caccfecc2723a2b9f78a7487a49c407" + +[[package]] +name = "arboard" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc120354d1b5ec6d7aaf4876b602def75595937b5e15d356eb554ab5177e08bb" +dependencies = [ + "clipboard-win", + "log", + "objc", + "objc-foundation", + "objc_id", + "parking_lot 0.12.1", + "thiserror", + "winapi", + "x11rb", +] + +[[package]] +name = "async-broadcast" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d26004fe83b2d1cd3a97609b21e39f9a31535822210fe83205d2ce48866ea61" +dependencies = [ + "event-listener", + "futures-core", + "parking_lot 0.12.1", +] + +[[package]] +name = "async-channel" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319" +dependencies = [ + "concurrent-queue", + "event-listener", + "futures-core", +] + +[[package]] +name = "async-executor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "once_cell", + "slab", +] + +[[package]] +name = "async-fs" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b3ca4f8ff117c37c278a2f7415ce9be55560b846b5bc4412aaa5d29c1c3dae2" +dependencies = [ + "async-lock", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-io" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5e18f61464ae81cde0a23e713ae8fd299580c54d697a35820cfd0625b8b0e07" +dependencies = [ + "concurrent-queue", + "futures-lite", + "libc", + "log", + "once_cell", + "parking", + "polling", + "slab", + "socket2", + "waker-fn", + "winapi", +] + +[[package]] +name = "async-lock" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e97a171d191782fba31bb902b14ad94e24a68145032b7eedf871ab0bc0d077b6" +dependencies = [ + "event-listener", +] + +[[package]] +name = "async-net" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5373304df79b9b4395068fb080369ec7178608827306ce4d081cba51cac551df" +dependencies = [ + "async-io", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-process" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf2c06e30a24e8c78a3987d07f0930edf76ef35e027e7bdb063fccafdad1f60c" +dependencies = [ + "async-io", + "blocking", + "cfg-if 1.0.0", + "event-listener", + "futures-lite", + "libc", + "once_cell", + "signal-hook", + "winapi", +] + +[[package]] +name = "async-recursion" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7d78656ba01f1b93024b7c3a0467f1608e4be67d725749fdcd7d2c7678fd7a2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "async-task" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524" + +[[package]] +name = "async-trait" +version = "0.1.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96cf8829f67d2eab0b2dfa42c5d0ef737e0724e4a82b01b3e292456202b19716" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "atomic-waker" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a" + +[[package]] +name = "atomic_refcell" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73b5e5f48b927f04e952dedc932f31995a65a0bf65ec971c74436e51bf6e970d" + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "bitflags" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "blocking" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6ccb65d468978a086b69884437ded69a90faab3bbe6e67f242173ea728acccc" +dependencies = [ + "async-channel", + "async-task", + "atomic-waker", + "fastrand", + "futures-lite", + "once_cell", +] + +[[package]] +name = "bumpalo" +version = "3.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" + +[[package]] +name = "bytemuck" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5377c8865e74a160d21f29c2d40669f53286db6eab59b88540cbb12ffc8b835" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfd2f4180c5721da6335cc9e9061cce522b87a35e51cc57636d28d22a9863c80" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "bytes" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0b3de4a0c5e67e16066a0715723abd91edc2f9001d09c46e1dca929351e130e" + +[[package]] +name = "cache-padded" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" + +[[package]] +name = "calloop" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf2eec61efe56aa1e813f5126959296933cf0700030e4314786c48779a66ab82" +dependencies = [ + "log", + "nix 0.22.3", +] + +[[package]] +name = "cc" +version = "1.0.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cgl" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" +dependencies = [ + "libc", +] + +[[package]] +name = "clipboard-win" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4ab1b92798304eedc095b53942963240037c0516452cb11aeba709d420b2219" +dependencies = [ + "error-code", + "str-buf", + "winapi", +] + +[[package]] +name = "cocoa" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63902e9223530efb4e26ccd0cf55ec30d592d3b42e21a28defc42a9586e832" +dependencies = [ + "bitflags", + "block", + "cocoa-foundation", + "core-foundation 0.9.3", + "core-graphics 0.22.3", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" +dependencies = [ + "bitflags", + "block", + "core-foundation 0.9.3", + "core-graphics-types", + "foreign-types", + "libc", + "objc", +] + +[[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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a604e93b79d1808327a6fca85a6f2d69de66461e7620f5a4cbf5fb4d1d7c948" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "concurrent-queue" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3" +dependencies = [ + "cache-padded", +] + +[[package]] +name = "core-foundation" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" +dependencies = [ + "core-foundation-sys 0.7.0", + "libc", +] + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys 0.8.3", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" + +[[package]] +name = "core-foundation-sys" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" + +[[package]] +name = "core-graphics" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3889374e6ea6ab25dba90bb5d96202f61108058361f6dc72e8b03e6f8bbe923" +dependencies = [ + "bitflags", + "core-foundation 0.7.0", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" +dependencies = [ + "bitflags", + "core-foundation 0.9.3", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" +dependencies = [ + "bitflags", + "core-foundation 0.9.3", + "foreign-types", + "libc", +] + +[[package]] +name = "core-video-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34ecad23610ad9757664d644e369246edde1803fcb43ed72876565098a5d3828" +dependencies = [ + "cfg-if 0.1.10", + "core-foundation-sys 0.7.0", + "core-graphics 0.19.2", + "libc", + "objc", +] + +[[package]] +name = "cty" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" + +[[package]] +name = "dark-light" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b83576e2eee2d9cdaa8d08812ae59cbfe1b5ac7ac5ac4b8400303c6148a88c1" +dependencies = [ + "dconf_rs", + "detect-desktop-environment", + "dirs 4.0.0", + "objc", + "rust-ini", + "web-sys", + "winreg", + "zbus", + "zvariant", +] + +[[package]] +name = "darling" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +dependencies = [ + "darling_core", + "quote", + "syn", +] + +[[package]] +name = "dconf_rs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7046468a81e6a002061c01e6a7c83139daf91b11c30e66795b13217c2d885c8b" + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "detect-desktop-environment" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21d8ad60dd5b13a4ee6bd8fa2d5d88965c597c67bce32b5fc49c94f55cb50810" + +[[package]] +name = "dirs" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30baa043103c9d0c2a57cf537cc2f35623889dc0d405e6c3cccfadbc81c71309" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if 1.0.0", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dlib" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794" +dependencies = [ + "libloading", +] + +[[package]] +name = "dlv-list" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68df3f2b690c1b86e65ef7830956aededf3cb0a16f898f79b9a6f421a7b6211b" +dependencies = [ + "rand", +] + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "eframe" +version = "0.18.0" +source = "git+https://github.com/emilk/egui#0bf9fc9428423b375ae079782c095504e85ca42c" +dependencies = [ + "bytemuck", + "dark-light", + "egui", + "egui-winit", + "egui_glow", + "glow", + "glutin", + "js-sys", + "percent-encoding", + "tracing", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winit", +] + +[[package]] +name = "egui" +version = "0.18.1" +source = "git+https://github.com/emilk/egui#0bf9fc9428423b375ae079782c095504e85ca42c" +dependencies = [ + "ahash 0.7.6", + "epaint", + "nohash-hasher", + "tracing", +] + +[[package]] +name = "egui-winit" +version = "0.18.0" +source = "git+https://github.com/emilk/egui#0bf9fc9428423b375ae079782c095504e85ca42c" +dependencies = [ + "arboard", + "egui", + "instant", + "smithay-clipboard", + "tracing", + "webbrowser", + "winit", +] + +[[package]] +name = "egui_glow" +version = "0.18.1" +source = "git+https://github.com/emilk/egui#0bf9fc9428423b375ae079782c095504e85ca42c" +dependencies = [ + "bytemuck", + "egui", + "glow", + "memoffset", + "tracing", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "emath" +version = "0.18.0" +source = "git+https://github.com/emilk/egui#0bf9fc9428423b375ae079782c095504e85ca42c" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "enumflags2" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e75d4cd21b95383444831539909fbb14b9dc3fdceb2a6f5d36577329a1f55ccb" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "epaint" +version = "0.18.1" +source = "git+https://github.com/emilk/egui#0bf9fc9428423b375ae079782c095504e85ca42c" +dependencies = [ + "ab_glyph", + "ahash 0.7.6", + "atomic_refcell", + "bytemuck", + "emath", + "nohash-hasher", + "parking_lot 0.12.1", +] + +[[package]] +name = "error-code" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21" +dependencies = [ + "libc", + "str-buf", +] + +[[package]] +name = "event-listener" +version = "2.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71" + +[[package]] +name = "fastrand" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" +dependencies = [ + "instant", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +dependencies = [ + "matches", + "percent-encoding", +] + +[[package]] +name = "futures-core" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" + +[[package]] +name = "futures-io" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" + +[[package]] +name = "futures-lite" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-sink" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" + +[[package]] +name = "futures-task" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" + +[[package]] +name = "futures-util" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" +dependencies = [ + "futures-core", + "futures-sink", + "futures-task", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "gethostname" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "getrandom" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi", +] + +[[package]] +name = "gif" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3edd93c6756b4dfaf2709eafcc345ba2636565295c198a9cfbf75fa5e3e00b06" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "gl_generator" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" +dependencies = [ + "khronos_api", + "log", + "xml-rs", +] + +[[package]] +name = "glam" +version = "0.20.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43e957e744be03f5801a55472f593d43fabdebf25a4585db250f04d86b1675f" +dependencies = [ + "serde", +] + +[[package]] +name = "glow" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8bd5877156a19b8ac83a29b2306fe20537429d318f3ff0a1a2119f8d9c61919" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "glutin" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00ea9dbe544bc8a657c4c4a798c2d16cd01b549820e47657297549d28371f6d2" +dependencies = [ + "android_glue", + "cgl", + "cocoa", + "core-foundation 0.9.3", + "glutin_egl_sys", + "glutin_emscripten_sys", + "glutin_gles2_sys", + "glutin_glx_sys", + "glutin_wgl_sys", + "lazy_static", + "libloading", + "log", + "objc", + "osmesa-sys", + "parking_lot 0.11.2", + "wayland-client", + "wayland-egl", + "winapi", + "winit", +] + +[[package]] +name = "glutin_egl_sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2abb6aa55523480c4adc5a56bbaa249992e2dddb2fc63dc96e04a3355364c211" +dependencies = [ + "gl_generator", + "winapi", +] + +[[package]] +name = "glutin_emscripten_sys" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80de4146df76e8a6c32b03007bc764ff3249dcaeb4f675d68a06caf1bac363f1" + +[[package]] +name = "glutin_gles2_sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094e708b730a7c8a1954f4f8a31880af00eb8a1c5b5bf85d28a0a3c6d69103" +dependencies = [ + "gl_generator", + "objc", +] + +[[package]] +name = "glutin_glx_sys" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e393c8fc02b807459410429150e9c4faffdb312d59b8c038566173c81991351" +dependencies = [ + "gl_generator", + "x11-dl", +] + +[[package]] +name = "glutin_wgl_sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3da5951a1569dbab865c6f2a863efafff193a93caf05538d193e9e3816d21696" +dependencies = [ + "gl_generator", +] + +[[package]] +name = "hashbrown" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" +dependencies = [ + "ahash 0.4.7", +] + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "itoa" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" + +[[package]] +name = "jni" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "js-sys" +version = "0.3.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "khronos_api" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" + +[[package]] +name = "libloading" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd" +dependencies = [ + "cfg-if 1.0.0", + "winapi", +] + +[[package]] +name = "libudev-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "lock_api" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "mac-notification-sys" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fff231a88fe2e9985f9d159a2f02986fe46daa0f6af976a0d934be4870cc9d02" +dependencies = [ + "cc", + "dirs-next", + "objc-foundation", + "objc_id", + "time", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "matches" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "memmap2" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b6c2ebff6180198788f5db08d7ce3bc1d0b617176678831a7510825973e357" +dependencies = [ + "libc", +] + +[[package]] +name = "memmap2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a79b39c93a7a5a27eeaf9a23b5ff43f1b9e0ad6b1cdd441140ae53c35613fc7" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +dependencies = [ + "adler", + "autocfg", +] + +[[package]] +name = "mio" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys", +] + +[[package]] +name = "ndk" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d868f654c72e75f8687572699cdabe755f03effbb62542768e995d5b8d699d" +dependencies = [ + "bitflags", + "jni-sys", + "ndk-sys 0.2.2", + "num_enum", + "thiserror", +] + +[[package]] +name = "ndk" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" +dependencies = [ + "bitflags", + "jni-sys", + "ndk-sys 0.3.0", + "num_enum", + "thiserror", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-glue" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c71bee8ea72d685477e28bd004cfe1bf99c754d688cd78cad139eae4089484d4" +dependencies = [ + "lazy_static", + "libc", + "log", + "ndk 0.5.0", + "ndk-context", + "ndk-macro", + "ndk-sys 0.2.2", +] + +[[package]] +name = "ndk-glue" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d0c4a7b83860226e6b4183edac21851f05d5a51756e97a1144b7f5a6b63e65f" +dependencies = [ + "lazy_static", + "libc", + "log", + "ndk 0.6.0", + "ndk-context", + "ndk-macro", + "ndk-sys 0.3.0", +] + +[[package]] +name = "ndk-macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0df7ac00c4672f9d5aece54ee3347520b7e20f158656c7db2e6de01902eb7a6c" +dependencies = [ + "darling", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ndk-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1bcdd74c20ad5d95aacd60ef9ba40fdf77f767051040541df557b7a9b2a2121" + +[[package]] +name = "ndk-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "nix" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5e06129fb611568ef4e868c14b326274959aa70ff7776e9d55323531c374945" +dependencies = [ + "bitflags", + "cc", + "cfg-if 1.0.0", + "libc", + "memoffset", +] + +[[package]] +name = "nix" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4916f159ed8e5de0082076562152a76b7a1f64a01fd9d1e0fea002c37624faf" +dependencies = [ + "bitflags", + "cc", + "cfg-if 1.0.0", + "libc", + "memoffset", +] + +[[package]] +name = "nix" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6" +dependencies = [ + "bitflags", + "cc", + "cfg-if 1.0.0", + "libc", + "memoffset", +] + +[[package]] +name = "nix" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "195cdbc1741b8134346d515b3a56a1c94b0912758009cfd53f99ea0f57b065fc" +dependencies = [ + "bitflags", + "cfg-if 1.0.0", + "libc", +] + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + +[[package]] +name = "nom" +version = "7.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "notify-rust" +version = "4.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a995a3d2834cefa389218e7a35156e8ce544bc95f836900da01ee0b26a07e9d4" +dependencies = [ + "mac-notification-sys", + "serde", + "winrt-notification", + "zbus", + "zvariant", + "zvariant_derive", +] + +[[package]] +name = "num_enum" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf5395665662ef45796a4ff5486c5d41d29e0c09640af4c5f17fd94ee2c119c9" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "num_threads" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" +dependencies = [ + "libc", +] + +[[package]] +name = "numtoa" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aa2c4e539b869820a2b82e1aef6ff40aa85e65decdd5185e83fb4b1249cd00f" + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", +] + +[[package]] +name = "objc-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +dependencies = [ + "block", + "objc", + "objc_id", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + +[[package]] +name = "once_cell" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" + +[[package]] +name = "ordered-multimap" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c672c7ad9ec066e428c00eb917124a06f08db19e2584de982cc34b1f4c12485" +dependencies = [ + "dlv-list", + "hashbrown", +] + +[[package]] +name = "ordered-stream" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44630c059eacfd6e08bdaa51b1db2ce33119caa4ddc1235e923109aa5f25ccb1" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "osmesa-sys" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88cfece6e95d2e717e0872a7f53a8684712ad13822a7979bc760b9c77ec0013b" +dependencies = [ + "shared_library", +] + +[[package]] +name = "owned_ttf_parser" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb1e509cfe7a12db2a90bfa057dfcdbc55a347f5da677c506b53dd099cfec9d" +dependencies = [ + "ttf-parser", +] + +[[package]] +name = "parking" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core 0.8.5", +] + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core 0.9.3", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" +dependencies = [ + "cfg-if 1.0.0", + "instant", + "libc", + "redox_syscall", + "smallvec", + "winapi", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "redox_syscall", + "smallvec", + "windows-sys", +] + +[[package]] +name = "percent-encoding" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pix" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c2b6992b377680150280d4708bda8207ba9e71f70507b5504f2e28d8e8e48c1" + +[[package]] +name = "pkg-config" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" + +[[package]] +name = "png_pong" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b76c1da19406fed18e81972b9015a775447532647b04a8949135916d67778f" +dependencies = [ + "miniz_oxide", + "pix", +] + +[[package]] +name = "polling" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "log", + "wepoll-ffi", + "winapi", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" + +[[package]] +name = "proc-macro-crate" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" +dependencies = [ + "thiserror", + "toml", +] + +[[package]] +name = "proc-macro2" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +dependencies = [ + "getrandom", +] + +[[package]] +name = "raw-window-handle" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b800beb9b6e7d2df1fe337c9e3d04e3af22a124460fb4c30fcc22c9117cefb41" +dependencies = [ + "cty", +] + +[[package]] +name = "redox_syscall" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534cfe58d6a18cc17120fbf4635d53d14691c1fe4d951064df9bd326178d7d5a" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redox_users" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +dependencies = [ + "getrandom", + "redox_syscall", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" + +[[package]] +name = "remove_dir_all" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +dependencies = [ + "winapi", +] + +[[package]] +name = "rog-control-center" +version = "0.1.2" +dependencies = [ + "dirs 3.0.2", + "eframe", + "egui", + "nix 0.20.2", + "notify-rust", + "rog_aura", + "rog_dbus", + "rog_profiles", + "rog_supported", + "serde", + "serde_derive", + "serde_json", + "smol", + "tempfile", + "toml", + "zbus", +] + +[[package]] +name = "rog_anime" +version = "1.3.5" +source = "git+https://gitlab.com/asus-linux/asusctl.git#808a1d2470376cd60c6092348157eeb97c35c33d" +dependencies = [ + "gif", + "glam", + "log", + "pix", + "png_pong", + "serde", + "serde_derive", + "sysfs-class", + "udev", + "zbus", + "zvariant", +] + +[[package]] +name = "rog_aura" +version = "1.2.0" +source = "git+https://gitlab.com/asus-linux/asusctl.git#808a1d2470376cd60c6092348157eeb97c35c33d" +dependencies = [ + "serde", + "serde_derive", + "zvariant", +] + +[[package]] +name = "rog_dbus" +version = "4.2.0" +source = "git+https://gitlab.com/asus-linux/asusctl.git#808a1d2470376cd60c6092348157eeb97c35c33d" +dependencies = [ + "rog_anime", + "rog_aura", + "rog_profiles", + "rog_supported", + "zbus", + "zbus_macros", + "zvariant", +] + +[[package]] +name = "rog_profiles" +version = "1.1.3" +source = "git+https://gitlab.com/asus-linux/asusctl.git#808a1d2470376cd60c6092348157eeb97c35c33d" +dependencies = [ + "serde", + "serde_derive", + "udev", + "zvariant", + "zvariant_derive", +] + +[[package]] +name = "rog_supported" +version = "4.2.1" +source = "git+https://gitlab.com/asus-linux/asusctl.git#808a1d2470376cd60c6092348157eeb97c35c33d" +dependencies = [ + "rog_aura", + "serde", + "serde_derive", + "zvariant", + "zvariant_derive", +] + +[[package]] +name = "rust-ini" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63471c4aa97a1cf8332a5f97709a79a4234698de6a1f5087faf66f2dae810e22" +dependencies = [ + "cfg-if 1.0.0", + "ordered-multimap", +] + +[[package]] +name = "ryu" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scoped-tls" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "serde" +version = "1.0.140" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc855a42c7967b7c369eb5860f7164ef1f6f81c20c7cc1141f2a604e18723b03" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.140" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f2122636b9fe3b81f1cb25099fcf2d3f542cdb1d45940d56c713158884a05da" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2ad84e47328a31223de7fed7a4f5087f2d6ddfe586cf3ca25b7a165bc0a5aed" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "sha1" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770" +dependencies = [ + "sha1_smol", +] + +[[package]] +name = "sha1_smol" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" + +[[package]] +name = "shared_library" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11" +dependencies = [ + "lazy_static", + "libc", +] + +[[package]] +name = "signal-hook" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +dependencies = [ + "libc", +] + +[[package]] +name = "slab" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slotmap" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" +dependencies = [ + "version_check", +] + +[[package]] +name = "smallvec" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" + +[[package]] +name = "smithay-client-toolkit" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a28f16a97fa0e8ce563b2774d1e732dd5d4025d2772c5dba0a41a0f90a29da3" +dependencies = [ + "bitflags", + "calloop", + "dlib", + "lazy_static", + "log", + "memmap2 0.3.1", + "nix 0.22.3", + "pkg-config", + "wayland-client", + "wayland-cursor", + "wayland-protocols", +] + +[[package]] +name = "smithay-client-toolkit" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f307c47d32d2715eb2e0ece5589057820e0e5e70d07c247d1063e844e107f454" +dependencies = [ + "bitflags", + "dlib", + "lazy_static", + "log", + "memmap2 0.5.5", + "nix 0.24.2", + "pkg-config", + "wayland-client", + "wayland-cursor", + "wayland-protocols", +] + +[[package]] +name = "smithay-clipboard" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a345c870a1fae0b1b779085e81b51e614767c239e93503588e54c5b17f4b0e8" +dependencies = [ + "smithay-client-toolkit 0.16.0", + "wayland-client", +] + +[[package]] +name = "smol" +version = "1.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85cf3b5351f3e783c1d79ab5fc604eeed8b8ae9abd36b166e8b87a089efd85e4" +dependencies = [ + "async-channel", + "async-executor", + "async-fs", + "async-io", + "async-lock", + "async-net", + "async-process", + "blocking", + "futures-lite", + "once_cell", +] + +[[package]] +name = "socket2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "str-buf" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0" + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strum" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7ac893c7d471c8a21f31cfe213ec4f6d9afeed25537c772e08ef3f005f8729e" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339f799d8b549e3744c7ac7feb216383e4005d94bdb22561b3ab8f3b808ae9fb" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "syn" +version = "1.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sysfs-class" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e1bbcf869732c45a77898f7f61ed6d411dfc37613517e444842f58d428856d1" +dependencies = [ + "numtoa", +] + +[[package]] +name = "tempfile" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +dependencies = [ + "cfg-if 1.0.0", + "fastrand", + "libc", + "redox_syscall", + "remove_dir_all", + "winapi", +] + +[[package]] +name = "thiserror" +version = "1.0.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "time" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72c91f41dcb2f096c05f0873d667dceec1087ce5bcf984ec8ffb19acddbb3217" +dependencies = [ + "libc", + "num_threads", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" + +[[package]] +name = "toml" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" +dependencies = [ + "serde", +] + +[[package]] +name = "tracing" +version = "0.1.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160" +dependencies = [ + "cfg-if 1.0.0", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b7358be39f2f274f322d2aaed611acc57f382e8eb1e5b48cb9ae30933495ce7" +dependencies = [ + "once_cell", +] + +[[package]] +name = "ttf-parser" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b3e06c9b9d80ed6b745c7159c40b311ad2916abb34a49e9be2653b90db0d8dd" + +[[package]] +name = "udev" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c960764f7e816eed851a96c364745d37f9fe71a2e7dba79fbd40104530b5dd0" +dependencies = [ + "libc", + "libudev-sys", + "pkg-config", +] + +[[package]] +name = "uds_windows" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d" +dependencies = [ + "tempfile", + "winapi", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" + +[[package]] +name = "unicode-ident" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7" + +[[package]] +name = "unicode-normalization" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" + +[[package]] +name = "url" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +dependencies = [ + "form_urlencoded", + "idna", + "matches", + "percent-encoding", +] + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "waker-fn" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" + +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994" +dependencies = [ + "cfg-if 1.0.0", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a" +dependencies = [ + "bumpalo", + "lazy_static", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de9a9cec1733468a8c657e57fa2413d2ae2c0129b95e87c5b72b8ace4d13f31f" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be" + +[[package]] +name = "wayland-client" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91223460e73257f697d9e23d401279123d36039a3f7a449e983f123292d4458f" +dependencies = [ + "bitflags", + "downcast-rs", + "libc", + "nix 0.22.3", + "scoped-tls", + "wayland-commons", + "wayland-scanner", + "wayland-sys", +] + +[[package]] +name = "wayland-commons" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94f6e5e340d7c13490eca867898c4cec5af56c27a5ffe5c80c6fc4708e22d33e" +dependencies = [ + "nix 0.22.3", + "once_cell", + "smallvec", + "wayland-sys", +] + +[[package]] +name = "wayland-cursor" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c52758f13d5e7861fc83d942d3d99bf270c83269575e52ac29e5b73cb956a6bd" +dependencies = [ + "nix 0.22.3", + "wayland-client", + "xcursor", +] + +[[package]] +name = "wayland-egl" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83281d69ee162b59031c666385e93bde4039ec553b90c4191cdb128ceea29a3a" +dependencies = [ + "wayland-client", + "wayland-sys", +] + +[[package]] +name = "wayland-protocols" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60147ae23303402e41fe034f74fb2c35ad0780ee88a1c40ac09a3be1e7465741" +dependencies = [ + "bitflags", + "wayland-client", + "wayland-commons", + "wayland-scanner", +] + +[[package]] +name = "wayland-scanner" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39a1ed3143f7a143187156a2ab52742e89dac33245ba505c17224df48939f9e0" +dependencies = [ + "proc-macro2", + "quote", + "xml-rs", +] + +[[package]] +name = "wayland-sys" +version = "0.29.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9341df79a8975679188e37dab3889bfa57c44ac2cb6da166f519a81cbe452d4" +dependencies = [ + "dlib", + "lazy_static", + "pkg-config", +] + +[[package]] +name = "web-sys" +version = "0.3.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fed94beee57daf8dd7d51f2b15dc2bcde92d7a72304cdf662a4371008b71b90" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webbrowser" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a3cffdb686fbb24d9fb8f03a213803277ed2300f11026a3afe1f108dc021b" +dependencies = [ + "jni", + "ndk-glue 0.6.2", + "url", + "web-sys", + "widestring", + "winapi", +] + +[[package]] +name = "weezl" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" + +[[package]] +name = "wepoll-ffi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" +dependencies = [ + "cc", +] + +[[package]] +name = "widestring" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-wsapoll" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9f39345ae0c8ab072c0ac7fe8a8b411636aa34f89be19ddd0d9226544f13944" +dependencies = [ + "windows_i686_gnu 0.24.0", + "windows_i686_msvc 0.24.0", + "windows_x86_64_gnu 0.24.0", + "windows_x86_64_msvc 0.24.0", +] + +[[package]] +name = "windows-sys" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +dependencies = [ + "windows_aarch64_msvc", + "windows_i686_gnu 0.36.1", + "windows_i686_msvc 0.36.1", + "windows_x86_64_gnu 0.36.1", + "windows_x86_64_msvc 0.36.1", +] + +[[package]] +name = "windows_aarch64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" + +[[package]] +name = "windows_i686_gnu" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0866510a3eca9aed73a077490bbbf03e5eaac4e1fd70849d89539e5830501fd" + +[[package]] +name = "windows_i686_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" + +[[package]] +name = "windows_i686_msvc" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf0ffed56b7e9369a29078d2ab3aaeceea48eb58999d2cff3aa2494a275b95c6" + +[[package]] +name = "windows_i686_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384a173630588044205a2993b6864a2f56e5a8c1e7668c07b93ec18cf4888dc4" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bd8f062d8ca5446358159d79a90be12c543b3a965c847c8f3eedf14b321d399" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" + +[[package]] +name = "winit" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b43cc931d58b99461188607efd7acb2a093e65fc621f54cad78517a6063e73a" +dependencies = [ + "bitflags", + "cocoa", + "core-foundation 0.9.3", + "core-graphics 0.22.3", + "core-video-sys", + "dispatch", + "instant", + "lazy_static", + "libc", + "log", + "mio", + "ndk 0.5.0", + "ndk-glue 0.5.2", + "ndk-sys 0.2.2", + "objc", + "parking_lot 0.11.2", + "percent-encoding", + "raw-window-handle", + "smithay-client-toolkit 0.15.4", + "wasm-bindgen", + "wayland-client", + "wayland-protocols", + "web-sys", + "winapi", + "x11-dl", +] + +[[package]] +name = "winreg" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d107f8c6e916235c4c01cabb3e8acf7bea8ef6a63ca2e7fa0527c049badfc48c" +dependencies = [ + "winapi", +] + +[[package]] +name = "winrt-notification" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "007a0353840b23e0c6dc73e5b962ff58ed7f6bc9ceff3ce7fe6fbad8d496edf4" +dependencies = [ + "strum", + "windows", + "xml-rs", +] + +[[package]] +name = "x11-dl" +version = "2.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea26926b4ce81a6f5d9d0f3a0bc401e5a37c6ae14a1bfaa8ff6099ca80038c59" +dependencies = [ + "lazy_static", + "libc", + "pkg-config", +] + +[[package]] +name = "x11rb" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e99be55648b3ae2a52342f9a870c0e138709a3493261ce9b469afe6e4df6d8a" +dependencies = [ + "gethostname", + "nix 0.22.3", + "winapi", + "winapi-wsapoll", +] + +[[package]] +name = "xcursor" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7" +dependencies = [ + "nom", +] + +[[package]] +name = "xml-rs" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" + +[[package]] +name = "zbus" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d8f1a037b2c4a67d9654dc7bdfa8ff2e80555bbefdd3c1833c1d1b27c963a6b" +dependencies = [ + "async-broadcast", + "async-channel", + "async-executor", + "async-io", + "async-lock", + "async-recursion", + "async-task", + "async-trait", + "byteorder", + "derivative", + "dirs 4.0.0", + "enumflags2", + "event-listener", + "futures-core", + "futures-sink", + "futures-util", + "hex", + "lazy_static", + "nix 0.23.1", + "once_cell", + "ordered-stream", + "rand", + "serde", + "serde_repr", + "sha1", + "static_assertions", + "tracing", + "uds_windows", + "winapi", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f8fb5186d1c87ae88cf234974c240671238b4a679158ad3b94ec465237349a6" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "regex", + "syn", +] + +[[package]] +name = "zbus_names" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41a408fd8a352695690f53906dc7fd036be924ec51ea5e05666ff42685ed0af5" +dependencies = [ + "serde", + "static_assertions", + "zvariant", +] + +[[package]] +name = "zvariant" +version = "3.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bd68e4e6432ef19df47d7e90e2e72b5e7e3d778e0ae3baddf12b951265cc758" +dependencies = [ + "byteorder", + "enumflags2", + "libc", + "serde", + "static_assertions", + "zvariant_derive", +] + +[[package]] +name = "zvariant_derive" +version = "3.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08e977eaa3af652f63d479ce50d924254ad76722a6289ec1a1eac3231ca30430" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] diff --git a/rog-control-center/Cargo.toml b/rog-control-center/Cargo.toml new file mode 100644 index 00000000..73eebca2 --- /dev/null +++ b/rog-control-center/Cargo.toml @@ -0,0 +1,45 @@ +[package] +name = "rog-control-center" +version = "0.1.3" +authors = ["Luke D. Jones "] +edition = "2021" + +[features] +mocking = [] + +[dependencies] +egui = { git = "https://github.com/emilk/egui" } +eframe= { git = "https://github.com/emilk/egui" } +#eframe= { git = "https://github.com/emilk/egui", default-features = false, features = ["dark-light", "default_fonts", "wgpu"] } + +rog_dbus = { path = "../rog-dbus" } +rog_aura = { path = "../rog-aura" } +rog_profiles = { path = "../rog-profiles" } +rog_supported = { path = "../rog-supported" } +# supergfxctl = { git = "https://gitlab.com/asus-linux/supergfxctl.git" } + +smol = "^1.2" + +serde = "^1.0" +toml = "^0.5" +serde_json = "^1.0" +serde_derive = "^1.0" +zbus = "^2.3" +nix = "^0.20.0" +tempfile = "3.2.0" +dirs = "3.0.1" + +[dependencies.notify-rust] +version = "^4.3" +default-features = false +features = ["z"] + +[profile.release] +lto = true +debug = false +opt-level = 3 +panic = "abort" + +[profile.bench] +debug = false +opt-level = 3 diff --git a/rog-control-center/LICENSE b/rog-control-center/LICENSE new file mode 100644 index 00000000..a612ad98 --- /dev/null +++ b/rog-control-center/LICENSE @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. diff --git a/rog-control-center/Makefile b/rog-control-center/Makefile new file mode 100644 index 00000000..38b9f575 --- /dev/null +++ b/rog-control-center/Makefile @@ -0,0 +1,65 @@ +VERSION := $(shell grep -Pm1 'version = "(\d.\d.\d)"' Cargo.toml | cut -d'"' -f2) + +INSTALL = install +INSTALL_PROGRAM = ${INSTALL} -D -m 0755 +INSTALL_DATA = ${INSTALL} -D -m 0644 + +prefix = /usr +exec_prefix = $(prefix) +bindir = $(exec_prefix)/bin +datarootdir = $(prefix)/share +libdir = $(exec_prefix)/lib + +BIN_ROG := rog-control-center + +SRC := Cargo.toml Cargo.lock Makefile $(shell find -type f -wholename '**/src/*.rs') + +DEBUG ?= 0 +ifeq ($(DEBUG),0) + ARGS += --release + TARGET = release +endif + +VENDORED ?= 0 +ifeq ($(VENDORED),1) + ARGS += --frozen +endif + +all: build + +clean: + cargo clean + +distclean: + rm -rf .cargo vendor vendor.tar.xz + +install: + $(INSTALL_PROGRAM) "./target/release/$(BIN_ROG)" "$(DESTDIR)$(bindir)/$(BIN_ROG)" + $(INSTALL_DATA) "./data/$(BIN_ROG).desktop" "$(DESTDIR)$(datarootdir)/applications/$(BIN_ROG).desktop" + $(INSTALL_DATA) "./data/$(BIN_ROG).png" "$(DESTDIR)$(datarootdir)/icons/hicolor/512x512/apps/$(BIN_ROG).png" + +uninstall: + rm -f "$(DESTDIR)$(bindir)/$(BIN_ROG)" + rm -r "$(DESTDIR)$(datarootdir)/applications/$(BIN_ROG).desktop" + rm -r "$(DESTDIR)$(datarootdir)/icons/hicolor/512x512/apps/$(BIN_ROG).png" + +update: + cargo update + +vendor: + mkdir -p .cargo + cargo vendor | head -n -1 > .cargo/config + echo 'directory = "vendor"' >> .cargo/config + mv .cargo/config ./cargo-config + rm -rf .cargo + tar pcfJ vendor_asusctl_$(VERSION).tar.xz vendor + rm -rf vendor + +build: +ifeq ($(VENDORED),1) + @echo "version = $(VERSION)" + tar pxf vendor_asusctl_$(VERSION).tar.xz +endif + cargo build $(ARGS) + +.PHONY: all clean distclean install uninstall update build diff --git a/rog-control-center/README.md b/rog-control-center/README.md new file mode 100644 index 00000000..017c4070 --- /dev/null +++ b/rog-control-center/README.md @@ -0,0 +1,22 @@ +# App template + +This is a trial app cut down to bare essentials to show how to create an app that can run in the background +with some user-config options. + +egui based. Keep in mind that this is very much a bit of a mess due to experimenting. + +## Running + +Use `WINIT_UNIX_BACKEND=x11 rog-control-center`. `WINIT_UNIX_BACKEND` is required due to window decorations not updating and the window not really being set as visible/invisible on wayland. + +## Build features + +For testing some features that are typically not available on all laptops: + +```rust +cargo run --features mocking +``` + +## TODO + +- Add notification watch for certain UI elements to enforce an update (for example when a user changes Aura via a hot key). diff --git a/rog-control-center/data/rog-control-center.desktop b/rog-control-center/data/rog-control-center.desktop new file mode 100644 index 00000000..0e294f93 --- /dev/null +++ b/rog-control-center/data/rog-control-center.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Version=1.0 +Type=Application + +Name=ROG Control Center +Comment=Make your ASUS ROG Laptop go Brrrrr! +Categories=Settings + +Icon=rog-control-center +Exec=env WINIT_UNIX_BACKEND=x11 rog-control-center +Terminal=false diff --git a/rog-control-center/data/rog-control-center.png b/rog-control-center/data/rog-control-center.png new file mode 100644 index 00000000..776e9edd Binary files /dev/null and b/rog-control-center/data/rog-control-center.png differ diff --git a/rog-control-center/src/app.rs b/rog-control-center/src/app.rs new file mode 100644 index 00000000..4ded2cfe --- /dev/null +++ b/rog-control-center/src/app.rs @@ -0,0 +1,127 @@ +use std::{ + io::Write, + sync::{ + atomic::{AtomicBool, Ordering}, + Arc, + }, + time::Duration, +}; + +use egui::{Button, RichText}; +use rog_dbus::RogDbusClientBlocking; +use rog_supported::SupportedFunctions; + +use crate::{config::Config, get_ipc_file, page_states::PageDataStates, Page, SHOWING_GUI}; + +pub struct RogApp<'a> { + pub page: Page, + pub states: PageDataStates, + pub supported: SupportedFunctions, + /// Should the app begin showing the GUI + pub begin_show_gui: Arc, + /// Is the app GUI closed (and running in bg) + pub running_in_bg: bool, + // TODO: can probably just open and read whenever + pub config: Config, + pub asus_dbus: RogDbusClientBlocking<'a>, +} + +impl<'a> RogApp<'a> { + /// Called once before the first frame. + pub fn new( + start_closed: bool, + config: Config, + show_gui: Arc, + states: PageDataStates, + _cc: &eframe::CreationContext<'_>, + ) -> Self { + let (dbus, _) = RogDbusClientBlocking::new().unwrap(); + let supported = dbus.proxies().supported().supported_functions().unwrap(); + + Self { + supported, + states, + page: Page::System, + begin_show_gui: show_gui, + running_in_bg: start_closed, + config, + asus_dbus: dbus, + } + } +} + +impl<'a> eframe::App for RogApp<'a> { + fn on_exit_event(&mut self) -> bool { + if self.config.run_in_background { + self.running_in_bg = true; + get_ipc_file().unwrap().write_all(&[0]).unwrap(); + return false; + } + true + } + + /// Called each time the UI needs repainting, which may be many times per second. + /// Put your widgets into a `SidePanel`, `TopPanel`, `CentralPanel`, `Window` or `Area`. + fn update(&mut self, ctx: &egui::Context, frame: &mut eframe::Frame) { + let Self { + begin_show_gui: should_show_gui, + supported, + asus_dbus: dbus, + states, + .. + } = self; + if states.refresh_if_notfied(supported, dbus) { + ctx.request_repaint(); + } + + let page = self.page; + + if should_show_gui.load(Ordering::SeqCst) { + let mut ipc_file = get_ipc_file().unwrap(); + ipc_file.write_all(&[SHOWING_GUI]).unwrap(); + should_show_gui.store(false, Ordering::SeqCst); + frame.set_visible(true); + self.running_in_bg = false; + } + if self.running_in_bg { + // Request to draw nothing at all + ctx.request_repaint_after(Duration::from_millis(500)); + frame.set_visible(false); + return; + } + // Do all GUI display after this point + + self.top_bar(ctx, frame); + self.side_panel(ctx); + + if let Some(err) = self.states.error.clone() { + egui::CentralPanel::default().show(ctx, |ui| { + ui.heading(RichText::new("Error!").size(28.0)); + + ui.centered_and_justified(|ui| { + ui.label(RichText::new(format!("The error was: {:?}", err)).size(22.0)); + }); + }); + egui::TopBottomPanel::bottom("error_bar") + .default_height(26.0) + .show(ctx, |ui| { + ui.with_layout(egui::Layout::right_to_left(egui::Align::TOP), |ui| { + if ui + .add(Button::new(RichText::new("Okay").size(20.0))) + .clicked() + { + self.states.error = None; + } + }); + }); + } else if page == Page::System { + self.system_page(ctx); + } else if page == Page::AuraEffects { + self.aura_page(ctx); + } else if page == Page::AnimeMatrix { + self.anime_page(ctx); + } else if page == Page::FanCurves { + self.fan_curve_page(ctx); + } + } +} diff --git a/rog-control-center/src/config.rs b/rog-control-center/src/config.rs new file mode 100644 index 00000000..bcb885b0 --- /dev/null +++ b/rog-control-center/src/config.rs @@ -0,0 +1,92 @@ +use std::{ + fs::{create_dir, OpenOptions}, + io::{Read, Write}, +}; + +use serde_derive::{Deserialize, Serialize}; +//use log::{error, info, warn}; + +use crate::error::Error; + +const CFG_DIR: &str = "rog"; +const CFG_FILE_NAME: &str = "app-template.cfg"; + +#[derive(Debug, Deserialize, Serialize)] +#[serde(default)] +pub struct Config { + pub run_in_background: bool, + pub startup_in_background: bool, + pub enable_notifications: bool, +} + +impl Default for Config { + fn default() -> Self { + Self { + run_in_background: true, + startup_in_background: false, + enable_notifications: true, + } + } +} + +impl Config { + pub fn load() -> Result { + let mut path = if let Some(dir) = dirs::config_dir() { + dir + } else { + return Err(Error::XdgVars); + }; + + path.push(CFG_DIR); + if !path.exists() { + create_dir(path.clone())?; + } + + path.push(CFG_FILE_NAME); + + let mut file = OpenOptions::new() + .read(true) + .write(true) + .create(true) + .open(&path)?; + + let mut buf = String::new(); + + if let Ok(read_len) = file.read_to_string(&mut buf) { + if read_len == 0 { + let default = Config::default(); + let t = toml::to_string_pretty(&default).unwrap(); + file.write_all(t.as_bytes())?; + return Ok(default); + } else if let Ok(data) = toml::from_str::(&buf) { + return Ok(data); + } + } + Err(Error::ConfigLoadFail) + } + + pub fn save(&self) -> Result<(), Error> { + let mut path = if let Some(dir) = dirs::config_dir() { + dir + } else { + return Err(Error::XdgVars); + }; + + path.push(CFG_DIR); + if !path.exists() { + create_dir(path.clone())?; + } + + path.push(CFG_FILE_NAME); + + let mut file = OpenOptions::new() + .write(true) + .create(true) + .truncate(true) + .open(&path)?; + + let t = toml::to_string_pretty(&self).unwrap(); + file.write_all(t.as_bytes())?; + Ok(()) + } +} diff --git a/rog-control-center/src/error.rs b/rog-control-center/src/error.rs new file mode 100644 index 00000000..98a9bef3 --- /dev/null +++ b/rog-control-center/src/error.rs @@ -0,0 +1,43 @@ +use std::fmt; + +#[derive(Debug)] +pub enum Error { + Io(std::io::Error), + Nix(nix::Error), + ConfigLoadFail, + ConfigLockFail, + XdgVars, +} + +impl fmt::Display for Error { + // This trait requires `fmt` with this exact signature. + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { + Error::Io(err) => write!(f, "Failed to open: {}", err), + Error::Nix(err) => write!(f, "Error: {}", err), + Error::ConfigLoadFail => write!(f, "Failed to load user config"), + Error::ConfigLockFail => write!(f, "Failed to lock user config"), + Error::XdgVars => write!(f, "XDG environment vars appear unset"), + } + } +} + +impl std::error::Error for Error {} + +impl From for Error { + fn from(err: std::io::Error) -> Self { + Error::Io(err) + } +} + +impl From for zbus::fdo::Error { + fn from(err: Error) -> Self { + zbus::fdo::Error::Failed(format!("Anime zbus error: {}", err)) + } +} + +impl From for Error { + fn from(err: nix::Error) -> Self { + Error::Nix(err) + } +} diff --git a/rog-control-center/src/lib.rs b/rog-control-center/src/lib.rs new file mode 100644 index 00000000..e97b287d --- /dev/null +++ b/rog-control-center/src/lib.rs @@ -0,0 +1,77 @@ +pub mod app; +use std::{ + fs::{remove_dir_all, File, OpenOptions}, + io::{Read, Write}, + process::exit, + thread::sleep, + time::Duration, +}; + +pub use app::RogApp; + +pub mod config; +pub mod error; +pub mod notify; +pub mod page_states; +pub mod widgets; + +use nix::{sys::stat, unistd}; +use tempfile::TempDir; +//use log::{error, info, warn}; + +pub const SHOWING_GUI: u8 = 1; +pub const SHOW_GUI: u8 = 2; + +#[derive(PartialEq, Clone, Copy)] +pub enum Page { + System, + AuraEffects, + AnimeMatrix, + FanCurves, +} + +/// Either exit the process, or return with a refreshed tmp-dir +pub fn on_tmp_dir_exists() -> Result { + let mut buf = [0u8; 4]; + let path = std::env::temp_dir().join("rog-gui"); + + let mut ipc_file = OpenOptions::new() + .read(true) + .write(true) + .create(false) + .open(path.join("ipc.pipe"))?; + + // If the app is running this ends up stacked on top of SHOWING_GUI + ipc_file.write_all(&[SHOW_GUI])?; + // tiny sleep to give the app a chance to respond + sleep(Duration::from_millis(10)); + ipc_file.read(&mut buf).ok(); + + // First entry is the actual state + if buf[0] == SHOWING_GUI { + ipc_file.write_all(&[SHOWING_GUI])?; // Store state again as we drained the fifo + exit(0); + } else if buf[0] == SHOW_GUI { + remove_dir_all(&path)?; + return tempfile::Builder::new() + .prefix("rog-gui") + .rand_bytes(0) + .tempdir(); + } + exit(-1); +} + +pub fn get_ipc_file() -> Result { + let tmp_dir = std::env::temp_dir().join("rog-gui"); + let fifo_path = tmp_dir.join("ipc.pipe"); + if let Err(e) = unistd::mkfifo(&fifo_path, stat::Mode::S_IRWXU) { + if !matches!(e, nix::Error::Sys(nix::errno::Errno::EEXIST)) { + return Err(e)?; + } + } + Ok(OpenOptions::new() + .read(true) + .write(true) + .truncate(true) + .open(&fifo_path)?) +} diff --git a/rog-control-center/src/main.rs b/rog-control-center/src/main.rs new file mode 100644 index 00000000..f194b840 --- /dev/null +++ b/rog-control-center/src/main.rs @@ -0,0 +1,94 @@ +use rog_control_center::{ + config::Config, get_ipc_file, notify::start_notifications, on_tmp_dir_exists, + page_states::PageDataStates, RogApp, SHOW_GUI, +}; +use rog_dbus::RogDbusClientBlocking; +use std::{ + io::Read, + sync::{ + atomic::{AtomicBool, Ordering}, + Arc, + }, + thread::spawn, + time::Duration, +}; + +fn main() -> Result<(), Box> { + // Startup + let mut config = Config::load()?; + let start_closed = config.startup_in_background; + + if config.startup_in_background { + config.run_in_background = true; + config.save()?; + } + + let (dbus, _) = RogDbusClientBlocking::new().unwrap(); + let supported = dbus.proxies().supported().supported_functions().unwrap(); + // Cheap method to alert to notifications rather than spinning a thread for each + // This is quite different when done in a retained mode app + let charge_notified = Arc::new(AtomicBool::new(false)); + let bios_notified = Arc::new(AtomicBool::new(false)); + let aura_notified = Arc::new(AtomicBool::new(false)); + let anime_notified = Arc::new(AtomicBool::new(false)); + let profiles_notified = Arc::new(AtomicBool::new(false)); + let fans_notified = Arc::new(AtomicBool::new(false)); + // TODO: change this to an error instead of the nested unwraps, then use to + // display a bare box app with error message. + let states = PageDataStates::new( + charge_notified.clone(), + bios_notified.clone(), + aura_notified.clone(), + anime_notified.clone(), + profiles_notified.clone(), + fans_notified.clone(), + &supported, + &dbus, + ); + + if config.enable_notifications { + start_notifications( + charge_notified, + bios_notified, + aura_notified, + anime_notified, + profiles_notified, + fans_notified, + )?; + } + + // tmp-dir must live to the end of program life + let _tmp_dir = match tempfile::Builder::new() + .prefix("rog-gui") + .rand_bytes(0) + .tempdir() + { + Ok(tmp) => tmp, + Err(_) => on_tmp_dir_exists().unwrap(), + }; + + let native_options = eframe::NativeOptions { + decorated: true, + ..Default::default() + }; + + let should_show_gui = Arc::new(AtomicBool::new(!start_closed)); + let should = should_show_gui.clone(); + spawn(move || { + // Loop is blocked here until a single byte is read + loop { + let mut buf = [0u8; 4]; + if get_ipc_file().unwrap().read(&mut buf).is_ok() && buf[0] == SHOW_GUI { + should_show_gui.store(true, Ordering::SeqCst); + // Give the starting app a change to read or we'll race it + std::thread::sleep(Duration::from_millis(10)); + } + } + }); + + eframe::run_native( + "ROG Control Center", + native_options, + Box::new(move |cc| Box::new(RogApp::new(start_closed, config, should, states, cc))), + ); +} diff --git a/rog-control-center/src/notify.rs b/rog-control-center/src/notify.rs new file mode 100644 index 00000000..a73a6727 --- /dev/null +++ b/rog-control-center/src/notify.rs @@ -0,0 +1,222 @@ +//TODO: a lot of app state refresh depends on this so there needs +// to be an extra AtomicBool for checking if notifications are enabled + +use notify_rust::{Hint, Notification, NotificationHandle}; +use rog_aura::AuraEffect; +use rog_dbus::{ + zbus_anime::AnimeProxy, zbus_charge::ChargeProxy, zbus_led::LedProxy, + zbus_profile::ProfileProxy, zbus_rogbios::RogBiosProxy, +}; +use rog_profiles::Profile; +use smol::{future, Executor}; +use std::{ + error::Error, + sync::{ + atomic::{AtomicBool, Ordering}, + Arc, Mutex, + }, + thread::spawn, +}; +use zbus::export::futures_util::StreamExt; + +const NOTIF_HEADER: &str = "ROG Control"; + +macro_rules! notify { + ($notifier:ident, $last_notif:ident, $data:expr) => { + if let Some(notif) = $last_notif.take() { + notif.close(); + } + if let Ok(x) = $notifier($data) { + $last_notif.replace(x); + } + }; +} + +macro_rules! base_notification { + ($body:expr) => { + Notification::new() + .summary(NOTIF_HEADER) + .body($body) + .timeout(2000) + .show() + }; +} + +type SharedHandle = Arc>>; + +pub fn start_notifications( + charge_notified: Arc, + bios_notified: Arc, + aura_notified: Arc, + anime_notified: Arc, + profiles_notified: Arc, + _fans_notified: Arc, +) -> Result<(), Box> { + let last_notification: SharedHandle = Arc::new(Mutex::new(None)); + + let executor = Executor::new(); + // BIOS notif + let x = last_notification.clone(); + executor + .spawn(async move { + let conn = zbus::Connection::system().await.unwrap(); + let proxy = RogBiosProxy::new(&conn).await.unwrap(); + if let Ok(p) = proxy.receive_notify_post_boot_sound().await { + p.for_each(|e| { + if let Ok(out) = e.args() { + if let Ok(ref mut lock) = x.try_lock() { + notify!(do_post_sound_notif, lock, &out.sound()); + } + bios_notified.store(true, Ordering::SeqCst); + } + future::ready(()) + }) + .await; + }; + }) + .detach(); + + // Charge notif + let x = last_notification.clone(); + executor + .spawn(async move { + let conn = zbus::Connection::system().await.unwrap(); + let proxy = ChargeProxy::new(&conn).await.unwrap(); + if let Ok(p) = proxy.receive_notify_charge().await { + p.for_each(|e| { + if let Ok(out) = e.args() { + if let Ok(ref mut lock) = x.try_lock() { + notify!(do_charge_notif, lock, &out.limit); + } + charge_notified.store(true, Ordering::SeqCst); + } + future::ready(()) + }) + .await; + }; + }) + .detach(); + + // Profile notif + let x = last_notification.clone(); + executor + .spawn(async move { + let conn = zbus::Connection::system().await.unwrap(); + let proxy = ProfileProxy::new(&conn).await.unwrap(); + if let Ok(p) = proxy.receive_notify_profile().await { + p.for_each(|e| { + if let Ok(out) = e.args() { + if let Ok(ref mut lock) = x.try_lock() { + notify!(do_thermal_notif, lock, &out.profile); + } + profiles_notified.store(true, Ordering::SeqCst); + } + future::ready(()) + }) + .await; + }; + }) + .detach(); + + // LED notif + let x = last_notification.clone(); + let a = aura_notified.clone(); + executor + .spawn(async move { + let conn = zbus::Connection::system().await.unwrap(); + let proxy = LedProxy::new(&conn).await.unwrap(); + if let Ok(p) = proxy.receive_notify_led().await { + p.for_each(|e| { + if let Ok(out) = e.args() { + if let Ok(ref mut lock) = x.try_lock() { + notify!(do_led_notif, lock, &out.data); + } + a.store(true, Ordering::SeqCst); + } + future::ready(()) + }) + .await; + }; + }) + .detach(); + + executor + .spawn(async move { + let conn = zbus::Connection::system().await.unwrap(); + let proxy = LedProxy::new(&conn).await.unwrap(); + if let Ok(p) = proxy.receive_notify_power_states().await { + p.for_each(|e| { + if let Ok(_out) = e.args() { + // if let Ok(ref mut lock) = last_notification.try_lock() { + // notify!(do_led_notif, lock, &out.data); + // } + aura_notified.store(true, Ordering::SeqCst); + } + future::ready(()) + }) + .await; + }; + }) + .detach(); + + executor + .spawn(async move { + let conn = zbus::Connection::system().await.unwrap(); + let proxy = AnimeProxy::new(&conn).await.unwrap(); + if let Ok(p) = proxy.receive_power_states().await { + p.for_each(|e| { + if let Ok(_out) = e.args() { + // if let Ok(ref mut lock) = last_notification.try_lock() { + // notify!(do_led_notif, lock, &out.data); + // } + anime_notified.store(true, Ordering::SeqCst); + } + future::ready(()) + }) + .await; + }; + }) + .detach(); + + spawn(move || loop { + smol::block_on(executor.tick()); + }); + Ok(()) +} + +fn do_thermal_notif(profile: &Profile) -> Result> { + let icon = match profile { + Profile::Balanced => "asus_notif_yellow", + Profile::Performance => "asus_notif_red", + Profile::Quiet => "asus_notif_green", + }; + let profile: &str = (*profile).into(); + let x = Notification::new() + .summary("ASUS ROG") + .body(&format!( + "Thermal profile changed to {}", + profile.to_uppercase(), + )) + .hint(Hint::Resident(true)) + .timeout(2000) + .hint(Hint::Category("device".into())) + //.hint(Hint::Transient(true)) + .icon(icon) + .show()?; + Ok(x) +} + +fn do_led_notif(ledmode: &AuraEffect) -> Result { + base_notification!(&format!( + "Keyboard LED mode changed to {}", + ledmode.mode_name() + )) +} + +fn do_charge_notif(limit: &u8) -> Result { + base_notification!(&format!("Battery charge limit changed to {}", limit)) +} + +fn do_post_sound_notif(on: &bool) -> Result { + base_notification!(&format!("BIOS Post sound {}", on)) +} diff --git a/rog-control-center/src/page_states.rs b/rog-control-center/src/page_states.rs new file mode 100644 index 00000000..4c7e5015 --- /dev/null +++ b/rog-control-center/src/page_states.rs @@ -0,0 +1,294 @@ +use std::{ + collections::{BTreeMap, HashMap, HashSet}, + sync::{ + atomic::{AtomicBool, Ordering}, + Arc, + }, +}; + +use egui::Vec2; +use rog_aura::{usb::AuraPowerDev, AuraEffect, AuraModeNum}; +use rog_dbus::RogDbusClientBlocking; +use rog_profiles::{fan_curve_set::FanCurveSet, FanCurvePU, Profile}; +use rog_supported::SupportedFunctions; + +#[derive(Clone, Debug)] +pub struct BiosState { + /// To be shared to a thread that checks notifications. + /// It's a bit general in that it won't provide *what* was + /// updated, so the full state needs refresh + pub was_notified: Arc, + pub post_sound: bool, + pub dedicated_gfx: bool, + pub panel_overdrive: bool, + pub dgpu_disable: bool, + pub egpu_enable: bool, +} + +impl BiosState { + pub fn new( + was_notified: Arc, + supported: &SupportedFunctions, + dbus: &RogDbusClientBlocking, + ) -> Self { + Self { + was_notified, + post_sound: if supported.rog_bios_ctrl.post_sound { + dbus.proxies().rog_bios().post_boot_sound().unwrap() != 0 + } else { + false + }, + dedicated_gfx: if supported.rog_bios_ctrl.dedicated_gfx { + dbus.proxies().rog_bios().dedicated_graphic_mode().unwrap() != 0 + } else { + false + }, + panel_overdrive: if supported.rog_bios_ctrl.panel_overdrive { + dbus.proxies().rog_bios().panel_overdrive().unwrap() != 0 + } else { + false + }, + // TODO: needs supergfx + dgpu_disable: supported.rog_bios_ctrl.dgpu_disable, + egpu_enable: supported.rog_bios_ctrl.egpu_enable, + } + } +} + +#[derive(Clone, Debug)] +pub struct ProfilesState { + pub was_notified: Arc, + pub list: Vec, + pub current: Profile, +} + +impl ProfilesState { + pub fn new( + was_notified: Arc, + supported: &SupportedFunctions, + dbus: &RogDbusClientBlocking, + ) -> Self { + Self { + was_notified, + list: if supported.platform_profile.platform_profile { + dbus.proxies().profile().profiles().unwrap() + } else { + vec![] + }, + current: if supported.platform_profile.platform_profile { + dbus.proxies().profile().active_profile().unwrap() + } else { + Profile::Balanced + }, + } + } +} + +#[derive(Clone, Debug)] +pub struct FanCurvesState { + pub was_notified: Arc, + pub show_curve: Profile, + pub show_graph: FanCurvePU, + pub enabled: HashSet, + pub curves: HashMap, + pub drag_delta: Vec2, +} + +impl FanCurvesState { + pub fn new( + was_notified: Arc, + supported: &SupportedFunctions, + dbus: &RogDbusClientBlocking, + ) -> Self { + let profiles = if supported.platform_profile.platform_profile { + dbus.proxies().profile().profiles().unwrap() + } else { + vec![Profile::Balanced, Profile::Quiet, Profile::Performance] + }; + let enabled = if supported.platform_profile.fan_curves { + HashSet::from_iter( + dbus.proxies() + .profile() + .enabled_fan_profiles() + .unwrap() + .iter() + .cloned(), + ) + } else { + HashSet::from([Profile::Balanced, Profile::Quiet, Profile::Performance]) + }; + + let mut curves: HashMap = HashMap::new(); + profiles.iter().for_each(|p| { + if supported.platform_profile.fan_curves { + let curve = dbus.proxies().profile().fan_curve_data(*p).unwrap(); + curves.insert(*p, curve); + } else { + let mut curve = FanCurveSet::default(); + curve.cpu.pwm = [30, 40, 60, 100, 140, 180, 200, 250]; + curve.cpu.temp = [20, 30, 40, 50, 70, 80, 90, 100]; + curve.gpu.pwm = [40, 80, 100, 140, 170, 200, 230, 250]; + curve.gpu.temp = [20, 30, 40, 50, 70, 80, 90, 100]; + curves.insert(*p, curve); + } + }); + + let show_curve = if supported.platform_profile.fan_curves { + dbus.proxies().profile().active_profile().unwrap() + } else { + Profile::Balanced + }; + + Self { + was_notified, + show_curve, + show_graph: FanCurvePU::CPU, + enabled, + curves, + drag_delta: Vec2::default(), + } + } +} + +#[derive(Clone, Debug)] +pub struct AuraState { + pub was_notified: Arc, + pub current_mode: AuraModeNum, + pub modes: BTreeMap, + pub enabled: AuraPowerDev, +} + +impl AuraState { + pub fn new( + was_notified: Arc, + supported: &SupportedFunctions, + dbus: &RogDbusClientBlocking, + ) -> Self { + Self { + was_notified, + current_mode: if !supported.keyboard_led.stock_led_modes.is_empty() { + dbus.proxies().led().led_mode().unwrap() + } else { + AuraModeNum::Static + }, + + modes: if !supported.keyboard_led.stock_led_modes.is_empty() { + dbus.proxies().led().led_modes().unwrap() + } else { + BTreeMap::new() + }, + enabled: dbus.proxies().led().leds_enabled().unwrap(), + } + } +} + +#[derive(Clone, Debug)] +pub struct AnimeState { + pub was_notified: Arc, + pub bright: u8, + pub boot: bool, + pub awake: bool, + pub sleep: bool, +} + +impl AnimeState { + pub fn new( + was_notified: Arc, + supported: &SupportedFunctions, + dbus: &RogDbusClientBlocking, + ) -> Self { + Self { + was_notified, + boot: if supported.anime_ctrl.0 { + dbus.proxies().anime().boot_enabled().unwrap() + } else { + false + }, + awake: if supported.anime_ctrl.0 { + dbus.proxies().anime().awake_enabled().unwrap() + } else { + false + }, + // TODO: + sleep: false, + bright: 200, + } + } +} + +#[derive(Debug)] +pub struct PageDataStates { + pub was_notified: Arc, + /// Because much of the app state here is the same as `RogBiosSupportedFunctions` + /// we can re-use that structure. + pub bios: BiosState, + pub aura: AuraState, + pub anime: AnimeState, + pub profiles: ProfilesState, + pub fan_curves: FanCurvesState, + pub charge_limit: i16, + pub error: Option, +} + +impl PageDataStates { + pub fn new( + charge_notified: Arc, + bios_notified: Arc, + aura_notified: Arc, + anime_notified: Arc, + profiles_notified: Arc, + fans_notified: Arc, + supported: &SupportedFunctions, + dbus: &RogDbusClientBlocking, + ) -> Self { + Self { + was_notified: charge_notified, + charge_limit: dbus.proxies().charge().limit().unwrap(), + bios: BiosState::new(bios_notified, supported, dbus), + aura: AuraState::new(aura_notified, supported, dbus), + anime: AnimeState::new(anime_notified, supported, dbus), + profiles: ProfilesState::new(profiles_notified, supported, dbus), + fan_curves: FanCurvesState::new(fans_notified, supported, dbus), + error: None, + } + } + + pub fn refresh_if_notfied( + &mut self, + supported: &SupportedFunctions, + dbus: &RogDbusClientBlocking, + ) -> bool { + let mut notified = false; + if self.was_notified.load(Ordering::SeqCst) { + self.charge_limit = dbus.proxies().charge().limit().unwrap(); + self.was_notified.store(false, Ordering::SeqCst); + notified = true; + } + + if self.aura.was_notified.load(Ordering::SeqCst) { + self.aura = AuraState::new(self.aura.was_notified.clone(), supported, dbus); + self.aura.was_notified.store(false, Ordering::SeqCst); + notified = true; + } + + if self.bios.was_notified.load(Ordering::SeqCst) { + self.bios = BiosState::new(self.bios.was_notified.clone(), supported, dbus); + self.bios.was_notified.store(false, Ordering::SeqCst); + notified = true; + } + + if self.profiles.was_notified.load(Ordering::SeqCst) { + self.profiles = ProfilesState::new(self.profiles.was_notified.clone(), supported, dbus); + self.profiles.was_notified.store(false, Ordering::SeqCst); + notified = true; + } + + if self.fan_curves.was_notified.load(Ordering::SeqCst) { + self.fan_curves = + FanCurvesState::new(self.fan_curves.was_notified.clone(), supported, dbus); + self.fan_curves.was_notified.store(false, Ordering::SeqCst); + notified = true; + } + notified + } +} diff --git a/rog-control-center/src/widgets/anime_page.rs b/rog-control-center/src/widgets/anime_page.rs new file mode 100644 index 00000000..9ae20ab8 --- /dev/null +++ b/rog-control-center/src/widgets/anime_page.rs @@ -0,0 +1,77 @@ +use egui::RichText; + +use crate::RogApp; + +impl<'a> RogApp<'a> { + pub fn anime_page(&mut self, ctx: &egui::Context) { + egui::CentralPanel::default().show(ctx, |ui| { + ui.heading("AniMe Matrix Settings"); + ui.label("Options are incomplete. Awake + Boot should work"); + + let Self { + states, + asus_dbus: dbus, + .. + } = self; + + let mut changed = false; + + ui.horizontal_wrapped(|ui| { + ui.vertical(|ui| { + let h = 16.0; + ui.set_row_height(22.0); + ui.horizontal_wrapped(|ui| { + ui.label(RichText::new("Brightness").size(h)); + }); + ui.horizontal_wrapped(|ui| { + ui.label(RichText::new("Boot").size(h)); + }); + ui.horizontal_wrapped(|ui| { + ui.label(RichText::new("Awake").size(h)); + }); + ui.horizontal_wrapped(|ui| { + ui.label(RichText::new("Sleep").size(h)); + }); + }); + ui.vertical(|ui| { + ui.set_row_height(22.0); + ui.horizontal_wrapped(|ui| { + if ui + .add(egui::Slider::new(&mut states.anime.bright, 0..=254)) + .changed() + { + changed = true; + } + }); + ui.horizontal_wrapped(|ui| { + if ui.checkbox(&mut states.anime.boot, "Enable").changed() { + dbus.proxies() + .anime() + .set_boot_on_off(states.anime.boot) + .map_err(|err| { + states.error = Some(err.to_string()); + }) + .ok(); + } + }); + ui.horizontal_wrapped(|ui| { + if ui.checkbox(&mut states.anime.awake, "Enable").changed() { + dbus.proxies() + .anime() + .set_on_off(states.anime.awake) + .map_err(|err| { + states.error = Some(err.to_string()); + }) + .ok(); + } + }); + ui.horizontal_wrapped(|ui| { + if ui.checkbox(&mut states.anime.sleep, "Enable").changed() { + changed = true; + } + }); + }); + }); + }); + } +} diff --git a/rog-control-center/src/widgets/aura_page.rs b/rog-control-center/src/widgets/aura_page.rs new file mode 100644 index 00000000..90e85fc0 --- /dev/null +++ b/rog-control-center/src/widgets/aura_page.rs @@ -0,0 +1,455 @@ +use egui::{RichText, Ui}; +use rog_aura::{ + usb::{AuraDev1866, AuraDev19b6, AuraDevice, AuraPowerDev}, + AuraModeNum, AuraZone, Colour, Speed, +}; +use rog_dbus::RogDbusClientBlocking; +use rog_supported::SupportedFunctions; + +use crate::{ + page_states::{AuraState, PageDataStates}, + RogApp, +}; + +impl<'a> RogApp<'a> { + pub fn aura_page(&mut self, ctx: &egui::Context) { + let Self { + supported, + states, + asus_dbus: dbus, + .. + } = self; + + egui::CentralPanel::default().show(ctx, |ui| { + Self::aura_power(supported, states, dbus, ui); + ui.separator(); + Self::aura_modes(supported, states, dbus, ui); + }); + } + + fn aura_power( + supported: &SupportedFunctions, + states: &mut PageDataStates, + dbus: &mut RogDbusClientBlocking, + ui: &mut Ui, + ) { + match supported.keyboard_led.prod_id { + AuraDevice::X1854 | AuraDevice::X1869 | AuraDevice::X1866 => { + Self::aura_power1(supported, states, dbus, ui) + } + AuraDevice::X19B6 => Self::aura_power2(supported, states, dbus, ui), + AuraDevice::Unknown => {} + } + } + + fn aura_power1( + supported: &SupportedFunctions, + states: &mut PageDataStates, + dbus: &mut RogDbusClientBlocking, + ui: &mut Ui, + ) { + let enabled_states = &mut states.aura.enabled; + + ui.heading("Aura go brrrrr! (incomplete)"); + ui.separator(); + + let boot = &mut enabled_states.x1866.contains(&AuraDev1866::Boot); + let sleep = &mut enabled_states.x1866.contains(&AuraDev1866::Sleep); + let keyboard = &mut enabled_states.x1866.contains(&AuraDev1866::Keyboard); + let lightbar = &mut enabled_states.x1866.contains(&AuraDev1866::Lightbar); + let mut changed = false; + + ui.horizontal_wrapped(|ui| { + ui.vertical(|ui| { + let h = 16.0; + ui.set_row_height(22.0); + ui.horizontal_wrapped(|ui| { + ui.label(RichText::new("Boot").size(h)); + }); + ui.horizontal_wrapped(|ui| { + ui.label(RichText::new("Awake").size(h)); + }); + ui.horizontal_wrapped(|ui| { + ui.label(RichText::new("Sleep").size(h)); + }); + }); + ui.vertical(|ui| { + ui.set_row_height(22.0); + ui.horizontal_wrapped(|ui| { + if ui.checkbox(boot, "Enable").changed() { + changed = true; + } + }); + ui.horizontal_wrapped(|ui| { + if ui.toggle_value(keyboard, "Keyboard").changed() { + changed = true; + } + if !supported.keyboard_led.multizone_led_mode.is_empty() { + if ui.toggle_value(lightbar, "Lightbar").changed() { + changed = true; + } + } + }); + ui.horizontal_wrapped(|ui| { + if ui.checkbox(sleep, "Enable").changed() { + changed = true; + } + }); + }); + }); + + if changed { + let mut enabled = Vec::new(); + let mut disabled = Vec::new(); + + let mut modify = |b: bool, a: AuraDev1866| { + if b { + enabled.push(a); + if !enabled_states.x1866.contains(&a) { + enabled_states.x1866.push(a); + } + } else { + disabled.push(a); + // This would be so much better as a hashset + if enabled_states.x1866.contains(&a) { + let mut idx = 0; + for (i, n) in enabled_states.x1866.iter().enumerate() { + if *n == a { + idx = i; + break; + } + } + enabled_states.x1866.remove(idx); + } + } + }; + modify(*boot, AuraDev1866::Boot); + modify(*sleep, AuraDev1866::Sleep); + modify(*keyboard, AuraDev1866::Keyboard); + if !supported.keyboard_led.multizone_led_mode.is_empty() { + modify(*lightbar, AuraDev1866::Lightbar); + } + + let mut send = |enable: bool, data: Vec| { + let options = AuraPowerDev { + x1866: data, + x19b6: vec![], + }; + // build data to send + dbus.proxies() + .led() + .set_leds_power(options, enable) + .map_err(|err| { + states.error = Some(err.to_string()); + }) + .ok(); + }; + send(true, enabled); + send(false, disabled); + } + } + + fn aura_power2( + supported: &SupportedFunctions, + states: &mut PageDataStates, + dbus: &mut RogDbusClientBlocking, + ui: &mut Ui, + ) { + let enabled_states = &mut states.aura.enabled; + + ui.heading("Lights go brrrrr! (incomplete)"); + ui.separator(); + + let has_logo = supported + .keyboard_led + .multizone_led_mode + .contains(&AuraZone::Logo); + let has_lightbar = supported + .keyboard_led + .multizone_led_mode + .contains(&AuraZone::BarLeft) + || supported + .keyboard_led + .multizone_led_mode + .contains(&AuraZone::BarRight); + + let boot_bar = &mut enabled_states.x19b6.contains(&AuraDev19b6::BootBar); + let boot_logo = &mut enabled_states.x19b6.contains(&AuraDev19b6::BootLogo); + let boot_keyb = &mut enabled_states.x19b6.contains(&AuraDev19b6::BootKeyb); + + let awake_bar = &mut enabled_states.x19b6.contains(&AuraDev19b6::AwakeBar); + let awake_logo = &mut enabled_states.x19b6.contains(&AuraDev19b6::AwakeLogo); + let awake_keyb = &mut enabled_states.x19b6.contains(&AuraDev19b6::AwakeKeyb); + + let sleep_bar = &mut enabled_states.x19b6.contains(&AuraDev19b6::SleepBar); + let sleep_logo = &mut enabled_states.x19b6.contains(&AuraDev19b6::SleepLogo); + let sleep_keyb = &mut enabled_states.x19b6.contains(&AuraDev19b6::SleepKeyb); + + let mut changed = false; + + let mut item = |keyboard: &mut bool, logo: &mut bool, lightbar: &mut bool, ui: &mut Ui| { + ui.horizontal_wrapped(|ui| { + if ui.checkbox(keyboard, "Keyboard").changed() { + changed = true; + } + if has_logo && ui.checkbox(logo, "Logo").changed() { + changed = true; + } + if has_lightbar && ui.checkbox(lightbar, "Lightbar").changed() { + changed = true; + } + }); + }; + + ui.horizontal_wrapped(|ui| { + ui.vertical(|ui| { + let h = 16.0; + ui.set_row_height(22.0); + ui.horizontal_wrapped(|ui| { + ui.label(RichText::new("Boot").size(h)); + }); + ui.horizontal_wrapped(|ui| { + ui.label(RichText::new("Awake").size(h)); + }); + ui.horizontal_wrapped(|ui| { + ui.label(RichText::new("Sleep").size(h)); + }); + }); + ui.vertical(|ui| { + ui.set_row_height(22.0); + item(boot_keyb, boot_logo, boot_bar, ui); + item(awake_keyb, awake_logo, awake_bar, ui); + item(sleep_keyb, sleep_logo, sleep_bar, ui); + }); + }); + + if changed { + let mut enabled = Vec::new(); + let mut disabled = Vec::new(); + + let mut modify = |b: bool, a: AuraDev19b6| { + if b { + enabled.push(a); + if !enabled_states.x19b6.contains(&a) { + enabled_states.x19b6.push(a); + } + } else { + disabled.push(a); + // This would be so much better as a hashset + if enabled_states.x19b6.contains(&a) { + let mut idx = 0; + for (i, n) in enabled_states.x19b6.iter().enumerate() { + if *n == a { + idx = i; + break; + } + } + enabled_states.x1866.remove(idx); + } + } + }; + modify(*boot_keyb, AuraDev19b6::BootKeyb); + modify(*sleep_keyb, AuraDev19b6::SleepKeyb); + modify(*awake_keyb, AuraDev19b6::AwakeKeyb); + if supported + .keyboard_led + .multizone_led_mode + .contains(&AuraZone::Logo) + { + modify(*boot_logo, AuraDev19b6::BootLogo); + modify(*sleep_logo, AuraDev19b6::SleepLogo); + modify(*awake_logo, AuraDev19b6::AwakeLogo); + } + if supported + .keyboard_led + .multizone_led_mode + .contains(&AuraZone::BarLeft) + { + modify(*boot_bar, AuraDev19b6::BootBar); + modify(*sleep_bar, AuraDev19b6::SleepBar); + modify(*awake_bar, AuraDev19b6::AwakeBar); + } + + let mut send = |enable: bool, data: Vec| { + let options = AuraPowerDev { + x1866: vec![], + x19b6: data, + }; + // build data to send + dbus.proxies() + .led() + .set_leds_power(options, enable) + .map_err(|err| { + states.error = Some(err.to_string()); + }) + .ok(); + }; + send(true, enabled); + send(false, disabled); + } + } + + fn aura_modes( + supported: &SupportedFunctions, + states: &mut PageDataStates, + dbus: &mut RogDbusClientBlocking, + ui: &mut Ui, + ) { + let mut changed = false; + let mut selected = states.aura.current_mode; + + let has_keyzones = supported + .keyboard_led + .multizone_led_mode + .contains(&AuraZone::Key2); + let has_logo = supported + .keyboard_led + .multizone_led_mode + .contains(&AuraZone::Logo); + let has_lightbar = supported + .keyboard_led + .multizone_led_mode + .contains(&AuraZone::BarLeft) + || supported + .keyboard_led + .multizone_led_mode + .contains(&AuraZone::BarRight); + + ui.heading("Aura modes"); + let mut item = |a: AuraModeNum, ui: &mut Ui| { + if ui + .selectable_value(&mut selected, a, format!("{:?}", a)) + .clicked() + { + changed = true; + } + }; + + ui.horizontal_wrapped(|ui| { + for a in states.aura.modes.keys() { + item(*a, ui); + } + }); + + // TODO: Need some sort of mapping to enable options only if + // they actually work. + if let Some(effect) = states.aura.modes.get_mut(&selected) { + let mut zone_button = |a: AuraZone, ui: &mut Ui| { + ui.selectable_value(&mut effect.zone, a, format!("{:?}", a)); + }; + let mut speed_button = |a: Speed, ui: &mut Ui| { + ui.selectable_value(&mut effect.speed, a, format!("{:?}", a)); + }; + let mut dir_button = |a: rog_aura::Direction, ui: &mut Ui| { + ui.selectable_value(&mut effect.direction, a, format!("{:?}", a)); + }; + + let mut c1: [f32; 3] = effect.colour1.into(); + let mut c2: [f32; 3] = effect.colour2.into(); + + ui.separator(); + ui.horizontal_wrapped(|ui| { + ui.vertical(|ui| { + let h = 16.0; + ui.set_row_height(22.0); + if has_keyzones || has_lightbar || has_logo { + ui.horizontal_wrapped(|ui| { + ui.label(RichText::new("Zone").size(h)); + }); + } + ui.horizontal_wrapped(|ui| { + ui.label(RichText::new("Colour 1").size(h)); + }); + ui.horizontal_wrapped(|ui| { + ui.label(RichText::new("Colour 2").size(h)); + }); + ui.horizontal_wrapped(|ui| { + ui.label(RichText::new("Speed").size(h)); + }); + ui.horizontal_wrapped(|ui| { + ui.label(RichText::new("Direction").size(h)); + }); + }); + ui.vertical(|ui| { + ui.set_row_height(22.0); + if has_keyzones || has_lightbar || has_logo { + ui.horizontal_wrapped(|ui| { + zone_button(AuraZone::None, ui); + if has_keyzones { + zone_button(AuraZone::Key1, ui); + zone_button(AuraZone::Key2, ui); + zone_button(AuraZone::Key3, ui); + zone_button(AuraZone::Key4, ui); + } + if has_logo { + zone_button(AuraZone::Logo, ui); + } + if has_lightbar { + zone_button(AuraZone::BarLeft, ui); + zone_button(AuraZone::BarRight, ui); + } + }); + } + + egui::color_picker::color_edit_button_rgb(ui, &mut c1); + egui::color_picker::color_edit_button_rgb(ui, &mut c2); + + ui.horizontal_wrapped(|ui| { + speed_button(Speed::Low, ui); + speed_button(Speed::Med, ui); + speed_button(Speed::High, ui); + }); + + ui.horizontal_wrapped(|ui| { + dir_button(rog_aura::Direction::Left, ui); + dir_button(rog_aura::Direction::Down, ui); + dir_button(rog_aura::Direction::Right, ui); + dir_button(rog_aura::Direction::Up, ui); + }); + }); + }); + + effect.colour1 = Colour::from(&c1); + effect.colour2 = Colour::from(&c2); + } + + ui.separator(); + ui.with_layout(egui::Layout::right_to_left(egui::Align::TOP), |ui| { + if ui.add(egui::Button::new("Cancel")).clicked() { + let notif = states.aura.was_notified.clone(); + states.aura.modes = AuraState::new(notif, supported, dbus).modes; + } + + if ui.add(egui::Button::new("Apply")).clicked() { + changed = true; + } + }); + + // egui::TopBottomPanel::bottom("error_bar") + // .default_height(26.0) + // .show(ctx, |ui| { + // ui.with_layout(egui::Layout::right_to_left(egui::Align::TOP), |ui| { + // if ui.add(egui::Button::new("Cancel")).clicked() { + // let notif = states.aura.was_notified.clone(); + // states.aura.modes = AuraState::new(notif, supported, dbus).modes; + // } + + // if ui.add(egui::Button::new("Apply")).clicked() { + // changed = true; + // } + // }); + // }); + + if changed { + states.aura.current_mode = selected; + + dbus.proxies() + .led() + .set_led_mode(states.aura.modes.get(&selected).unwrap()) + .map_err(|err| { + states.error = Some(err.to_string()); + }) + .ok(); + } + } +} diff --git a/rog-control-center/src/widgets/fan_curve_page.rs b/rog-control-center/src/widgets/fan_curve_page.rs new file mode 100644 index 00000000..79060725 --- /dev/null +++ b/rog-control-center/src/widgets/fan_curve_page.rs @@ -0,0 +1,199 @@ +use crate::{ + page_states::{FanCurvesState, ProfilesState}, + RogApp, +}; +use egui::{plot::Points, Ui}; +use rog_dbus::RogDbusClientBlocking; +use rog_profiles::{FanCurvePU, Profile}; +use rog_supported::SupportedFunctions; + +impl<'a> RogApp<'a> { + pub fn fan_curve_page(&mut self, ctx: &egui::Context) { + let Self { + supported, + states, + asus_dbus: dbus, + .. + } = self; + + egui::CentralPanel::default().show(ctx, |ui| { + ui.heading("Custom fan curves"); + ui.label("A fan curve is only active when the related profile is active and the curve is enabled"); + Self::fan_curve( + supported, + &mut states.profiles, + &mut states.fan_curves, + dbus, &mut states.error, + ui, + ); + + Self::fan_graphs(&mut states.profiles, &mut states.fan_curves, dbus, &mut states.error, ui); + }); + } + + fn fan_curve( + supported: &SupportedFunctions, + profiles: &mut ProfilesState, + curves: &mut FanCurvesState, + dbus: &RogDbusClientBlocking, + do_error: &mut Option, + ui: &mut Ui, + ) { + ui.separator(); + ui.label("Enabled fan-curves"); + + let mut changed = false; + ui.horizontal(|ui| { + let mut item = |p: Profile, _curves: &mut FanCurvesState, mut checked: bool| { + if ui + .add(egui::Checkbox::new(&mut checked, format!("{:?}", p))) + .changed() + { + dbus.proxies() + .profile() + .set_fan_curve_enabled(p, checked) + .map_err(|err| { + *do_error = Some(err.to_string()); + }) + .ok(); + + #[cfg(feature = "mocking")] + if !checked { + _curves.enabled.remove(&p); + } else { + _curves.enabled.insert(p); + } + changed = true; + } + }; + + for f in profiles.list.iter() { + item(*f, curves, curves.enabled.contains(f)); + } + }); + + if changed { + // Need to update app data if change made + #[cfg(not(feature = "mocking"))] + { + let notif = curves.was_notified.clone(); + *curves = FanCurvesState::new(notif, supported, dbus); + } + } + } + + fn fan_graphs( + profiles: &mut ProfilesState, + curves: &mut FanCurvesState, + dbus: &RogDbusClientBlocking, + do_error: &mut Option, + ui: &mut Ui, + ) { + ui.separator(); + + let mut item = |p: Profile, ui: &mut Ui| { + ui.selectable_value(&mut curves.show_curve, p, format!("{p:?}")); + }; + + ui.horizontal_wrapped(|ui| { + for a in curves.curves.iter() { + item(*a.0, ui); + } + + ui.selectable_value( + &mut curves.show_graph, + FanCurvePU::CPU, + format!("{:?}", FanCurvePU::CPU), + ); + ui.selectable_value( + &mut curves.show_graph, + FanCurvePU::GPU, + format!("{:?}", FanCurvePU::GPU), + ); + }); + + let curve = curves.curves.get_mut(&curves.show_curve).unwrap(); + + use egui::plot::{Line, Plot, PlotPoints}; + + let data = if curves.show_graph == FanCurvePU::CPU { + &mut curve.cpu + } else { + &mut curve.gpu + }; + + let points = data.temp.iter().enumerate().map(|(idx, x)| { + let x = *x as f64; + let y = ((data.pwm[idx] as u32) * 100 / 255) as f64; + [x, y] + }); + + let line = Line::new(PlotPoints::from_iter(points.clone())).width(2.0); + let points = Points::new(PlotPoints::from_iter(points)).radius(3.0); + + Plot::new("my_plot") + .view_aspect(2.0) + // .center_x_axis(true) + // .center_y_axis(true) + .include_x(0.0) + .include_x(110.0) + .include_y(0.0) + .include_y(110.0) + .allow_scroll(false) + .allow_drag(false) + .allow_boxed_zoom(false) + .x_axis_formatter(|d, _r| format!("{}", d)) + .y_axis_formatter(|d, _r| format!("{:.*}%", 1, d)) + .label_formatter(|name, value| { + if !name.is_empty() { + format!("{}: {:.*}%", name, 1, value.y) + } else { + format!("Temp {}c\nFan {:.*}%", value.x as u8, 1, value.y) + } + }) + .show(ui, |plot_ui| { + if plot_ui.plot_hovered() { + let mut idx = 0; + + if let Some(point) = plot_ui.pointer_coordinate() { + let mut x: i32 = 255; + for (i, n) in data.temp.iter().enumerate() { + let tmp = x.min((point.x as i32 - *n as i32).abs()); + if tmp < x { + x = tmp; + idx = i; + } + } + + if plot_ui.plot_clicked() { + data.temp[idx] = point.x as u8; + data.pwm[idx] = (point.y * 255.0 / 100.0) as u8; + } else { + let drag = plot_ui.pointer_coordinate_drag_delta(); + if drag.length_sq() != 0.0 { + data.temp[idx] = (point.x as f32 + drag.x) as u8; + data.pwm[idx] = ((point.y as f32 + drag.y) * 255.0 / 100.0) as u8; + } + } + } + } + plot_ui.line(line); + plot_ui.points(points) + }); + + ui.with_layout(egui::Layout::right_to_left(egui::Align::TOP), |ui| { + if ui.add(egui::Button::new("Apply Fan-curve")).clicked() { + #[cfg(not(feature = "mocking"))] + dbus.proxies() + .profile() + .set_fan_curve(profiles.current, data.clone()) + .map_err(|err| { + *do_error = Some(err.to_string()); + }) + .ok(); + #[cfg(feature = "mocking")] + dbg!("Applied"); + } + }); + } +} diff --git a/rog-control-center/src/widgets/mod.rs b/rog-control-center/src/widgets/mod.rs new file mode 100644 index 00000000..403e5a33 --- /dev/null +++ b/rog-control-center/src/widgets/mod.rs @@ -0,0 +1,13 @@ +mod anime_page; +mod aura_page; +mod fan_curve_page; +mod side_panel; +mod system_page; +mod top_bar; + +pub use anime_page::*; +pub use aura_page::*; +pub use fan_curve_page::*; +pub use side_panel::*; +pub use system_page::*; +pub use top_bar::*; diff --git a/rog-control-center/src/widgets/side_panel.rs b/rog-control-center/src/widgets/side_panel.rs new file mode 100644 index 00000000..cfaf8a89 --- /dev/null +++ b/rog-control-center/src/widgets/side_panel.rs @@ -0,0 +1,62 @@ +use crate::{Page, RogApp}; + +impl<'a> RogApp<'a> { + pub fn side_panel(&mut self, ctx: &egui::Context) { + egui::SidePanel::left("side_panel") + .resizable(false) + .default_width(60.0) // TODO: set size to match icon buttons when done + .show(ctx, |ui| { + let Self { page, .. } = self; + + ui.heading("Functions"); + + ui.separator(); + if ui + .selectable_value(page, Page::System, "System Settings") + .clicked() + { + *page = Page::System; + } + + if self.supported.platform_profile.fan_curves || cfg!(feature = "mocking") { + ui.separator(); + if ui + .selectable_value(page, Page::FanCurves, "Fan Curves") + .clicked() + { + *page = Page::FanCurves; + } + } + + if !self.supported.keyboard_led.stock_led_modes.is_empty() + || cfg!(feature = "mocking") + { + ui.separator(); + if ui + .selectable_value(page, Page::AuraEffects, "Keyboard Aura") + .clicked() + { + *page = Page::AuraEffects; + } + } + + if self.supported.anime_ctrl.0 || cfg!(feature = "mocking") { + ui.separator(); + if ui + .selectable_value(page, Page::AnimeMatrix, "AniMe Matrix") + .clicked() + { + *page = Page::AnimeMatrix; + } + } + + ui.with_layout(egui::Layout::bottom_up(egui::Align::LEFT), |ui| { + ui.horizontal(|ui| { + ui.spacing_mut().item_spacing.x = 0.0; + ui.label("Source code "); + ui.hyperlink_to("rog-gui.", "https://gitlab.com/asus-linux/rog-gui"); + }); + }); + }); + } +} diff --git a/rog-control-center/src/widgets/system_page.rs b/rog-control-center/src/widgets/system_page.rs new file mode 100644 index 00000000..29c645fd --- /dev/null +++ b/rog-control-center/src/widgets/system_page.rs @@ -0,0 +1,117 @@ +use crate::{page_states::PageDataStates, RogApp}; +use egui::Ui; +use rog_dbus::RogDbusClientBlocking; +use rog_profiles::Profile; + +impl<'a> RogApp<'a> { + pub fn system_page(&mut self, ctx: &egui::Context) { + let Self { + supported, + states, + asus_dbus: dbus, + .. + } = self; + + egui::CentralPanel::default().show(ctx, |ui| { + // The central panel the region left after adding TopPanel's and SidePanel's + + ui.heading("Experimental application for asusd"); + ui.horizontal(|ui| { + egui::global_dark_light_mode_buttons(ui); + egui::warn_if_debug_build(ui); + }); + + ui.separator(); + + egui::ScrollArea::vertical().show(ui, |ui| { + ui.heading("Charge control"); + let slider = egui::Slider::new(&mut states.charge_limit, 20..=100) + .text("Limit") + .step_by(1.0); + if ui.add(slider).drag_released() { + dbus.proxies() + .charge() + .set_limit(states.charge_limit as u8) + .map_err(|err| { + states.error = Some(err.to_string()); + }) + .ok(); + } + + ui.separator(); + ui.heading("Bios options"); + + if supported.rog_bios_ctrl.post_sound { + if ui + .add(egui::Checkbox::new( + &mut states.bios.post_sound, + "POST sound", + )) + .changed() + { + dbus.proxies() + .rog_bios() + .set_post_boot_sound(states.bios.post_sound) + .map_err(|err| { + states.error = Some(err.to_string()); + }) + .ok(); + } + } + + if supported.rog_bios_ctrl.dedicated_gfx { + if ui + .add(egui::Checkbox::new( + &mut states.bios.dedicated_gfx, + "G-Sync Dedicated GPU mode", + )) + .changed() + { + dbus.proxies() + .rog_bios() + .set_dedicated_graphic_mode(states.bios.dedicated_gfx) + .map_err(|err| { + states.error = Some(err.to_string()); + }) + .ok(); + } + } + + if supported.platform_profile.platform_profile { + Self::platform_profile(states, dbus, ui); + } + }); + }); + } + + fn platform_profile(states: &mut PageDataStates, dbus: &RogDbusClientBlocking, ui: &mut Ui) { + ui.separator(); + ui.heading("Platform profile"); + + let mut changed = false; + let mut item = |p: Profile, ui: &mut Ui| { + if ui + .selectable_value(&mut states.profiles.current, p, format!("{p:?}")) + .clicked() + { + changed = true; + } + }; + + ui.horizontal_wrapped(|ui| { + for a in states.profiles.list.iter() { + item(*a, ui); + } + }); + + if changed { + dbus.proxies() + .profile() + .set_active_profile(states.profiles.current) + .map_err(|err| { + states.error = Some(err.to_string()); + }) + .ok(); + }; + } +} diff --git a/rog-control-center/src/widgets/top_bar.rs b/rog-control-center/src/widgets/top_bar.rs new file mode 100644 index 00000000..723c434d --- /dev/null +++ b/rog-control-center/src/widgets/top_bar.rs @@ -0,0 +1,53 @@ +use crate::RogApp; + +impl<'a> RogApp<'a> { + pub fn top_bar(&mut self, ctx: &egui::Context, frame: &mut eframe::Frame) { + let Self { states, config, .. } = self; + + egui::TopBottomPanel::top("top_panel").show(ctx, |ui| { + // The top panel is often a good place for a menu bar: + egui::menu::bar(ui, |ui| { + ui.menu_button("File", |ui| { + if ui.button("Quit").clicked() { + frame.quit(); + } + }); + ui.menu_button("Settings", |ui| { + let (mut in_bg, mut hidden) = + { (config.run_in_background, config.startup_in_background) }; + if ui.checkbox(&mut in_bg, "Run in Background").clicked() { + config.run_in_background = in_bg; + config + .save() + .map_err(|err| { + states.error = Some(err.to_string()); + }) + .ok(); + } + if ui.checkbox(&mut hidden, "Startup Hidden").clicked() { + config.startup_in_background = in_bg; + config + .save() + .map_err(|err| { + states.error = Some(err.to_string()); + }) + .ok(); + } + if ui + .checkbox(&mut config.enable_notifications, "Enable Notifications") + .clicked() + { + config.enable_notifications = in_bg; + // TODO: set an atomicbool used in the notif thread + config + .save() + .map_err(|err| { + states.error = Some(err.to_string()); + }) + .ok(); + } + }); + }); + }); + } +}