mirror of
https://gitlab.com/asus-linux/asusctl.git
synced 2026-02-06 00:15:04 +01:00
Compare commits
12 Commits
6.3.2
...
da7395b9df
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
da7395b9df | ||
|
|
ca65efd51b | ||
|
|
cc3de63a92 | ||
|
|
d681049ca8 | ||
|
|
514aa7c179 | ||
|
|
4b42071a77 | ||
|
|
ce9f85733e | ||
|
|
73a10ddf52 | ||
|
|
7cf6c477eb | ||
|
|
b9c251d403 | ||
|
|
6ef977f6ae | ||
|
|
d006837198 |
@@ -8,9 +8,6 @@ indent_style = space
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
|
||||
[*.slint]
|
||||
indent_size = 4
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
|
||||
@@ -5,10 +5,6 @@
|
||||
### Changes
|
||||
- Improve the notification area, @shevchenko0013 strikes again!
|
||||
- Improve firmware attributes handling
|
||||
- Very good looking UI restyling from @shevchenko0013
|
||||
- Added support for GA402NV matrix: thanks @Ghoul4500
|
||||
- Fixed aura CLI interface
|
||||
- Fixed LEDs handling in rogcc
|
||||
|
||||
## [6.3.1]
|
||||
|
||||
|
||||
260
Cargo.lock
generated
260
Cargo.lock
generated
@@ -212,7 +212,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "asusctl"
|
||||
version = "6.3.2"
|
||||
version = "6.3.1"
|
||||
dependencies = [
|
||||
"argh",
|
||||
"dmi_id",
|
||||
@@ -232,7 +232,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "asusd"
|
||||
version = "6.3.2"
|
||||
version = "6.3.1"
|
||||
dependencies = [
|
||||
"cargo-husky",
|
||||
"concat-idents",
|
||||
@@ -259,7 +259,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "asusd-user"
|
||||
version = "6.3.2"
|
||||
version = "6.3.1"
|
||||
dependencies = [
|
||||
"config-traits",
|
||||
"dirs",
|
||||
@@ -488,7 +488,7 @@ dependencies = [
|
||||
"num-traits",
|
||||
"pastey 0.1.1",
|
||||
"rayon",
|
||||
"thiserror 2.0.18",
|
||||
"thiserror 2.0.17",
|
||||
"v_frame",
|
||||
"y4m",
|
||||
]
|
||||
@@ -816,9 +816,9 @@ checksum = "7b02b629252fe8ef6460461409564e2c21d0c8e77e0944f3d189ff06c4e932ad"
|
||||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.2.54"
|
||||
version = "1.2.53"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6354c81bbfd62d9cfa9cb3c773c2b7b2a3a482d569de977fd0e961f6e7c00583"
|
||||
checksum = "755d2fce177175ffca841e9a06afdb2c4ab0f593d53b4dee48147dfaade85932"
|
||||
dependencies = [
|
||||
"find-msvc-tools",
|
||||
"jobserver",
|
||||
@@ -938,7 +938,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "config-traits"
|
||||
version = "6.3.2"
|
||||
version = "6.3.1"
|
||||
dependencies = [
|
||||
"log",
|
||||
"ron",
|
||||
@@ -987,7 +987,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "const-field-offset"
|
||||
version = "0.1.5"
|
||||
source = "git+https://github.com/slint-ui/slint.git#f55d24727b3917ad6953f89a1dd32b48556b290e"
|
||||
source = "git+https://github.com/slint-ui/slint.git#75fb4125d8082c5c64b4ce8220c6fe607c8caac0"
|
||||
dependencies = [
|
||||
"const-field-offset-macro",
|
||||
"field-offset",
|
||||
@@ -996,7 +996,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "const-field-offset-macro"
|
||||
version = "0.1.5"
|
||||
source = "git+https://github.com/slint-ui/slint.git#f55d24727b3917ad6953f89a1dd32b48556b290e"
|
||||
source = "git+https://github.com/slint-ui/slint.git#75fb4125d8082c5c64b4ce8220c6fe607c8caac0"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
@@ -1036,6 +1036,16 @@ dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "core-foundation"
|
||||
version = "0.10.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6"
|
||||
dependencies = [
|
||||
"core-foundation-sys",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "core-foundation-sys"
|
||||
version = "0.8.7"
|
||||
@@ -1049,7 +1059,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081"
|
||||
dependencies = [
|
||||
"bitflags 1.3.2",
|
||||
"core-foundation",
|
||||
"core-foundation 0.9.4",
|
||||
"core-graphics-types",
|
||||
"foreign-types",
|
||||
"libc",
|
||||
@@ -1062,7 +1072,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf"
|
||||
dependencies = [
|
||||
"bitflags 1.3.2",
|
||||
"core-foundation",
|
||||
"core-foundation 0.9.4",
|
||||
"libc",
|
||||
]
|
||||
|
||||
@@ -1264,7 +1274,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "dmi_id"
|
||||
version = "6.3.2"
|
||||
version = "6.3.1"
|
||||
dependencies = [
|
||||
"log",
|
||||
"udev 0.8.0",
|
||||
@@ -1412,9 +1422,9 @@ checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59"
|
||||
|
||||
[[package]]
|
||||
name = "euclid"
|
||||
version = "0.22.13"
|
||||
version = "0.22.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "df61bf483e837f88d5c2291dcf55c67be7e676b3a51acc48db3a7b163b91ed63"
|
||||
checksum = "ad9cdb4b747e485a12abb0e6566612956c7a1bafa3bdb8d682c5b6d403589e48"
|
||||
dependencies = [
|
||||
"num-traits",
|
||||
]
|
||||
@@ -1492,9 +1502,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "femtovg"
|
||||
version = "0.20.1"
|
||||
version = "0.19.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a125295d4de2b2473e731c4612599ba3cdf7e05af6bba16f324ba8ffbf093436"
|
||||
checksum = "be5d925785ad33d7b0ae2b445d9f157c3ab42ff3c515fff0b46d53d4a86c43c5"
|
||||
dependencies = [
|
||||
"bitflags 2.10.0",
|
||||
"bytemuck",
|
||||
@@ -1523,13 +1533,14 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "filetime"
|
||||
version = "0.2.27"
|
||||
version = "0.2.26"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f98844151eee8917efc50bd9e8318cb963ae8b297431495d3f758616ea5c57db"
|
||||
checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"libredox",
|
||||
"windows-sys 0.60.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1620,7 +1631,7 @@ dependencies = [
|
||||
"objc2-core-text",
|
||||
"objc2-foundation 0.3.2",
|
||||
"read-fonts",
|
||||
"roxmltree",
|
||||
"roxmltree 0.21.1",
|
||||
"smallvec",
|
||||
"windows 0.58.0",
|
||||
"windows-core 0.58.0",
|
||||
@@ -1859,6 +1870,16 @@ dependencies = [
|
||||
"weezl",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gif"
|
||||
version = "0.13.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4ae047235e33e2829703574b54fdec96bfbad892062d97fed2f76022287de61b"
|
||||
dependencies = [
|
||||
"color_quant",
|
||||
"weezl",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gif"
|
||||
version = "0.14.1"
|
||||
@@ -2216,7 +2237,7 @@ dependencies = [
|
||||
"hyper",
|
||||
"libc",
|
||||
"pin-project-lite",
|
||||
"socket2 0.6.2",
|
||||
"socket2 0.6.1",
|
||||
"tokio",
|
||||
"tower-service",
|
||||
"tracing",
|
||||
@@ -2225,7 +2246,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "i-slint-backend-linuxkms"
|
||||
version = "1.15.0"
|
||||
source = "git+https://github.com/slint-ui/slint.git#f55d24727b3917ad6953f89a1dd32b48556b290e"
|
||||
source = "git+https://github.com/slint-ui/slint.git#75fb4125d8082c5c64b4ce8220c6fe607c8caac0"
|
||||
dependencies = [
|
||||
"calloop 0.14.3",
|
||||
"drm",
|
||||
@@ -2243,7 +2264,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "i-slint-backend-selector"
|
||||
version = "1.15.0"
|
||||
source = "git+https://github.com/slint-ui/slint.git#f55d24727b3917ad6953f89a1dd32b48556b290e"
|
||||
source = "git+https://github.com/slint-ui/slint.git#75fb4125d8082c5c64b4ce8220c6fe607c8caac0"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"i-slint-backend-linuxkms",
|
||||
@@ -2256,7 +2277,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "i-slint-backend-winit"
|
||||
version = "1.15.0"
|
||||
source = "git+https://github.com/slint-ui/slint.git#f55d24727b3917ad6953f89a1dd32b48556b290e"
|
||||
source = "git+https://github.com/slint-ui/slint.git#75fb4125d8082c5c64b4ce8220c6fe607c8caac0"
|
||||
dependencies = [
|
||||
"block2 0.6.2",
|
||||
"cfg-if",
|
||||
@@ -2295,7 +2316,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "i-slint-common"
|
||||
version = "1.15.0"
|
||||
source = "git+https://github.com/slint-ui/slint.git#f55d24727b3917ad6953f89a1dd32b48556b290e"
|
||||
source = "git+https://github.com/slint-ui/slint.git#75fb4125d8082c5c64b4ce8220c6fe607c8caac0"
|
||||
dependencies = [
|
||||
"fontique",
|
||||
"ttf-parser 0.25.1",
|
||||
@@ -2304,7 +2325,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "i-slint-compiler"
|
||||
version = "1.15.0"
|
||||
source = "git+https://github.com/slint-ui/slint.git#f55d24727b3917ad6953f89a1dd32b48556b290e"
|
||||
source = "git+https://github.com/slint-ui/slint.git#75fb4125d8082c5c64b4ce8220c6fe607c8caac0"
|
||||
dependencies = [
|
||||
"annotate-snippets",
|
||||
"by_address",
|
||||
@@ -2332,7 +2353,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "i-slint-core"
|
||||
version = "1.15.0"
|
||||
source = "git+https://github.com/slint-ui/slint.git#f55d24727b3917ad6953f89a1dd32b48556b290e"
|
||||
source = "git+https://github.com/slint-ui/slint.git#75fb4125d8082c5c64b4ce8220c6fe607c8caac0"
|
||||
dependencies = [
|
||||
"auto_enums",
|
||||
"bitflags 2.10.0",
|
||||
@@ -2367,7 +2388,7 @@ dependencies = [
|
||||
"slab",
|
||||
"strum",
|
||||
"sys-locale",
|
||||
"thiserror 2.0.18",
|
||||
"thiserror 2.0.17",
|
||||
"unicode-linebreak",
|
||||
"unicode-script",
|
||||
"unicode-segmentation",
|
||||
@@ -2375,12 +2396,13 @@ dependencies = [
|
||||
"wasm-bindgen",
|
||||
"web-sys",
|
||||
"web-time",
|
||||
"webbrowser",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "i-slint-core-macros"
|
||||
version = "1.15.0"
|
||||
source = "git+https://github.com/slint-ui/slint.git#f55d24727b3917ad6953f89a1dd32b48556b290e"
|
||||
source = "git+https://github.com/slint-ui/slint.git#75fb4125d8082c5c64b4ce8220c6fe607c8caac0"
|
||||
dependencies = [
|
||||
"quote",
|
||||
"serde_json",
|
||||
@@ -2390,7 +2412,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "i-slint-renderer-femtovg"
|
||||
version = "1.15.0"
|
||||
source = "git+https://github.com/slint-ui/slint.git#f55d24727b3917ad6953f89a1dd32b48556b290e"
|
||||
source = "git+https://github.com/slint-ui/slint.git#75fb4125d8082c5c64b4ce8220c6fe607c8caac0"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"const-field-offset",
|
||||
@@ -2412,7 +2434,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "i-slint-renderer-skia"
|
||||
version = "1.15.0"
|
||||
source = "git+https://github.com/slint-ui/slint.git#f55d24727b3917ad6953f89a1dd32b48556b290e"
|
||||
source = "git+https://github.com/slint-ui/slint.git#75fb4125d8082c5c64b4ce8220c6fe607c8caac0"
|
||||
dependencies = [
|
||||
"bytemuck",
|
||||
"cfg-if",
|
||||
@@ -2447,7 +2469,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "i-slint-renderer-software"
|
||||
version = "1.15.0"
|
||||
source = "git+https://github.com/slint-ui/slint.git#f55d24727b3917ad6953f89a1dd32b48556b290e"
|
||||
source = "git+https://github.com/slint-ui/slint.git#75fb4125d8082c5c64b4ce8220c6fe607c8caac0"
|
||||
dependencies = [
|
||||
"bytemuck",
|
||||
"clru",
|
||||
@@ -2611,7 +2633,7 @@ dependencies = [
|
||||
"rgb",
|
||||
"tiff",
|
||||
"zune-core 0.5.1",
|
||||
"zune-jpeg 0.5.11",
|
||||
"zune-jpeg 0.5.9",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -2626,9 +2648,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "imagesize"
|
||||
version = "0.14.0"
|
||||
version = "0.13.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "09e54e57b4c48b40f7aec75635392b12b3421fa26fe8b4332e63138ed278459c"
|
||||
checksum = "edcd27d72f2f071c64249075f42e205ff93c9a4c5f6c6da53e79ed9f9832c285"
|
||||
|
||||
[[package]]
|
||||
name = "imgref"
|
||||
@@ -2842,9 +2864,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kurbo"
|
||||
version = "0.12.0"
|
||||
version = "0.11.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ce9729cc38c18d86123ab736fd2e7151763ba226ac2490ec092d1dd148825e32"
|
||||
checksum = "c62026ae44756f8a599ba21140f350303d4f08dcdcc71b5ad9c9bb8128c13c62"
|
||||
dependencies = [
|
||||
"arrayvec",
|
||||
"euclid",
|
||||
@@ -2853,9 +2875,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kurbo"
|
||||
version = "0.13.0"
|
||||
version = "0.12.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7564e90fe3c0d5771e1f0bc95322b21baaeaa0d9213fa6a0b61c99f8b17b3bfb"
|
||||
checksum = "ce9729cc38c18d86123ab736fd2e7151763ba226ac2490ec092d1dd148825e32"
|
||||
dependencies = [
|
||||
"arrayvec",
|
||||
"euclid",
|
||||
@@ -2902,9 +2924,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "libm"
|
||||
version = "0.2.16"
|
||||
version = "0.2.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
|
||||
checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de"
|
||||
|
||||
[[package]]
|
||||
name = "libredox"
|
||||
@@ -3222,7 +3244,7 @@ dependencies = [
|
||||
"objc2-foundation 0.3.2",
|
||||
"once_cell",
|
||||
"png 0.17.16",
|
||||
"thiserror 2.0.18",
|
||||
"thiserror 2.0.17",
|
||||
"windows-sys 0.60.2",
|
||||
]
|
||||
|
||||
@@ -3338,9 +3360,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "num-conv"
|
||||
version = "0.2.0"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050"
|
||||
checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
|
||||
|
||||
[[package]]
|
||||
name = "num-derive"
|
||||
@@ -4073,9 +4095,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.106"
|
||||
version = "1.0.105"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
|
||||
checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
@@ -4194,9 +4216,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.44"
|
||||
version = "1.0.43"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4"
|
||||
checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
@@ -4296,7 +4318,7 @@ dependencies = [
|
||||
"rand 0.9.2",
|
||||
"rand_chacha 0.9.0",
|
||||
"simd_helpers",
|
||||
"thiserror 2.0.18",
|
||||
"thiserror 2.0.17",
|
||||
"v_frame",
|
||||
"wasm-bindgen",
|
||||
]
|
||||
@@ -4434,11 +4456,11 @@ checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58"
|
||||
|
||||
[[package]]
|
||||
name = "resvg"
|
||||
version = "0.46.0"
|
||||
version = "0.45.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b563218631706d614e23059436526d005b50ab5f2d506b55a17eb65c5eb83419"
|
||||
checksum = "a8928798c0a55e03c9ca6c4c6846f76377427d2c1e1f7e6de3c06ae57942df43"
|
||||
dependencies = [
|
||||
"gif 0.14.1",
|
||||
"gif 0.13.3",
|
||||
"image-webp",
|
||||
"log",
|
||||
"pico-args",
|
||||
@@ -4446,7 +4468,7 @@ dependencies = [
|
||||
"svgtypes",
|
||||
"tiny-skia",
|
||||
"usvg",
|
||||
"zune-jpeg 0.5.11",
|
||||
"zune-jpeg 0.4.21",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -4460,7 +4482,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "rog-control-center"
|
||||
version = "6.3.2"
|
||||
version = "6.3.1"
|
||||
dependencies = [
|
||||
"asusd",
|
||||
"concat-idents",
|
||||
@@ -4491,7 +4513,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "rog_anime"
|
||||
version = "6.3.2"
|
||||
version = "6.3.1"
|
||||
dependencies = [
|
||||
"dmi_id",
|
||||
"gif 0.12.0",
|
||||
@@ -4505,7 +4527,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "rog_aura"
|
||||
version = "6.3.2"
|
||||
version = "6.3.1"
|
||||
dependencies = [
|
||||
"dmi_id",
|
||||
"log",
|
||||
@@ -4516,7 +4538,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "rog_dbus"
|
||||
version = "6.3.2"
|
||||
version = "6.3.1"
|
||||
dependencies = [
|
||||
"asusd",
|
||||
"rog_anime",
|
||||
@@ -4530,7 +4552,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "rog_platform"
|
||||
version = "6.3.2"
|
||||
version = "6.3.1"
|
||||
dependencies = [
|
||||
"concat-idents",
|
||||
"inotify",
|
||||
@@ -4543,7 +4565,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "rog_profiles"
|
||||
version = "6.3.2"
|
||||
version = "6.3.1"
|
||||
dependencies = [
|
||||
"log",
|
||||
"rog_platform",
|
||||
@@ -4554,7 +4576,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "rog_scsi"
|
||||
version = "6.3.2"
|
||||
version = "6.3.1"
|
||||
dependencies = [
|
||||
"ron",
|
||||
"serde",
|
||||
@@ -4564,7 +4586,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "rog_simulators"
|
||||
version = "6.3.2"
|
||||
version = "6.3.1"
|
||||
dependencies = [
|
||||
"log",
|
||||
"rog_anime",
|
||||
@@ -4574,7 +4596,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "rog_slash"
|
||||
version = "6.3.2"
|
||||
version = "6.3.1"
|
||||
dependencies = [
|
||||
"dmi_id",
|
||||
"serde",
|
||||
@@ -4607,6 +4629,12 @@ dependencies = [
|
||||
"text-size",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "roxmltree"
|
||||
version = "0.20.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97"
|
||||
|
||||
[[package]]
|
||||
name = "roxmltree"
|
||||
version = "0.21.1"
|
||||
@@ -4896,9 +4924,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "siphasher"
|
||||
version = "1.0.2"
|
||||
version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e"
|
||||
checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d"
|
||||
|
||||
[[package]]
|
||||
name = "skia-bindings"
|
||||
@@ -4947,7 +4975,7 @@ checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
|
||||
[[package]]
|
||||
name = "slint"
|
||||
version = "1.15.0"
|
||||
source = "git+https://github.com/slint-ui/slint.git#f55d24727b3917ad6953f89a1dd32b48556b290e"
|
||||
source = "git+https://github.com/slint-ui/slint.git#75fb4125d8082c5c64b4ce8220c6fe607c8caac0"
|
||||
dependencies = [
|
||||
"const-field-offset",
|
||||
"i-slint-backend-selector",
|
||||
@@ -4967,7 +4995,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "slint-build"
|
||||
version = "1.15.0"
|
||||
source = "git+https://github.com/slint-ui/slint.git#f55d24727b3917ad6953f89a1dd32b48556b290e"
|
||||
source = "git+https://github.com/slint-ui/slint.git#75fb4125d8082c5c64b4ce8220c6fe607c8caac0"
|
||||
dependencies = [
|
||||
"derive_more",
|
||||
"i-slint-compiler",
|
||||
@@ -4978,7 +5006,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "slint-macros"
|
||||
version = "1.15.0"
|
||||
source = "git+https://github.com/slint-ui/slint.git#f55d24727b3917ad6953f89a1dd32b48556b290e"
|
||||
source = "git+https://github.com/slint-ui/slint.git#75fb4125d8082c5c64b4ce8220c6fe607c8caac0"
|
||||
dependencies = [
|
||||
"i-slint-compiler",
|
||||
"proc-macro2",
|
||||
@@ -5040,7 +5068,7 @@ dependencies = [
|
||||
"log",
|
||||
"memmap2",
|
||||
"rustix 1.1.3",
|
||||
"thiserror 2.0.18",
|
||||
"thiserror 2.0.17",
|
||||
"wayland-backend",
|
||||
"wayland-client",
|
||||
"wayland-csd-frame",
|
||||
@@ -5112,9 +5140,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "socket2"
|
||||
version = "0.6.2"
|
||||
version = "0.6.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0"
|
||||
checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"windows-sys 0.60.2",
|
||||
@@ -5214,11 +5242,11 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "svgtypes"
|
||||
version = "0.16.1"
|
||||
version = "0.15.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "695b5790b3131dafa99b3bbfd25a216edb3d216dad9ca208d4657bfb8f2abc3d"
|
||||
checksum = "68c7541fff44b35860c1a7a47a7cadf3e4a304c457b58f9870d9706ece028afc"
|
||||
dependencies = [
|
||||
"kurbo 0.13.0",
|
||||
"kurbo 0.11.3",
|
||||
"siphasher",
|
||||
]
|
||||
|
||||
@@ -5302,7 +5330,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0b1e66e07de489fe43a46678dd0b8df65e0c973909df1b60ba33874e297ba9b9"
|
||||
dependencies = [
|
||||
"quick-xml 0.37.5",
|
||||
"thiserror 2.0.18",
|
||||
"thiserror 2.0.17",
|
||||
"windows 0.61.3",
|
||||
"windows-version",
|
||||
]
|
||||
@@ -5352,11 +5380,11 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "thiserror"
|
||||
version = "2.0.18"
|
||||
version = "2.0.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
|
||||
checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8"
|
||||
dependencies = [
|
||||
"thiserror-impl 2.0.18",
|
||||
"thiserror-impl 2.0.17",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -5372,9 +5400,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "thiserror-impl"
|
||||
version = "2.0.18"
|
||||
version = "2.0.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
|
||||
checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
@@ -5406,9 +5434,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "time"
|
||||
version = "0.3.46"
|
||||
version = "0.3.45"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9da98b7d9b7dad93488a84b8248efc35352b0b2657397d4167e7ad67e5d535e5"
|
||||
checksum = "f9e442fc33d7fdb45aa9bfeb312c095964abdf596f7567261062b2a7107aaabd"
|
||||
dependencies = [
|
||||
"deranged",
|
||||
"num-conv",
|
||||
@@ -5419,9 +5447,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "time-core"
|
||||
version = "0.1.8"
|
||||
version = "0.1.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca"
|
||||
checksum = "8b36ee98fd31ec7426d599183e8fe26932a8dc1fb76ddb6214d05493377d34ca"
|
||||
|
||||
[[package]]
|
||||
name = "tiny-skia"
|
||||
@@ -5498,7 +5526,7 @@ dependencies = [
|
||||
"libc",
|
||||
"mio 1.1.1",
|
||||
"pin-project-lite",
|
||||
"socket2 0.6.2",
|
||||
"socket2 0.6.1",
|
||||
"tokio-macros",
|
||||
"tracing",
|
||||
"windows-sys 0.61.2",
|
||||
@@ -5912,19 +5940,19 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "usvg"
|
||||
version = "0.46.0"
|
||||
version = "0.45.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e419dff010bb12512b0ae9e3d2f318dfbdf0167fde7eb05465134d4e8756076f"
|
||||
checksum = "80be9b06fbae3b8b303400ab20778c80bbaf338f563afe567cf3c9eea17b47ef"
|
||||
dependencies = [
|
||||
"base64 0.22.1",
|
||||
"data-url",
|
||||
"flate2",
|
||||
"fontdb",
|
||||
"imagesize",
|
||||
"kurbo 0.13.0",
|
||||
"kurbo 0.11.3",
|
||||
"log",
|
||||
"pico-args",
|
||||
"roxmltree",
|
||||
"roxmltree 0.20.0",
|
||||
"rustybuzz",
|
||||
"simplecss",
|
||||
"siphasher",
|
||||
@@ -5945,9 +5973,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
|
||||
|
||||
[[package]]
|
||||
name = "uuid"
|
||||
version = "1.20.0"
|
||||
version = "1.19.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ee48d38b119b0cd71fe4141b30f5ba9c7c5d9f4e7a3a8b4a674e4b6ef789976f"
|
||||
checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a"
|
||||
dependencies = [
|
||||
"js-sys",
|
||||
"serde_core",
|
||||
@@ -6002,7 +6030,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "vtable"
|
||||
version = "0.3.0"
|
||||
source = "git+https://github.com/slint-ui/slint.git#f55d24727b3917ad6953f89a1dd32b48556b290e"
|
||||
source = "git+https://github.com/slint-ui/slint.git#75fb4125d8082c5c64b4ce8220c6fe607c8caac0"
|
||||
dependencies = [
|
||||
"const-field-offset",
|
||||
"portable-atomic",
|
||||
@@ -6013,7 +6041,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "vtable-macro"
|
||||
version = "0.3.0"
|
||||
source = "git+https://github.com/slint-ui/slint.git#f55d24727b3917ad6953f89a1dd32b48556b290e"
|
||||
source = "git+https://github.com/slint-ui/slint.git#75fb4125d8082c5c64b4ce8220c6fe607c8caac0"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
@@ -6268,6 +6296,22 @@ dependencies = [
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "webbrowser"
|
||||
version = "1.0.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "00f1243ef785213e3a32fa0396093424a3a6ea566f9948497e5a2309261a4c97"
|
||||
dependencies = [
|
||||
"core-foundation 0.10.1",
|
||||
"jni",
|
||||
"log",
|
||||
"ndk-context",
|
||||
"objc2 0.6.3",
|
||||
"objc2-foundation 0.3.2",
|
||||
"url",
|
||||
"web-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "weezl"
|
||||
version = "0.1.12"
|
||||
@@ -6889,7 +6933,7 @@ dependencies = [
|
||||
"calloop 0.13.0",
|
||||
"cfg_aliases",
|
||||
"concurrent-queue",
|
||||
"core-foundation",
|
||||
"core-foundation 0.9.4",
|
||||
"core-graphics",
|
||||
"cursor-icon",
|
||||
"dpi",
|
||||
@@ -7108,9 +7152,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "zbus"
|
||||
version = "5.13.2"
|
||||
version = "5.13.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1bfeff997a0aaa3eb20c4652baf788d2dfa6d2839a0ead0b3ff69ce2f9c4bdd1"
|
||||
checksum = "17f79257df967b6779afa536788657777a0001f5b42524fcaf5038d4344df40b"
|
||||
dependencies = [
|
||||
"async-broadcast",
|
||||
"async-executor",
|
||||
@@ -7143,9 +7187,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "zbus_macros"
|
||||
version = "5.13.2"
|
||||
version = "5.13.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0bbd5a90dbe8feee5b13def448427ae314ccd26a49cac47905cafefb9ff846f1"
|
||||
checksum = "aad23e2d2f91cae771c7af7a630a49e755f1eb74f8a46e9f6d5f7a146edf5a37"
|
||||
dependencies = [
|
||||
"proc-macro-crate",
|
||||
"proc-macro2",
|
||||
@@ -7175,18 +7219,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524"
|
||||
|
||||
[[package]]
|
||||
name = "zerocopy"
|
||||
version = "0.8.34"
|
||||
version = "0.8.33"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "71ddd76bcebeed25db614f82bf31a9f4222d3fbba300e6fb6c00afa26cbd4d9d"
|
||||
checksum = "668f5168d10b9ee831de31933dc111a459c97ec93225beb307aed970d1372dfd"
|
||||
dependencies = [
|
||||
"zerocopy-derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zerocopy-derive"
|
||||
version = "0.8.34"
|
||||
version = "0.8.33"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d8187381b52e32220d50b255276aa16a084ec0a9017a0ca2152a1f55c539758d"
|
||||
checksum = "2c7962b26b0a8685668b671ee4b54d007a67d4eaf05fda79ac0ecf41e32270f1"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
@@ -7250,9 +7294,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "zmij"
|
||||
version = "1.0.17"
|
||||
version = "1.0.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "02aae0f83f69aafc94776e879363e9771d7ecbffe2c7fbb6c14c5e00dfe88439"
|
||||
checksum = "94f63c051f4fe3c1509da62131a678643c5b6fbdc9273b2b79d4378ebda003d2"
|
||||
|
||||
[[package]]
|
||||
name = "zune-core"
|
||||
@@ -7286,18 +7330,18 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "zune-jpeg"
|
||||
version = "0.5.11"
|
||||
version = "0.5.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2959ca473aae96a14ecedf501d20b3608d2825ba280d5adb57d651721885b0c2"
|
||||
checksum = "87c86acb70a85b2c16f071f171847d1945e8f44812630463cd14ec83900ad01c"
|
||||
dependencies = [
|
||||
"zune-core 0.5.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zvariant"
|
||||
version = "5.9.2"
|
||||
version = "5.9.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "68b64ef4f40c7951337ddc7023dd03528a57a3ce3408ee9da5e948bd29b232c4"
|
||||
checksum = "326aaed414f04fe839777b4c443d4e94c74e7b3621093bd9c5e649ac8aa96543"
|
||||
dependencies = [
|
||||
"endi",
|
||||
"enumflags2",
|
||||
@@ -7309,9 +7353,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "zvariant_derive"
|
||||
version = "5.9.2"
|
||||
version = "5.9.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "484d5d975eb7afb52cc6b929c13d3719a20ad650fea4120e6310de3fc55e415c"
|
||||
checksum = "ba44e1f8f4da9e6e2d25d2a60b116ef8b9d0be174a7685e55bb12a99866279a7"
|
||||
dependencies = [
|
||||
"proc-macro-crate",
|
||||
"proc-macro2",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
[workspace.package]
|
||||
version = "6.3.2"
|
||||
version = "6.3.1"
|
||||
rust-version = "1.82"
|
||||
license = "MPL-2.0"
|
||||
readme = "README.md"
|
||||
|
||||
@@ -8,7 +8,7 @@ use rog_aura::{AuraEffect, AuraModeNum, AuraZone, Colour, Direction, Speed};
|
||||
#[derive(FromArgs, Debug, Clone)]
|
||||
#[argh(
|
||||
subcommand,
|
||||
name = "power-tuf",
|
||||
name = "aura-power-old",
|
||||
description = "aura power (old ROGs and TUF laptops)"
|
||||
)]
|
||||
pub struct LedPowerCommand1 {
|
||||
@@ -38,7 +38,7 @@ pub struct LedPowerCommand1 {
|
||||
}
|
||||
|
||||
#[derive(FromArgs, Debug, Clone)]
|
||||
#[argh(subcommand, name = "power", description = "aura power")]
|
||||
#[argh(subcommand, name = "aura-power", description = "aura power")]
|
||||
pub struct LedPowerCommand2 {
|
||||
#[argh(subcommand)]
|
||||
pub command: Option<SetAuraZoneEnabled>,
|
||||
@@ -312,133 +312,6 @@ pub struct TwoColourSpeed {
|
||||
pub zone: AuraZone,
|
||||
}
|
||||
|
||||
/// Two-colour star effect (separate subcommand name)
|
||||
#[derive(FromArgs, Debug, Clone, Default)]
|
||||
#[argh(subcommand, name = "stars", description = "two-colour star effect")]
|
||||
pub struct StarsTwoColour {
|
||||
#[argh(option, description = "set the first RGB value e.g. ff00ff")]
|
||||
pub colour: Colour,
|
||||
|
||||
#[argh(option, description = "set the second RGB value e.g. ff00ff")]
|
||||
pub colour2: Colour,
|
||||
|
||||
#[argh(option, description = "set the speed: low, med, high")]
|
||||
pub speed: Speed,
|
||||
|
||||
#[argh(
|
||||
option,
|
||||
default = "AuraZone::None",
|
||||
description = "set the zone for this effect e.g. 0, 1, one, logo, lightbar-left"
|
||||
)]
|
||||
pub zone: AuraZone,
|
||||
}
|
||||
|
||||
/// Rain effect (single-speed, separate subcommand name)
|
||||
#[derive(FromArgs, Debug, Clone, Default)]
|
||||
#[argh(
|
||||
subcommand,
|
||||
name = "rain",
|
||||
description = "single speed-based rain effect"
|
||||
)]
|
||||
pub struct RainSingleSpeed {
|
||||
#[argh(option, description = "set the speed: low, med, high")]
|
||||
pub speed: Speed,
|
||||
|
||||
#[argh(
|
||||
option,
|
||||
default = "AuraZone::None",
|
||||
description = "set the zone for this effect e.g. 0, 1, one, logo, lightbar-left"
|
||||
)]
|
||||
pub zone: AuraZone,
|
||||
}
|
||||
|
||||
/// Laser (single-colour with speed) separate subcommand
|
||||
#[derive(FromArgs, Debug, Clone, Default)]
|
||||
#[argh(
|
||||
subcommand,
|
||||
name = "laser",
|
||||
description = "single-colour effect with speed"
|
||||
)]
|
||||
pub struct LaserSingleColourSpeed {
|
||||
#[argh(option, short = 'c', description = "set the RGB value e.g. ff00ff")]
|
||||
pub colour: Colour,
|
||||
|
||||
#[argh(option, description = "set the speed: low, med, high")]
|
||||
pub speed: Speed,
|
||||
|
||||
#[argh(
|
||||
option,
|
||||
default = "AuraZone::None",
|
||||
description = "set the zone for this effect e.g. 0, 1, one, logo, lightbar-left"
|
||||
)]
|
||||
pub zone: AuraZone,
|
||||
}
|
||||
|
||||
/// Ripple (single-colour with speed) separate subcommand
|
||||
#[derive(FromArgs, Debug, Clone, Default)]
|
||||
#[argh(
|
||||
subcommand,
|
||||
name = "ripple",
|
||||
description = "single-colour effect with speed"
|
||||
)]
|
||||
pub struct RippleSingleColourSpeed {
|
||||
#[argh(option, short = 'c', description = "set the RGB value e.g. ff00ff")]
|
||||
pub colour: Colour,
|
||||
|
||||
#[argh(option, description = "set the speed: low, med, high")]
|
||||
pub speed: Speed,
|
||||
|
||||
#[argh(
|
||||
option,
|
||||
default = "AuraZone::None",
|
||||
description = "set the zone for this effect e.g. 0, 1, one, logo, lightbar-left"
|
||||
)]
|
||||
pub zone: AuraZone,
|
||||
}
|
||||
|
||||
/// Pulse / Comet / Flash variants (single-colour) separate subcommands
|
||||
#[derive(FromArgs, Debug, Clone, Default)]
|
||||
#[argh(subcommand, name = "pulse", description = "single-colour pulse effect")]
|
||||
pub struct PulseSingleColour {
|
||||
#[argh(option, short = 'c', description = "set the RGB value e.g. ff00ff")]
|
||||
pub colour: Colour,
|
||||
|
||||
#[argh(
|
||||
option,
|
||||
default = "AuraZone::None",
|
||||
description = "set the zone for this effect e.g. 0, 1, one, logo, lightbar-left"
|
||||
)]
|
||||
pub zone: AuraZone,
|
||||
}
|
||||
|
||||
#[derive(FromArgs, Debug, Clone, Default)]
|
||||
#[argh(subcommand, name = "comet", description = "single-colour comet effect")]
|
||||
pub struct CometSingleColour {
|
||||
#[argh(option, short = 'c', description = "set the RGB value e.g. ff00ff")]
|
||||
pub colour: Colour,
|
||||
|
||||
#[argh(
|
||||
option,
|
||||
default = "AuraZone::None",
|
||||
description = "set the zone for this effect e.g. 0, 1, one, logo, lightbar-left"
|
||||
)]
|
||||
pub zone: AuraZone,
|
||||
}
|
||||
|
||||
#[derive(FromArgs, Debug, Clone, Default)]
|
||||
#[argh(subcommand, name = "flash", description = "single-colour flash effect")]
|
||||
pub struct FlashSingleColour {
|
||||
#[argh(option, short = 'c', description = "set the RGB value e.g. ff00ff")]
|
||||
pub colour: Colour,
|
||||
|
||||
#[argh(
|
||||
option,
|
||||
default = "AuraZone::None",
|
||||
description = "set the zone for this effect e.g. 0, 1, one, logo, lightbar-left"
|
||||
)]
|
||||
pub zone: AuraZone,
|
||||
}
|
||||
|
||||
/// Multi-zone colour settings
|
||||
#[derive(FromArgs, Debug, Clone, Default)]
|
||||
#[allow(dead_code)]
|
||||
@@ -486,14 +359,14 @@ pub enum SetAuraBuiltin {
|
||||
Breathe(TwoColourSpeed), // 1
|
||||
RainbowCycle(SingleSpeed), // 2
|
||||
RainbowWave(SingleSpeedDirection), // 3
|
||||
Stars(StarsTwoColour), // 4
|
||||
Rain(RainSingleSpeed), // 5
|
||||
Stars(TwoColourSpeed), // 4
|
||||
Rain(SingleSpeed), // 5
|
||||
Highlight(SingleColourSpeed), // 6
|
||||
Laser(LaserSingleColourSpeed), // 7
|
||||
Ripple(RippleSingleColourSpeed), // 8
|
||||
Pulse(PulseSingleColour), // 10
|
||||
Comet(CometSingleColour), // 11
|
||||
Flash(FlashSingleColour), // 12
|
||||
Laser(SingleColourSpeed), // 7
|
||||
Ripple(SingleColourSpeed), // 8
|
||||
Pulse(SingleColour), // 10
|
||||
Comet(SingleColour), // 11
|
||||
Flash(SingleColour), // 12
|
||||
}
|
||||
|
||||
impl Default for SetAuraBuiltin {
|
||||
@@ -555,79 +428,6 @@ impl From<&SingleSpeedDirection> for AuraEffect {
|
||||
}
|
||||
}
|
||||
|
||||
impl From<&StarsTwoColour> for AuraEffect {
|
||||
fn from(aura: &StarsTwoColour) -> Self {
|
||||
Self {
|
||||
colour1: aura.colour,
|
||||
colour2: aura.colour2,
|
||||
zone: aura.zone,
|
||||
..Default::default()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<&RainSingleSpeed> for AuraEffect {
|
||||
fn from(aura: &RainSingleSpeed) -> Self {
|
||||
Self {
|
||||
speed: aura.speed,
|
||||
zone: aura.zone,
|
||||
..Default::default()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<&LaserSingleColourSpeed> for AuraEffect {
|
||||
fn from(aura: &LaserSingleColourSpeed) -> Self {
|
||||
Self {
|
||||
colour1: aura.colour,
|
||||
speed: aura.speed,
|
||||
zone: aura.zone,
|
||||
..Default::default()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<&RippleSingleColourSpeed> for AuraEffect {
|
||||
fn from(aura: &RippleSingleColourSpeed) -> Self {
|
||||
Self {
|
||||
colour1: aura.colour,
|
||||
speed: aura.speed,
|
||||
zone: aura.zone,
|
||||
..Default::default()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<&PulseSingleColour> for AuraEffect {
|
||||
fn from(aura: &PulseSingleColour) -> Self {
|
||||
Self {
|
||||
colour1: aura.colour,
|
||||
zone: aura.zone,
|
||||
..Default::default()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<&CometSingleColour> for AuraEffect {
|
||||
fn from(aura: &CometSingleColour) -> Self {
|
||||
Self {
|
||||
colour1: aura.colour,
|
||||
zone: aura.zone,
|
||||
..Default::default()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<&FlashSingleColour> for AuraEffect {
|
||||
fn from(aura: &FlashSingleColour) -> Self {
|
||||
Self {
|
||||
colour1: aura.colour,
|
||||
zone: aura.zone,
|
||||
..Default::default()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<&SetAuraBuiltin> for AuraEffect {
|
||||
fn from(aura: &SetAuraBuiltin) -> Self {
|
||||
match aura {
|
||||
|
||||
@@ -18,7 +18,9 @@ pub struct CliStart {
|
||||
#[derive(FromArgs, Debug)]
|
||||
#[argh(subcommand)]
|
||||
pub enum CliCommand {
|
||||
Aura(AuraCommand),
|
||||
Aura(LedModeCommand),
|
||||
AuraPowerOld(LedPowerCommand1),
|
||||
AuraPower(LedPowerCommand2),
|
||||
Brightness(BrightnessCommand),
|
||||
Profile(ProfileCommand),
|
||||
FanCurve(FanCurveCommand),
|
||||
@@ -97,7 +99,7 @@ pub struct ProfileSetCommand {
|
||||
}
|
||||
|
||||
#[derive(FromArgs, Debug, Default)]
|
||||
#[argh(subcommand, name = "effect", description = "led mode commands")]
|
||||
#[argh(subcommand, name = "aura", description = "led mode commands")]
|
||||
pub struct LedModeCommand {
|
||||
#[argh(switch, description = "switch to next aura mode")]
|
||||
pub next_mode: bool,
|
||||
@@ -109,21 +111,6 @@ pub struct LedModeCommand {
|
||||
pub command: Option<SetAuraBuiltin>,
|
||||
}
|
||||
|
||||
#[derive(FromArgs, Debug)]
|
||||
#[argh(subcommand, name = "aura", description = "aura device commands")]
|
||||
pub struct AuraCommand {
|
||||
#[argh(subcommand)]
|
||||
pub command: AuraSubCommand,
|
||||
}
|
||||
|
||||
#[derive(FromArgs, Debug)]
|
||||
#[argh(subcommand)]
|
||||
pub enum AuraSubCommand {
|
||||
Power(LedPowerCommand2),
|
||||
PowerTuf(LedPowerCommand1),
|
||||
Effect(LedModeCommand),
|
||||
}
|
||||
|
||||
#[derive(FromArgs, Debug, Default)]
|
||||
#[argh(
|
||||
subcommand,
|
||||
|
||||
@@ -186,11 +186,9 @@ fn do_parsed(
|
||||
conn: Connection,
|
||||
) -> Result<(), Box<dyn std::error::Error>> {
|
||||
match &parsed.command {
|
||||
CliCommand::Aura(a) => match &a.command {
|
||||
crate::cli_opts::AuraSubCommand::Effect(mode) => handle_led_mode(mode)?,
|
||||
crate::cli_opts::AuraSubCommand::PowerTuf(pow) => handle_led_power1(pow)?,
|
||||
crate::cli_opts::AuraSubCommand::Power(pow) => handle_led_power2(pow)?,
|
||||
},
|
||||
CliCommand::Aura(mode) => handle_led_mode(mode)?,
|
||||
CliCommand::AuraPowerOld(pow) => handle_led_power1(pow)?,
|
||||
CliCommand::AuraPower(pow) => handle_led_power2(pow)?,
|
||||
CliCommand::Brightness(cmd) => handle_brightness(cmd)?,
|
||||
CliCommand::Profile(cmd) => handle_throttle_profile(&conn, supported_properties, cmd)?,
|
||||
CliCommand::FanCurve(cmd) => handle_fan_curve(&conn, cmd)?,
|
||||
@@ -722,7 +720,7 @@ fn handle_led_power1(power: &LedPowerCommand1) -> Result<(), Box<dyn std::error:
|
||||
&& !power.keyboard
|
||||
&& !power.lightbar
|
||||
{
|
||||
println!("Missing arg or command; run 'asusctl aura power-tuf --help' for usage");
|
||||
println!("Missing arg or command; run 'asusctl aura-power-old --help' for usage");
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
@@ -775,7 +773,7 @@ fn handle_led_power2(power: &LedPowerCommand2) -> Result<(), Box<dyn std::error:
|
||||
}
|
||||
|
||||
if power.command.is_none() {
|
||||
println!("Missing arg or command; run 'asusctl aura power --help' for usage");
|
||||
println!("Missing arg or command; run 'asusctl aura-power --help' for usage");
|
||||
println!("Commands available");
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
@@ -211,24 +211,17 @@ impl crate::Reloadable for AsusArmouryAttribute {
|
||||
}
|
||||
};
|
||||
|
||||
match apply_value {
|
||||
AttrValue::None => {
|
||||
info!(
|
||||
"No saved value for attribute {}: skipping.",
|
||||
self.attr.name()
|
||||
);
|
||||
}
|
||||
_ => {
|
||||
info!("Applying value {apply_value:?} to attribute {name}");
|
||||
self.attr.set_current_value(&apply_value).map_err(|e| {
|
||||
error!("Could not set {name} value: {e:?}");
|
||||
self.attr.base_path_exists();
|
||||
e
|
||||
})?;
|
||||
self.attr.set_current_value(&apply_value).map_err(|e| {
|
||||
error!("Could not set {} value: {e:?}", self.attr.name());
|
||||
self.attr.base_path_exists();
|
||||
e
|
||||
})?;
|
||||
|
||||
info!("Restored asus-armoury setting {name} to {apply_value:?}");
|
||||
}
|
||||
}
|
||||
info!(
|
||||
"Restored asus-armoury setting {} to {:?}",
|
||||
self.attr.name(),
|
||||
apply_value
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -33,6 +33,7 @@ pub struct AuraConfig {
|
||||
}
|
||||
|
||||
impl StdConfig for AuraConfig {
|
||||
/// Detect the keyboard type and load from default DB if data available
|
||||
fn new() -> Self {
|
||||
panic!("This should not be used");
|
||||
}
|
||||
|
||||
@@ -182,6 +182,7 @@ impl AuraZbus {
|
||||
self.0.set_brightness(config.brightness.into()).await?;
|
||||
config.set_builtin(effect);
|
||||
config.write();
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -207,10 +208,9 @@ impl AuraZbus {
|
||||
let mut config = self.0.config.lock().await;
|
||||
for opt in options.states {
|
||||
let zone = opt.zone;
|
||||
for state in config.enabled.states.iter_mut() {
|
||||
if state.zone == zone {
|
||||
*state = opt;
|
||||
break;
|
||||
for config in config.enabled.states.iter_mut() {
|
||||
if config.zone == zone {
|
||||
*config = opt;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -196,7 +196,6 @@ impl DeviceHandle {
|
||||
Some(Arc::new(Mutex::new(k)))
|
||||
});
|
||||
|
||||
// Load saved mode, colours, brightness, power from disk; apply on reload
|
||||
let mut config = AuraConfig::load_and_update_config(prod_id);
|
||||
config.led_type = aura_type;
|
||||
let aura = Aura {
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
%global debug_package %{nil}
|
||||
%endif
|
||||
|
||||
%define version 6.3.2
|
||||
%define version 6.3.1
|
||||
%define specrelease %{?dist}
|
||||
%define pkg_release 1%{specrelease}
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 518 B |
@@ -96,10 +96,7 @@ impl AnimeType {
|
||||
let board_name = DMIID::new().unwrap_or_default().board_name.to_uppercase();
|
||||
if board_name.contains("GA401I") || board_name.contains("GA401Q") {
|
||||
AnimeType::GA401
|
||||
} else if board_name.contains("GA402R")
|
||||
|| board_name.contains("GA402X")
|
||||
|| board_name.contains("GA402N")
|
||||
{
|
||||
} else if board_name.contains("GA402R") || board_name.contains("GA402X") {
|
||||
AnimeType::GA402
|
||||
} else if board_name.contains("GU604V") {
|
||||
AnimeType::GU604
|
||||
|
||||
@@ -121,6 +121,8 @@ impl AnimeImage {
|
||||
match anime_type {
|
||||
AnimeType::GA401 => 0.8,
|
||||
AnimeType::GU604 => 0.78,
|
||||
// TODO: Measure physical display and calculate correct value
|
||||
AnimeType::G835L => 0.77,
|
||||
_ => 0.77,
|
||||
}
|
||||
}
|
||||
@@ -137,8 +139,12 @@ impl AnimeImage {
|
||||
fn scale_y(anime_type: AnimeType) -> f32 {
|
||||
match anime_type {
|
||||
AnimeType::GA401 => 0.3,
|
||||
AnimeType::GA402 => 0.283,
|
||||
_ => 0.28,
|
||||
AnimeType::GU604 => 0.28,
|
||||
// TODO: Calculate correct values for G635L and G835L.
|
||||
// Known values for G835L diagonal W*H is 68*34
|
||||
AnimeType::G635L => 0.28,
|
||||
AnimeType::G835L => 0.28,
|
||||
_ => 0.283,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -161,10 +167,10 @@ impl AnimeImage {
|
||||
/// \ |
|
||||
/// |----|\ |
|
||||
/// ^ ------+
|
||||
/// first_x
|
||||
/// first_x (grows as y increases)
|
||||
/// ```
|
||||
///
|
||||
/// For G835L/G635L (inverted pattern - triangle grows then rectangle shifts):
|
||||
/// For G835L (inverted pattern - triangle grows then rectangle shifts):
|
||||
/// ```text
|
||||
/// ● <- Row 0: first_x = 0, width = 1
|
||||
/// ● <- Row 1: first_x = 0 (stagger), width = 1
|
||||
@@ -193,8 +199,8 @@ impl AnimeImage {
|
||||
// and then their offset grows by one every two rows
|
||||
(y - 9) / 2
|
||||
}
|
||||
AnimeType::G635L | AnimeType::G835L => {
|
||||
// G835L/G635L have inverted geometry - triangle at top-left, rectangle shifts right
|
||||
AnimeType::G835L => {
|
||||
// G835L has inverted geometry - triangle at top-left, rectangle shifts right
|
||||
// Triangle (rows 0-27): no cumulative shift, just alternating stagger
|
||||
// Rectangle (rows 28-67): shifts right by ~0.5px per row
|
||||
if y < 28 {
|
||||
@@ -245,8 +251,8 @@ impl AnimeImage {
|
||||
}
|
||||
38 - Self::first_x(anime_type, y) + y % 2
|
||||
}
|
||||
AnimeType::G635L | AnimeType::G835L => {
|
||||
// G835L/G635L rows GROW then stay constant (inverted from other devices)
|
||||
AnimeType::G835L => {
|
||||
// G835L rows GROW then stay constant (inverted from other devices)
|
||||
// Triangle (rows 0-27): pairs of rows with same length, 1→14
|
||||
// Rectangle (rows 28-67): constant 15 LEDs
|
||||
if y < 28 {
|
||||
@@ -270,8 +276,8 @@ impl AnimeImage {
|
||||
// 33.0 = Longest row LED count (physical) plus half-pixel offset
|
||||
AnimeType::GA401 => (33.0 + 0.5) * Self::scale_x(anime_type),
|
||||
AnimeType::GU604 => (38.0 + 0.5) * Self::scale_x(anime_type),
|
||||
AnimeType::G635L => (33.0 + 0.5) * Self::scale_x(anime_type),
|
||||
AnimeType::G835L => (33.0 + 0.5) * Self::scale_x(anime_type),
|
||||
// G835L: max 15 LEDs wide + rectangle shift (~20 pixels) + stagger
|
||||
AnimeType::G835L => (35.0 + 0.5) * Self::scale_x(anime_type),
|
||||
_ => (35.0 + 0.5) * Self::scale_x(anime_type),
|
||||
}
|
||||
}
|
||||
@@ -281,7 +287,6 @@ impl AnimeImage {
|
||||
match anime_type {
|
||||
AnimeType::GA401 => 55,
|
||||
AnimeType::GU604 => 62,
|
||||
AnimeType::G635L => 68,
|
||||
AnimeType::G835L => 68,
|
||||
_ => 61,
|
||||
}
|
||||
@@ -293,7 +298,6 @@ impl AnimeImage {
|
||||
// 54.0 = End column LED count (physical) plus one dead pixel
|
||||
AnimeType::GA401 => (54.0 + 1.0) * Self::scale_y(anime_type),
|
||||
AnimeType::GU604 => 62.0 * Self::scale_y(anime_type),
|
||||
AnimeType::G635L => 68.0 * Self::scale_y(anime_type),
|
||||
AnimeType::G835L => 68.0 * Self::scale_y(anime_type),
|
||||
// GA402 may not have dead pixels and require only the physical LED count
|
||||
_ => 61.0 * Self::scale_y(anime_type),
|
||||
@@ -444,35 +448,13 @@ impl AnimeImage {
|
||||
let transform =
|
||||
Mat3::from_scale_angle_translation(self.scale, self.angle, self.translation);
|
||||
|
||||
let pos_in_leds = Mat3::from_translation(self.led_center());
|
||||
let pos_in_leds = Mat3::from_translation(Vec2::new(20.0, 20.0));
|
||||
// Get LED-to-image coords
|
||||
let led_from_px = pos_in_leds * led_from_cm * transform * cm_from_px * center;
|
||||
|
||||
led_from_px.inverse()
|
||||
}
|
||||
|
||||
fn led_center(&self) -> Vec2 {
|
||||
if !matches!(self.anime_type, AnimeType::G635L | AnimeType::G835L) {
|
||||
return Vec2::new(20.0, 20.0);
|
||||
}
|
||||
|
||||
let mut min = Vec2::splat(f32::INFINITY);
|
||||
let mut max = Vec2::splat(f32::NEG_INFINITY);
|
||||
for led in self.led_pos.iter().flatten() {
|
||||
let pos = Vec2::new(led.x(), led.y());
|
||||
min = min.min(pos);
|
||||
max = max.max(pos);
|
||||
}
|
||||
|
||||
if min.x.is_finite() {
|
||||
let mut center = (min + max) * 0.5;
|
||||
center.y += 1.0;
|
||||
center
|
||||
} else {
|
||||
Vec2::new(20.0, 20.0)
|
||||
}
|
||||
}
|
||||
|
||||
/// Generate the base image from inputs. The result can be displayed as is
|
||||
/// or updated via scale, position, or angle then displayed again after
|
||||
/// `update()`.
|
||||
|
||||
@@ -247,10 +247,7 @@ pub fn get_anime_type() -> AnimeType {
|
||||
|
||||
if board_name.contains("GA401I") || board_name.contains("GA401Q") {
|
||||
AnimeType::GA401
|
||||
} else if board_name.contains("GA402R")
|
||||
|| board_name.contains("GA402X")
|
||||
|| board_name.contains("GA402N")
|
||||
{
|
||||
} else if board_name.contains("GA402R") || board_name.contains("GA402X") {
|
||||
AnimeType::GA402
|
||||
} else if board_name.contains("GU604V") {
|
||||
AnimeType::GU604
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
advanced_type: r#None,
|
||||
power_zones: [Keyboard],
|
||||
),
|
||||
(
|
||||
(
|
||||
device_name: "FX607V",
|
||||
product_id: "",
|
||||
layout_name: "fa506i",
|
||||
@@ -351,13 +351,13 @@
|
||||
power_zones: [Keyboard, Lightbar, Logo, RearGlow],
|
||||
),
|
||||
(
|
||||
device_name: "G635L",
|
||||
product_id: "",
|
||||
layout_name: "g635l-per-key",
|
||||
basic_modes: [Static, Breathe, RainbowCycle, RainbowWave, Star, Rain, Highlight, Laser, Ripple, Pulse, Comet, Flash],
|
||||
basic_zones: [],
|
||||
advanced_type: PerKey,
|
||||
power_zones: [Keyboard, Lightbar, Logo],
|
||||
device_name: "G635L",
|
||||
product_id: "",
|
||||
layout_name: "g635l-per-key",
|
||||
basic_modes: [Static, Breathe, RainbowCycle, RainbowWave, Star, Rain, Highlight, Laser, Ripple, Pulse, Comet, Flash],
|
||||
basic_zones: [],
|
||||
advanced_type: PerKey,
|
||||
power_zones: [Keyboard, Lightbar, Logo],
|
||||
),
|
||||
(
|
||||
device_name: "G712LI",
|
||||
@@ -579,7 +579,7 @@
|
||||
device_name: "G835L",
|
||||
product_id: "",
|
||||
layout_name: "g814ji-per-key",
|
||||
basic_modes: [Static, Breathe, RainbowCycle, RainbowWave, Star, Rain, Highlight, Laser, Ripple, Pulse, Comet, Flash],
|
||||
basic_modes: [Static, Breathe, RainbowCycle, RainbowWave, Star, Rain, Highlight, Laser, Ripple, Comet, Flash],
|
||||
basic_zones: [],
|
||||
advanced_type: PerKey,
|
||||
power_zones: [Keyboard, Lightbar, Logo],
|
||||
@@ -998,4 +998,4 @@
|
||||
advanced_type: r#None,
|
||||
power_zones: [Ally],
|
||||
),
|
||||
])
|
||||
])
|
||||
|
||||
@@ -148,12 +148,6 @@ async fn main() -> Result<()> {
|
||||
}
|
||||
};
|
||||
|
||||
let is_tuf = {
|
||||
let b = board_name.to_lowercase();
|
||||
let p = prod_family.to_lowercase();
|
||||
b.contains("tuf") || p.contains("tuf")
|
||||
};
|
||||
|
||||
#[cfg(feature = "rog_ally")]
|
||||
if is_rog_ally {
|
||||
config.notifications.enabled = false;
|
||||
@@ -193,18 +187,12 @@ async fn main() -> Result<()> {
|
||||
slint::init_translations!(concat!(env!("CARGO_MANIFEST_DIR"), "/translations/"));
|
||||
}
|
||||
|
||||
// Prefetch supported Aura modes once at startup and move into the
|
||||
// spawned UI thread so the UI uses a stable, immutable list.
|
||||
let prefetched_supported: std::sync::Arc<Option<Vec<i32>>> = std::sync::Arc::new(
|
||||
rog_control_center::ui::setup_aura::prefetch_supported_basic_modes().await,
|
||||
);
|
||||
|
||||
thread::spawn(move || {
|
||||
let mut state = AppState::StartingUp;
|
||||
loop {
|
||||
if is_rog_ally {
|
||||
let config_copy_2 = config.clone();
|
||||
let newui = setup_window(config.clone(), prefetched_supported.clone(), is_tuf);
|
||||
let newui = setup_window(config.clone());
|
||||
newui.window().on_close_requested(move || {
|
||||
exit(0);
|
||||
});
|
||||
@@ -245,9 +233,6 @@ async fn main() -> Result<()> {
|
||||
|
||||
let config_copy = config.clone();
|
||||
let app_state_copy = app_state.clone();
|
||||
// Avoid moving the original `prefetched_supported` into the
|
||||
// closure — clone an Arc for the closure to capture.
|
||||
let pref_for_invoke = prefetched_supported.clone();
|
||||
slint::invoke_from_event_loop(move || {
|
||||
UI.with(|ui| {
|
||||
let app_state_copy = app_state_copy.clone();
|
||||
@@ -262,7 +247,7 @@ async fn main() -> Result<()> {
|
||||
});
|
||||
} else {
|
||||
let config_copy_2 = config_copy.clone();
|
||||
let newui = setup_window(config_copy, pref_for_invoke.clone(), is_tuf);
|
||||
let newui = setup_window(config_copy);
|
||||
newui.window().on_close_requested(move || {
|
||||
if let Ok(mut app_state) = app_state_copy.lock() {
|
||||
*app_state = AppState::MainWindowClosed;
|
||||
|
||||
@@ -1,14 +1,9 @@
|
||||
pub mod setup_anime;
|
||||
pub mod setup_aura;
|
||||
pub mod setup_fans;
|
||||
pub mod setup_gpu;
|
||||
pub mod setup_system;
|
||||
|
||||
use std::sync::atomic::{AtomicU64, Ordering};
|
||||
use std::sync::{Arc, Mutex};
|
||||
use std::time::Duration;
|
||||
|
||||
static TOAST_SEQ: AtomicU64 = AtomicU64::new(0);
|
||||
|
||||
use config_traits::StdConfig;
|
||||
use log::warn;
|
||||
@@ -75,61 +70,25 @@ pub fn show_toast(
|
||||
handle: Weak<MainWindow>,
|
||||
result: zbus::Result<()>,
|
||||
) {
|
||||
// bump sequence so that any previously spawned timers won't clear newer toasts
|
||||
let seq = TOAST_SEQ.fetch_add(1, Ordering::SeqCst) + 1;
|
||||
match result {
|
||||
Ok(_) => {
|
||||
let delayed_handle = handle.clone();
|
||||
let delayed_text = success.clone();
|
||||
slint::invoke_from_event_loop(move || handle.unwrap().invoke_show_toast(success)).ok();
|
||||
tokio::spawn(async move {
|
||||
tokio::time::sleep(Duration::from_secs(5)).await;
|
||||
if TOAST_SEQ.load(Ordering::SeqCst) == seq {
|
||||
slint::invoke_from_event_loop(move || {
|
||||
delayed_handle
|
||||
.unwrap()
|
||||
.invoke_clear_toast_if_matches(delayed_text)
|
||||
})
|
||||
.ok();
|
||||
}
|
||||
});
|
||||
}
|
||||
Err(e) => {
|
||||
let delayed_handle = handle.clone();
|
||||
let delayed_text = fail.clone();
|
||||
slint::invoke_from_event_loop(move || {
|
||||
log::warn!("{fail}: {e}");
|
||||
handle.unwrap().invoke_show_toast(fail)
|
||||
})
|
||||
.ok();
|
||||
tokio::spawn(async move {
|
||||
tokio::time::sleep(Duration::from_secs(5)).await;
|
||||
if TOAST_SEQ.load(Ordering::SeqCst) == seq {
|
||||
slint::invoke_from_event_loop(move || {
|
||||
delayed_handle
|
||||
.unwrap()
|
||||
.invoke_clear_toast_if_matches(delayed_text)
|
||||
})
|
||||
.ok();
|
||||
}
|
||||
});
|
||||
slint::invoke_from_event_loop(move || handle.unwrap().invoke_show_toast(success)).ok()
|
||||
}
|
||||
Err(e) => slint::invoke_from_event_loop(move || {
|
||||
log::warn!("{fail}: {e}");
|
||||
handle.unwrap().invoke_show_toast(fail)
|
||||
})
|
||||
.ok(),
|
||||
};
|
||||
}
|
||||
|
||||
pub fn setup_window(
|
||||
config: Arc<Mutex<Config>>,
|
||||
prefetched_supported: std::sync::Arc<Option<Vec<i32>>>,
|
||||
is_tuf: bool,
|
||||
) -> MainWindow {
|
||||
pub fn setup_window(config: Arc<Mutex<Config>>) -> MainWindow {
|
||||
slint::set_xdg_app_id("rog-control-center")
|
||||
.map_err(|e| warn!("Couldn't set application ID: {e:?}"))
|
||||
.ok();
|
||||
let ui = MainWindow::new()
|
||||
.map_err(|e| warn!("Couldn't create main window: {e:?}"))
|
||||
.unwrap();
|
||||
// propagate TUF flag to the UI so the sidebar can swap logo branding
|
||||
ui.set_is_tuf(is_tuf);
|
||||
ui.window()
|
||||
.show()
|
||||
.map_err(|e| warn!("Couldn't show main window: {e:?}"))
|
||||
@@ -160,18 +119,15 @@ pub fn setup_window(
|
||||
setup_system_page_callbacks(&ui, config.clone());
|
||||
}
|
||||
if available.contains(&"xyz.ljones.Aura".to_string()) {
|
||||
setup_aura_page(&ui, config.clone(), prefetched_supported.as_ref().clone());
|
||||
setup_aura_page(&ui, config.clone());
|
||||
}
|
||||
if available.contains(&"xyz.ljones.Anime".to_string()) {
|
||||
setup_anime_page(&ui, config.clone());
|
||||
}
|
||||
if available.contains(&"xyz.ljones.FanCurves".to_string()) {
|
||||
setup_fan_curve_page(&ui, config.clone());
|
||||
setup_fan_curve_page(&ui, config);
|
||||
}
|
||||
|
||||
// Populate GPU page choices and callbacks
|
||||
setup_gpu::setup_gpu_page(&ui);
|
||||
|
||||
ui
|
||||
}
|
||||
|
||||
|
||||
@@ -34,103 +34,63 @@ fn decode_hex(s: &str) -> RgbaColor<u8> {
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns the first available Aura interface
|
||||
// TODO: return all
|
||||
async fn find_aura_iface() -> Result<AuraProxy<'static>, Box<dyn std::error::Error>> {
|
||||
let conn = zbus::Connection::system().await?;
|
||||
let mgr = zbus::fdo::ObjectManagerProxy::new(&conn, "xyz.ljones.Asusd", "/").await?;
|
||||
let objs = mgr.get_managed_objects().await?;
|
||||
let mut paths: Vec<zbus::zvariant::OwnedObjectPath> = objs
|
||||
.iter()
|
||||
.filter(|(_, ifaces)| ifaces.keys().any(|k| k.as_str() == "xyz.ljones.Aura"))
|
||||
.map(|(p, _)| p.clone())
|
||||
.collect();
|
||||
if paths.len() > 1 {
|
||||
log::debug!("Multiple aura devices: {paths:?}");
|
||||
let f = zbus::fdo::ObjectManagerProxy::new(&conn, "xyz.ljones.Asusd", "/").await?;
|
||||
let interfaces = f.get_managed_objects().await?;
|
||||
let mut aura_paths = Vec::new();
|
||||
for v in interfaces.iter() {
|
||||
for k in v.1.keys() {
|
||||
if k.as_str() == "xyz.ljones.Aura" {
|
||||
println!("Found aura device at {}, {}", v.0, k);
|
||||
aura_paths.push(v.0.clone());
|
||||
}
|
||||
}
|
||||
}
|
||||
let path = paths.pop().ok_or("No Aura interface")?;
|
||||
AuraProxy::builder(&conn)
|
||||
.path(path)?
|
||||
.destination("xyz.ljones.Asusd")?
|
||||
.build()
|
||||
.await
|
||||
.map_err(Into::into)
|
||||
if aura_paths.len() > 1 {
|
||||
println!("Multiple aura devices found: {aura_paths:?}");
|
||||
println!("TODO: enable selection");
|
||||
}
|
||||
if let Some(path) = aura_paths.first() {
|
||||
return Ok(AuraProxy::builder(&conn)
|
||||
.path(path.clone())?
|
||||
.destination("xyz.ljones.Asusd")?
|
||||
.build()
|
||||
.await?);
|
||||
}
|
||||
|
||||
Err("No Aura interface".into())
|
||||
}
|
||||
|
||||
pub async fn prefetch_supported_basic_modes() -> Option<Vec<i32>> {
|
||||
let proxy = find_aura_iface().await.ok()?;
|
||||
let modes = proxy.supported_basic_modes().await.ok()?;
|
||||
Some(modes.iter().map(|n| (*n).into()).collect())
|
||||
}
|
||||
|
||||
pub fn setup_aura_page(
|
||||
ui: &MainWindow,
|
||||
_states: Arc<Mutex<Config>>,
|
||||
prefetched_supported: Option<Vec<i32>>,
|
||||
) {
|
||||
let g = ui.global::<AuraPageData>();
|
||||
g.on_cb_hex_from_colour(|c| {
|
||||
pub fn setup_aura_page(ui: &MainWindow, _states: Arc<Mutex<Config>>) {
|
||||
ui.global::<AuraPageData>().on_cb_hex_from_colour(|c| {
|
||||
format!("#{:02X}{:02X}{:02X}", c.red(), c.green(), c.blue()).into()
|
||||
});
|
||||
g.on_cb_hex_to_colour(|s| decode_hex(s.as_str()).into());
|
||||
|
||||
ui.global::<AuraPageData>()
|
||||
.on_cb_hex_to_colour(|s| decode_hex(s.as_str()).into());
|
||||
|
||||
let handle = ui.as_weak();
|
||||
tokio::spawn(async move {
|
||||
let Ok(aura) = find_aura_iface().await else {
|
||||
info!("No aura interfaces");
|
||||
info!("This device appears to have no aura interfaces");
|
||||
return Ok::<(), zbus::Error>(());
|
||||
};
|
||||
|
||||
set_ui_props_async!(handle, aura, AuraPageData, brightness);
|
||||
set_ui_props_async!(handle, aura, AuraPageData, led_mode);
|
||||
set_ui_props_async!(handle, aura, AuraPageData, led_mode_data);
|
||||
set_ui_props_async!(handle, aura, AuraPageData, led_power);
|
||||
set_ui_props_async!(handle, aura, AuraPageData, device_type);
|
||||
|
||||
let modes_vec: Vec<i32> = match prefetched_supported {
|
||||
Some(p) => p,
|
||||
None => aura
|
||||
.supported_basic_modes()
|
||||
.await
|
||||
.ok()
|
||||
.map(|m| m.iter().map(|n| (*n).into()).collect())
|
||||
.unwrap_or_default(),
|
||||
};
|
||||
|
||||
// Restore saved mode, colours, zone, speed, direction from asusd (persisted to disk).
|
||||
// Use effect.mode as single source — avoid led_mode() which can fail (try_lock).
|
||||
let restore = aura.led_mode_data().await.ok();
|
||||
let raw_mode: Option<i32> = restore.as_ref().map(|d| d.mode.into());
|
||||
let d_slint = restore.map(|d| d.into());
|
||||
handle
|
||||
.upgrade_in_event_loop(move |h| {
|
||||
let names = h.global::<AuraPageData>().get_mode_names();
|
||||
let mut raws = Vec::new();
|
||||
let mut mode_names = Vec::new();
|
||||
for (i, name) in names.iter().enumerate() {
|
||||
let raw = i as i32;
|
||||
if modes_vec.contains(&raw) && i != 9 {
|
||||
raws.push(raw);
|
||||
mode_names.push(name.clone());
|
||||
}
|
||||
}
|
||||
h.global::<AuraPageData>()
|
||||
.set_supported_basic_modes(raws.as_slice().into());
|
||||
h.global::<AuraPageData>()
|
||||
.set_available_mode_names(mode_names.as_slice().into());
|
||||
if let Some(d) = d_slint {
|
||||
h.global::<AuraPageData>().invoke_update_led_mode_data(d);
|
||||
if let Some(cm) = raw_mode {
|
||||
let idx = raws.iter().position(|&r| r == cm).unwrap_or(0) as i32;
|
||||
h.global::<AuraPageData>().set_current_available_mode(idx);
|
||||
}
|
||||
h.invoke_external_colour_change();
|
||||
}
|
||||
})
|
||||
.map_err(|e| error!("{e}"))
|
||||
.ok();
|
||||
|
||||
if let Ok(mut pow3r) = aura.supported_power_zones().await {
|
||||
let dev = aura
|
||||
let dev_type = aura
|
||||
.device_type()
|
||||
.await
|
||||
.unwrap_or(AuraDeviceType::LaptopKeyboard2021);
|
||||
log::debug!("Available LED power modes {pow3r:?}");
|
||||
handle
|
||||
.upgrade_in_event_loop(move |handle| {
|
||||
let names: Vec<SharedString> = handle
|
||||
@@ -138,103 +98,135 @@ pub fn setup_aura_page(
|
||||
.get_power_zone_names()
|
||||
.iter()
|
||||
.collect();
|
||||
if dev.is_old_laptop() {
|
||||
|
||||
if dev_type.is_old_laptop() {
|
||||
// Need to add the specific KeyboardAndLightbar
|
||||
if pow3r.contains(&PowerZones::Keyboard)
|
||||
&& pow3r.contains(&PowerZones::Lightbar)
|
||||
{
|
||||
pow3r.push(PowerZones::KeyboardAndLightbar);
|
||||
}
|
||||
let n: Vec<SharedString> =
|
||||
pow3r.iter().map(|z| names[(*z) as usize].clone()).collect();
|
||||
let names: Vec<SharedString> =
|
||||
pow3r.iter().map(|n| names[(*n) as usize].clone()).collect();
|
||||
handle
|
||||
.global::<AuraPageData>()
|
||||
.set_power_zone_names_old(n.as_slice().into());
|
||||
.set_power_zone_names_old(names.as_slice().into());
|
||||
} else {
|
||||
let p: Vec<SlintPowerZones> = pow3r.iter().map(|z| (*z).into()).collect();
|
||||
let power: Vec<SlintPowerZones> =
|
||||
pow3r.iter().map(|p| (*p).into()).collect();
|
||||
|
||||
handle
|
||||
.global::<AuraPageData>()
|
||||
.set_supported_power_zones(p.as_slice().into());
|
||||
.set_supported_power_zones(power.as_slice().into());
|
||||
}
|
||||
})
|
||||
.ok();
|
||||
}
|
||||
|
||||
let proxy = aura.clone();
|
||||
let weak = handle.clone();
|
||||
if let Ok(modes) = aura.supported_basic_modes().await {
|
||||
log::debug!("Available LED modes {modes:?}");
|
||||
handle
|
||||
.upgrade_in_event_loop(move |handle| {
|
||||
let m: Vec<i32> = modes.iter().map(|n| (*n).into()).collect();
|
||||
handle
|
||||
.global::<AuraPageData>()
|
||||
.set_supported_basic_modes(m.as_slice().into());
|
||||
// Get the translated names
|
||||
let names = handle.global::<AuraPageData>().get_mode_names();
|
||||
|
||||
let res: Vec<SharedString> = names
|
||||
.iter()
|
||||
.enumerate()
|
||||
.filter(|(n, _)| modes.contains(&(*n as i32).into()) && *n != 9)
|
||||
.map(|(_, i)| i)
|
||||
.collect();
|
||||
handle
|
||||
.global::<AuraPageData>()
|
||||
.set_available_mode_names(res.as_slice().into());
|
||||
})
|
||||
.map_err(|e| error!("{e:}"))
|
||||
.ok();
|
||||
}
|
||||
|
||||
let proxy_copy = aura.clone();
|
||||
handle
|
||||
.upgrade_in_event_loop(move |h| {
|
||||
set_ui_callbacks!(h,
|
||||
.upgrade_in_event_loop(move |handle| {
|
||||
set_ui_callbacks!(handle,
|
||||
AuraPageData(.into()),
|
||||
proxy.brightness(.into()),
|
||||
"Brightness set to {}",
|
||||
"Brightness failed"
|
||||
proxy_copy.brightness(.into()),
|
||||
"Keyboard LED brightness successfully set to {}",
|
||||
"Setting keyboard LED brightness failed"
|
||||
);
|
||||
|
||||
let p = proxy.clone();
|
||||
let w = weak.clone();
|
||||
h.global::<AuraPageData>().on_apply_led_mode_data(move || {
|
||||
let Some(ui) = w.upgrade() else { return };
|
||||
let slint_effect = ui.global::<AuraPageData>().get_led_mode_data();
|
||||
let raw: rog_aura::AuraEffect = slint_effect.into();
|
||||
let pp = p.clone();
|
||||
let t = w.clone();
|
||||
tokio::spawn(async move {
|
||||
let r = pp.set_led_mode_data(raw).await;
|
||||
show_toast("LED mode applied".into(), "LED mode failed".into(), t, r);
|
||||
});
|
||||
});
|
||||
h.invoke_external_colour_change();
|
||||
set_ui_callbacks!(handle,
|
||||
AuraPageData(.into()),
|
||||
proxy_copy.led_mode(.into()),
|
||||
"Keyboard LED mode successfully set to {}",
|
||||
"Setting keyboard LEDmode failed"
|
||||
);
|
||||
|
||||
set_ui_callbacks!(handle,
|
||||
AuraPageData(.into()),
|
||||
proxy_copy.led_mode_data(.into()),
|
||||
"Keyboard LED mode set to {:?}",
|
||||
"Setting keyboard LED mode failed"
|
||||
);
|
||||
|
||||
// set_ui_callbacks!(handle,
|
||||
// AuraPageData(.clone().into()),
|
||||
// proxy_copy.led_power(.into()),
|
||||
// "Keyboard LED power successfully set to {:?}",
|
||||
// "Setting keyboard power failed"
|
||||
// );
|
||||
|
||||
handle.invoke_external_colour_change();
|
||||
})
|
||||
.ok();
|
||||
|
||||
let weak_power = handle.clone();
|
||||
let proxy_power = aura.clone();
|
||||
let handle_copy = handle.clone();
|
||||
let proxy_copy = aura.clone();
|
||||
handle
|
||||
.upgrade_in_event_loop(|h| {
|
||||
h.global::<AuraPageData>().on_cb_led_power(move |power| {
|
||||
let w = weak_power.clone();
|
||||
let p = proxy_power.clone();
|
||||
let pw: LaptopAuraPower = power.into();
|
||||
tokio::spawn(async move {
|
||||
show_toast(
|
||||
"Aura power updated".into(),
|
||||
"Aura power failed".into(),
|
||||
w,
|
||||
p.set_led_power(pw).await,
|
||||
);
|
||||
.upgrade_in_event_loop(|handle| {
|
||||
handle
|
||||
.global::<AuraPageData>()
|
||||
.on_cb_led_power(move |power| {
|
||||
let handle_copy = handle_copy.clone();
|
||||
let proxy_copy = aura.clone();
|
||||
let power: LaptopAuraPower = power.into();
|
||||
tokio::spawn(async move {
|
||||
show_toast(
|
||||
"Aura power settings changed".into(),
|
||||
"Failed to set Aura power settings".into(),
|
||||
handle_copy,
|
||||
proxy_copy.set_led_power(power).await,
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
})
|
||||
.map_err(|e| error!("{e}"))
|
||||
.map_err(|e| error!("{e:}"))
|
||||
.ok();
|
||||
|
||||
let stream_handle = handle.clone();
|
||||
let aura_stream = aura.clone();
|
||||
// Need to update the UI if the mode changes
|
||||
let handle_copy = handle.clone();
|
||||
// spawn required since the while let never exits
|
||||
tokio::spawn(async move {
|
||||
let mut x = proxy_copy.receive_led_mode_data_changed().await;
|
||||
use futures_util::StreamExt;
|
||||
let mut stream = aura_stream.receive_led_mode_data_changed().await;
|
||||
while let Some(e) = stream.next().await {
|
||||
while let Some(e) = x.next().await {
|
||||
if let Ok(out) = e.get().await {
|
||||
let raw: i32 = out.mode.into();
|
||||
let data = out.into();
|
||||
stream_handle
|
||||
.upgrade_in_event_loop(move |h| {
|
||||
h.global::<AuraPageData>().invoke_update_led_mode_data(data);
|
||||
let supported: Vec<i32> = h
|
||||
handle_copy
|
||||
.upgrade_in_event_loop(move |handle| {
|
||||
handle
|
||||
.global::<AuraPageData>()
|
||||
.get_supported_basic_modes()
|
||||
.iter()
|
||||
.collect();
|
||||
let idx = supported.iter().position(|&x| x == raw).unwrap_or(0) as i32;
|
||||
h.global::<AuraPageData>().set_current_available_mode(idx);
|
||||
h.invoke_external_colour_change();
|
||||
.invoke_update_led_mode_data(out.into());
|
||||
handle.invoke_external_colour_change();
|
||||
})
|
||||
.map_err(|e| error!("{e}"))
|
||||
.map_err(|e| error!("{e:}"))
|
||||
.ok();
|
||||
}
|
||||
}
|
||||
});
|
||||
debug!("Aura setup done");
|
||||
debug!("Aura setup tasks complete");
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,182 +0,0 @@
|
||||
use log::error;
|
||||
use rog_platform::asus_armoury::{AttrValue, FirmwareAttributes};
|
||||
use slint::{ComponentHandle, ModelRc, SharedString};
|
||||
|
||||
use crate::{GPUPageData, MainWindow};
|
||||
|
||||
// Populate GPU page choices and wire the `cb_set_gpu_mode` callback
|
||||
pub fn setup_gpu_page(ui: &MainWindow) {
|
||||
let handle = ui.as_weak();
|
||||
|
||||
tokio::spawn(async move {
|
||||
// Read available attributes
|
||||
let attrs = FirmwareAttributes::new();
|
||||
let gpu_mux_available = attrs
|
||||
.gpu_mux_mode()
|
||||
.map(|a| a.base_path_exists())
|
||||
.unwrap_or(false);
|
||||
|
||||
// Prepare choice strings
|
||||
let mut choices: Vec<SharedString> = Vec::new();
|
||||
choices.push(SharedString::from("Integrated"));
|
||||
if gpu_mux_available {
|
||||
choices.push(SharedString::from("Ultimate"));
|
||||
}
|
||||
choices.push(SharedString::from("Hybrid"));
|
||||
|
||||
// Read current attribute values to initialise UI state
|
||||
let current_dgpu = attrs
|
||||
.dgpu_disable()
|
||||
.and_then(|a| a.current_value().ok())
|
||||
.unwrap_or(AttrValue::Integer(0));
|
||||
let current_mux = attrs
|
||||
.gpu_mux_mode()
|
||||
.and_then(|a| a.current_value().ok())
|
||||
.unwrap_or(AttrValue::Integer(1));
|
||||
|
||||
// Convert to UI-able values
|
||||
let dgpu_disabled = matches!(current_dgpu, AttrValue::Integer(v) if v == 1);
|
||||
// Determine initial index for gpu_mux_mode property
|
||||
let initial_index: i32 = if gpu_mux_available {
|
||||
// If mux attr says 0 -> Ultimate, else try dgpu to refine
|
||||
match current_mux {
|
||||
AttrValue::Integer(0) => 1, // Ultimate
|
||||
_ => {
|
||||
match current_dgpu {
|
||||
AttrValue::Integer(1) => 0, // Integrated
|
||||
_ => 2, // Hybrid/Optimus fallback
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Only Integrated / Hybrid
|
||||
match current_dgpu {
|
||||
AttrValue::Integer(1) => 0,
|
||||
_ => 1,
|
||||
}
|
||||
};
|
||||
|
||||
let handle_copy = handle.clone();
|
||||
if let Err(e) = handle.upgrade_in_event_loop(move |handle| {
|
||||
let global = handle.global::<GPUPageData>();
|
||||
|
||||
// set choices model
|
||||
let model: ModelRc<SharedString> = choices.as_slice().into();
|
||||
global.set_gpu_modes_choises(model);
|
||||
global.set_gpu_mux_available(gpu_mux_available);
|
||||
|
||||
// set initial state
|
||||
global.set_dgpu_disabled(if dgpu_disabled { 1 } else { 0 });
|
||||
global.set_gpu_mux_mode(initial_index);
|
||||
|
||||
// register callback
|
||||
let handle_cb = handle_copy.clone();
|
||||
global.on_cb_set_gpu_mode(move |index: i32| {
|
||||
// show a blue toast informing user a reboot is required (auto-clears)
|
||||
let toast_handle = handle_cb.clone();
|
||||
crate::ui::show_toast(
|
||||
SharedString::from(
|
||||
"GPU mode change scheduled — reboot required for changes to apply.",
|
||||
),
|
||||
SharedString::from("Failed to set GPU mode"),
|
||||
toast_handle.clone(),
|
||||
Ok(()),
|
||||
);
|
||||
|
||||
let handle_next = handle_cb.clone();
|
||||
tokio::spawn(async move {
|
||||
let attrs = FirmwareAttributes::new();
|
||||
let mux_avail = attrs
|
||||
.gpu_mux_mode()
|
||||
.map(|a| a.base_path_exists())
|
||||
.unwrap_or(false);
|
||||
|
||||
// helper to set attribute ignoring errors
|
||||
if mux_avail {
|
||||
match index {
|
||||
0 => {
|
||||
// Integrated
|
||||
if let Some(attr) = attrs.dgpu_disable() {
|
||||
let _ = attr.set_current_value(&AttrValue::Integer(1));
|
||||
}
|
||||
if let Some(attr) = attrs.gpu_mux_mode() {
|
||||
let _ = attr.set_current_value(&AttrValue::Integer(1));
|
||||
}
|
||||
}
|
||||
1 => {
|
||||
// Ultimate
|
||||
if let Some(attr) = attrs.dgpu_disable() {
|
||||
let _ = attr.set_current_value(&AttrValue::Integer(0));
|
||||
}
|
||||
if let Some(attr) = attrs.gpu_mux_mode() {
|
||||
let _ = attr.set_current_value(&AttrValue::Integer(0));
|
||||
}
|
||||
}
|
||||
2 => {
|
||||
// Dynamic
|
||||
if let Some(attr) = attrs.dgpu_disable() {
|
||||
let _ = attr.set_current_value(&AttrValue::Integer(0));
|
||||
}
|
||||
if let Some(attr) = attrs.gpu_mux_mode() {
|
||||
let _ = attr.set_current_value(&AttrValue::Integer(1));
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
} else {
|
||||
match index {
|
||||
0 => {
|
||||
if let Some(attr) = attrs.dgpu_disable() {
|
||||
let _ = attr.set_current_value(&AttrValue::Integer(1));
|
||||
}
|
||||
}
|
||||
1 => {
|
||||
if let Some(attr) = attrs.dgpu_disable() {
|
||||
let _ = attr.set_current_value(&AttrValue::Integer(0));
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
};
|
||||
|
||||
// After attempting write(s), refresh UI from attributes
|
||||
let attrs2 = FirmwareAttributes::new();
|
||||
let cur_dgpu = attrs2
|
||||
.dgpu_disable()
|
||||
.and_then(|a| a.current_value().ok())
|
||||
.unwrap_or(AttrValue::Integer(0));
|
||||
let cur_mux = attrs2
|
||||
.gpu_mux_mode()
|
||||
.and_then(|a| a.current_value().ok())
|
||||
.unwrap_or(AttrValue::Integer(1));
|
||||
|
||||
let dgpu_disabled = matches!(cur_dgpu, AttrValue::Integer(v) if v == 1);
|
||||
let new_index: i32 = if mux_avail {
|
||||
match cur_mux {
|
||||
AttrValue::Integer(0) => 1,
|
||||
_ => match cur_dgpu {
|
||||
AttrValue::Integer(1) => 0,
|
||||
_ => 2,
|
||||
},
|
||||
}
|
||||
} else {
|
||||
match cur_dgpu {
|
||||
AttrValue::Integer(1) => 0,
|
||||
_ => 1,
|
||||
}
|
||||
};
|
||||
|
||||
if let Err(e) = handle_next.upgrade_in_event_loop(move |h| {
|
||||
let g = h.global::<GPUPageData>();
|
||||
g.set_dgpu_disabled(if dgpu_disabled { 1 } else { 0 });
|
||||
g.set_gpu_mux_mode(new_index);
|
||||
}) {
|
||||
error!("setup_gpu callback: upgrade_in_event_loop: {e:?}");
|
||||
}
|
||||
});
|
||||
});
|
||||
}) {
|
||||
error!("setup_gpu_page: upgrade_in_event_loop: {e:?}");
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -40,6 +40,10 @@ pub fn setup_system_page(ui: &MainWindow, _config: Arc<Mutex<Config>>) {
|
||||
ui.global::<SystemPageData>().set_platform_profile(-1);
|
||||
ui.global::<SystemPageData>().set_panel_overdrive(-1);
|
||||
ui.global::<SystemPageData>().set_boot_sound(-1);
|
||||
ui.global::<SystemPageData>().set_kbd_leds_awake(-1);
|
||||
ui.global::<SystemPageData>().set_kbd_leds_sleep(-1);
|
||||
ui.global::<SystemPageData>().set_kbd_leds_boot(-1);
|
||||
ui.global::<SystemPageData>().set_kbd_leds_shutdown(-1);
|
||||
ui.global::<SystemPageData>().set_screen_auto_brightness(-1);
|
||||
ui.global::<SystemPageData>().set_mcu_powersave(-1);
|
||||
ui.global::<SystemPageData>().set_mini_led_mode(-1);
|
||||
@@ -669,6 +673,26 @@ pub fn setup_system_page_callbacks(ui: &MainWindow, _states: Arc<Mutex<Config>>)
|
||||
setup_callback!(boot_sound, handle, attr, i32);
|
||||
setup_external!(boot_sound, i32, handle, attr, value)
|
||||
}
|
||||
FirmwareAttribute::KbdLedsAwake => {
|
||||
init_property!(kbd_leds_awake, handle, value, i32);
|
||||
setup_callback!(kbd_leds_awake, handle, attr, i32);
|
||||
setup_external!(kbd_leds_awake, i32, handle, attr, value)
|
||||
}
|
||||
FirmwareAttribute::KbdLedsSleep => {
|
||||
init_property!(kbd_leds_sleep, handle, value, i32);
|
||||
setup_callback!(kbd_leds_sleep, handle, attr, i32);
|
||||
setup_external!(kbd_leds_sleep, i32, handle, attr, value)
|
||||
}
|
||||
FirmwareAttribute::KbdLedsBoot => {
|
||||
init_property!(kbd_leds_boot, handle, value, i32);
|
||||
setup_callback!(kbd_leds_boot, handle, attr, i32);
|
||||
setup_external!(kbd_leds_boot, i32, handle, attr, value)
|
||||
}
|
||||
FirmwareAttribute::KbdLedsShutdown => {
|
||||
init_property!(kbd_leds_shutdown, handle, value, i32);
|
||||
setup_callback!(kbd_leds_shutdown, handle, attr, i32);
|
||||
setup_external!(kbd_leds_shutdown, i32, handle, attr, value)
|
||||
}
|
||||
FirmwareAttribute::ScreenAutoBrightness => {
|
||||
init_property!(screen_auto_brightness, handle, value, i32);
|
||||
setup_callback!(screen_auto_brightness, handle, attr, i32);
|
||||
|
||||
@@ -7,7 +7,7 @@ import { PageFans } from "pages/fans.slint";
|
||||
import { PageAnime, AnimePageData } from "pages/anime.slint";
|
||||
import { RogItem } from "widgets/common.slint";
|
||||
import { PageAura } from "pages/aura.slint";
|
||||
import { PageGPU, GPUPageData } from "pages/gpu.slint";
|
||||
import { PageGPU } from "pages/gpu.slint";
|
||||
import { Node } from "widgets/graph.slint";
|
||||
export { Node }
|
||||
import { FanPageData, FanType, Profile } from "types/fan_types.slint";
|
||||
@@ -16,7 +16,7 @@ import { AuraPageData, AuraDevType, LaptopAuraPower, AuraPowerState, PowerZones,
|
||||
export { AuraPageData, AuraDevType, LaptopAuraPower, AuraPowerState, PowerZones, AuraEffect }
|
||||
import { PageAppSettings, AppSettingsPageData } from "pages/app_settings.slint";
|
||||
|
||||
export { AppSize, AttrMinMax, SystemPageData, AnimePageData, AppSettingsPageData, GPUPageData }
|
||||
export { AppSize, AttrMinMax, SystemPageData, AnimePageData, AppSettingsPageData }
|
||||
|
||||
export component MainWindow inherits Window {
|
||||
title: "ROG Control";
|
||||
@@ -35,8 +35,6 @@ export component MainWindow inherits Window {
|
||||
true, // About
|
||||
];
|
||||
private property <bool> show_notif;
|
||||
// TODO: change if TUF on the logo in the menu on the main page
|
||||
in property <bool> is_tuf: false;
|
||||
private property <bool> fade_cover;
|
||||
private property <bool> toast: false;
|
||||
private property <string> toast_text: "I show when something is waiting";
|
||||
@@ -45,13 +43,6 @@ export component MainWindow inherits Window {
|
||||
toast = text != "";
|
||||
toast_text = text;
|
||||
}
|
||||
callback clear_toast_if_matches(string);
|
||||
clear_toast_if_matches(text) => {
|
||||
if (toast && toast_text == text) {
|
||||
toast = false;
|
||||
toast_text = "";
|
||||
}
|
||||
}
|
||||
callback exit-app();
|
||||
callback show_notification(bool);
|
||||
show_notification(yes) => {
|
||||
@@ -65,13 +56,12 @@ export component MainWindow inherits Window {
|
||||
}
|
||||
min-height: AppSize.height;
|
||||
min-width: AppSize.width;
|
||||
background: Palette.alternate-background;
|
||||
|
||||
background: Colors.black;
|
||||
HorizontalLayout {
|
||||
padding: 0px;
|
||||
VerticalLayout {
|
||||
padding: 0px;
|
||||
side-bar := SideBar {
|
||||
title: @tr("ROG");
|
||||
model: [
|
||||
@tr("Menu1" => "System Control"),
|
||||
@tr("Menu2" => "Keyboard Aura"),
|
||||
@@ -82,15 +72,22 @@ export component MainWindow inherits Window {
|
||||
@tr("Menu7" => "About"),
|
||||
];
|
||||
available: root.sidebar_items_avilable;
|
||||
is_tuf: root.is_tuf;
|
||||
}
|
||||
|
||||
Button {
|
||||
height: 40px;
|
||||
Rectangle {
|
||||
max-height: 40px;
|
||||
width: side-bar.width;
|
||||
text: @tr("Quit App");
|
||||
clicked() => {
|
||||
root.exit-app();
|
||||
background: Palette.control-background;
|
||||
Text {
|
||||
vertical-alignment: center;
|
||||
horizontal-alignment: center;
|
||||
text: @tr("Quit App");
|
||||
}
|
||||
|
||||
TouchArea {
|
||||
clicked => {
|
||||
root.exit-app();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -104,37 +101,31 @@ export component MainWindow inherits Window {
|
||||
|
||||
/*if(side-bar.current-item == 1):*/ aura := PageAura {
|
||||
width: root.width - side-bar.width;
|
||||
height: root.height + 12px;
|
||||
visible: side-bar.current-item == 1;
|
||||
}
|
||||
|
||||
if(side-bar.current-item == 2): PageAnime {
|
||||
width: root.width - side-bar.width;
|
||||
height: root.height + 12px;
|
||||
visible: side-bar.current-item == 2;
|
||||
}
|
||||
|
||||
if(side-bar.current-item == 3): fans := PageFans {
|
||||
width: root.width - side-bar.width;
|
||||
height: root.height + 12px;
|
||||
visible: side-bar.current-item == 3;
|
||||
}
|
||||
|
||||
if(side-bar.current-item == 4): PageGPU {
|
||||
width: root.width - side-bar.width;
|
||||
height: root.height + 12px;
|
||||
visible: side-bar.current-item == 4;
|
||||
}
|
||||
|
||||
if(side-bar.current-item == 5): PageAppSettings {
|
||||
width: root.width - side-bar.width;
|
||||
height: root.height + 12px;
|
||||
visible: side-bar.current-item == 5;
|
||||
}
|
||||
|
||||
if(side-bar.current-item == 6): PageAbout {
|
||||
width: root.width - side-bar.width;
|
||||
height: root.height + 12px;
|
||||
visible: side-bar.current-item == 6;
|
||||
}
|
||||
|
||||
@@ -219,6 +210,10 @@ export component MainWindow inherits Window {
|
||||
y: 0px;
|
||||
width: root.width;
|
||||
height: root.height;
|
||||
|
||||
//padding only has effect on layout elements
|
||||
//padding: 10px;
|
||||
|
||||
background: Palette.background;
|
||||
border-color: Palette.border;
|
||||
border-width: 3px;
|
||||
|
||||
@@ -1,77 +1,62 @@
|
||||
import {
|
||||
AboutSlint,
|
||||
VerticalBox,
|
||||
HorizontalBox,
|
||||
ScrollView,
|
||||
} from "std-widgets.slint";
|
||||
import { AboutSlint, VerticalBox, HorizontalBox } from "std-widgets.slint";
|
||||
|
||||
export component PageAbout inherits VerticalLayout {
|
||||
padding: 10px;
|
||||
spacing: 10px;
|
||||
ScrollView {
|
||||
Text {
|
||||
vertical-alignment: TextVerticalAlignment.center;
|
||||
horizontal-alignment: TextHorizontalAlignment.center;
|
||||
text: "A UI for asusctl made with slint";
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
HorizontalBox {
|
||||
HorizontalBox {
|
||||
alignment: LayoutAlignment.center;
|
||||
VerticalBox {
|
||||
alignment: LayoutAlignment.center;
|
||||
VerticalBox {
|
||||
alignment: LayoutAlignment.center;
|
||||
|
||||
Text {
|
||||
vertical-alignment: TextVerticalAlignment.center;
|
||||
horizontal-alignment: TextHorizontalAlignment.center;
|
||||
text: "ROG Control Center";
|
||||
font-size: 22px;
|
||||
}
|
||||
Text {
|
||||
wrap: TextWrap.word-wrap;
|
||||
text: "You need to use kernel version 6.19 to use this software";
|
||||
}
|
||||
|
||||
Text {
|
||||
wrap: TextWrap.word-wrap;
|
||||
text: "\nA powerful graphical interface for managing ASUS ROG, TUF, and ProArt laptops on Linux. It acts as the official GUI for the asusctl toolset, allowing for seamless hardware tuning without the command line.";
|
||||
}
|
||||
Text {
|
||||
vertical-alignment: TextVerticalAlignment.center;
|
||||
horizontal-alignment: TextHorizontalAlignment.center;
|
||||
text: "Todo:";
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
Text {
|
||||
font-weight: 900;
|
||||
text: "Key Features:";
|
||||
}
|
||||
Text {
|
||||
text: "- [ ] Theme the widgets";
|
||||
}
|
||||
|
||||
Text {
|
||||
text: " • Performance: Switch power profiles and customize fan curves.\n • Aura Sync: Control keyboard backlighting and LED effects.\n • Battery Health: Set charge limits to extend battery longevity.\n • Display: Toggle Panel Overdrive and refresh rates.\n • AniMe Matrix: Control AniMe Matrix displays.";
|
||||
}
|
||||
Text {
|
||||
text: "- [ ] Add a cpu/gpu temp/fan speed info bar";
|
||||
}
|
||||
|
||||
Text {
|
||||
font-weight: 900;
|
||||
text: "Requirements:";
|
||||
}
|
||||
Text {
|
||||
text: "- [ ] Include fan speeds, temps in a bottom bar";
|
||||
}
|
||||
|
||||
Text {
|
||||
text: " • This software requires kernel version 6.19.";
|
||||
}
|
||||
Text {
|
||||
text: "- [ ] Slash control";
|
||||
}
|
||||
|
||||
Text {
|
||||
font-weight: 900;
|
||||
text: "Work in progress:";
|
||||
}
|
||||
Text {
|
||||
text: "- [ ] Screenpad controls";
|
||||
}
|
||||
|
||||
Text {
|
||||
text: " • Theme the widgets\n • Add a cpu/gpu temp/fan speed info bar\n • Include fan speeds, temps in a bottom bar\n • Slash control\n • Screenpad controls\n • ROG Ally specific settings";
|
||||
}
|
||||
|
||||
Text {
|
||||
font-weight: 900;
|
||||
text: "License:";
|
||||
}
|
||||
|
||||
Text {
|
||||
text: " This project is open-source software licensed under the Mozilla Public License 2.0 (MPL-2.0).";
|
||||
}
|
||||
|
||||
Text {
|
||||
font-weight: 900;
|
||||
text: "Links:";
|
||||
}
|
||||
|
||||
Text {
|
||||
text: " Source Code: https://gitlab.com/asus-linux/asusctl\n Website: https://asus-linux.org/";
|
||||
}
|
||||
Text {
|
||||
text: "- [ ] ROG Ally specific settings";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
vertical-alignment: TextVerticalAlignment.center;
|
||||
horizontal-alignment: TextHorizontalAlignment.center;
|
||||
text: "Work in progress";
|
||||
font-size: 22px;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,8 +36,12 @@ export component PageAnime inherits Rectangle {
|
||||
property <bool> show_display_advanced: false;
|
||||
property <bool> show_builtin_advanced: false;
|
||||
clip: true;
|
||||
|
||||
VerticalLayout {
|
||||
// TODO: slow with border-radius
|
||||
//padding only has effect on layout elements
|
||||
//padding: 8px;
|
||||
// height: parent.height - infobar.height - mainview.padding - self.padding * 2;
|
||||
// TODO: border-radius: 8px;
|
||||
VerticalLayout {
|
||||
padding: 10px;
|
||||
spacing: 10px;
|
||||
HorizontalLayout {
|
||||
@@ -128,9 +132,8 @@ export component PageAnime inherits Rectangle {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
opacity: 1;
|
||||
background: Palette.background;
|
||||
VerticalLayout {
|
||||
padding: 4px;
|
||||
padding: 50px;
|
||||
spacing: 10px;
|
||||
GroupBox {
|
||||
height: 10px;
|
||||
@@ -138,7 +141,7 @@ export component PageAnime inherits Rectangle {
|
||||
spacing: 10px;
|
||||
alignment: LayoutAlignment.start;
|
||||
Text {
|
||||
font-size: 16px;
|
||||
font-size: 18px;
|
||||
color: Palette.control-foreground;
|
||||
horizontal-alignment: TextHorizontalAlignment.center;
|
||||
text: @tr("Set which builtin animations are played");
|
||||
@@ -190,8 +193,8 @@ export component PageAnime inherits Rectangle {
|
||||
Button {
|
||||
x: root.width - self.width - 6px;
|
||||
y: 6px;
|
||||
text: "✕";
|
||||
height: 36px;
|
||||
text: "X";
|
||||
height: 40px;
|
||||
clicked => {
|
||||
root.show_builtin_advanced = false;
|
||||
root.show_fade_cover = false;
|
||||
@@ -203,9 +206,8 @@ export component PageAnime inherits Rectangle {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
opacity: 1;
|
||||
background: Palette.background;
|
||||
VerticalLayout {
|
||||
padding: 4px;
|
||||
padding: 50px;
|
||||
spacing: 10px;
|
||||
GroupBox {
|
||||
height: 100px;
|
||||
@@ -213,7 +215,7 @@ export component PageAnime inherits Rectangle {
|
||||
spacing: 10px;
|
||||
alignment: LayoutAlignment.start;
|
||||
Text {
|
||||
font-size: 16px;
|
||||
font-size: 18px;
|
||||
color: Palette.control-foreground;
|
||||
horizontal-alignment: TextHorizontalAlignment.center;
|
||||
text: @tr("Advanced Display Settings");
|
||||
@@ -252,8 +254,8 @@ export component PageAnime inherits Rectangle {
|
||||
Button {
|
||||
x: root.width - self.width - 6px;
|
||||
y: 6px;
|
||||
text: "✕";
|
||||
height: 36px;
|
||||
text: "X";
|
||||
height: 40px;
|
||||
clicked => {
|
||||
root.show_display_advanced = false;
|
||||
root.show_fade_cover = false;
|
||||
|
||||
@@ -15,7 +15,12 @@ export global AppSettingsPageData {
|
||||
export component PageAppSettings inherits VerticalLayout {
|
||||
Rectangle {
|
||||
clip: true;
|
||||
// TODO: slow with border-radius
|
||||
//padding only has effect on layout elements
|
||||
//padding: 8px;
|
||||
|
||||
// height: parent.height - infobar.height - mainview.padding - self.padding * 2;
|
||||
// TODO: border-radius: 8px;
|
||||
mainview := VerticalLayout {
|
||||
padding: 10px;
|
||||
spacing: 10px;
|
||||
@@ -52,8 +57,7 @@ export component PageAppSettings inherits VerticalLayout {
|
||||
}
|
||||
|
||||
Text {
|
||||
color: Palette.accent-background;
|
||||
text: " WIP: some features like notifications are not complete";
|
||||
text: "WIP: some features like notifications are not complete";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@ export component PageAura inherits Rectangle {
|
||||
c2.final_colour = AuraPageData.led_mode_data.colour2;
|
||||
c2.external_colour_change();
|
||||
}
|
||||
|
||||
ScrollView {
|
||||
VerticalLayout {
|
||||
padding: 10px;
|
||||
@@ -42,14 +41,10 @@ export component PageAura inherits Rectangle {
|
||||
current_value: AuraPageData.available_mode_names[self.current-index];
|
||||
model <=> AuraPageData.available_mode_names;
|
||||
selected => {
|
||||
AuraPageData.apply_effect({
|
||||
mode: AuraPageData.supported_basic_modes[self.current-index],
|
||||
zone: AuraPageData.led_mode_data.zone,
|
||||
colour1: AuraPageData.led_mode_data.colour1,
|
||||
colour2: AuraPageData.led_mode_data.colour2,
|
||||
speed: AuraPageData.led_mode_data.speed,
|
||||
direction: AuraPageData.led_mode_data.direction,
|
||||
});
|
||||
AuraPageData.led_mode_data.mode = AuraPageData.led_mode;
|
||||
AuraPageData.led_mode_data.mode = AuraPageData.current_available_mode;
|
||||
self.current_value = AuraPageData.available_mode_names[self.current-index];
|
||||
AuraPageData.cb_led_mode(AuraPageData.current_available_mode);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -58,7 +53,6 @@ export component PageAura inherits Rectangle {
|
||||
min-height: 220px;
|
||||
max-height: 400px;
|
||||
HorizontalLayout {
|
||||
padding-top: 5px;
|
||||
spacing: 10px;
|
||||
VerticalBox {
|
||||
Text {
|
||||
@@ -66,44 +60,47 @@ export component PageAura inherits Rectangle {
|
||||
vertical-alignment: TextVerticalAlignment.center;
|
||||
horizontal-alignment: TextHorizontalAlignment.center;
|
||||
}
|
||||
|
||||
HorizontalBox {
|
||||
c1 := ColourSlider {
|
||||
enabled: AuraPageData.colour1_enabled;
|
||||
enabled: AuraPageData.led_mode == 0 || AuraPageData.led_mode == 1 || AuraPageData.led_mode == 4 || AuraPageData.led_mode == 6 || AuraPageData.led_mode == 7 || AuraPageData.led_mode == 8 || AuraPageData.led_mode == 10 || AuraPageData.led_mode == 11 || AuraPageData.led_mode == 12;
|
||||
final_colour <=> AuraPageData.color1;
|
||||
colourbox <=> AuraPageData.colorbox1;
|
||||
set_hex_from_colour(c) => { return AuraPageData.cb_hex_from_colour(c); }
|
||||
hex_to_colour(s) => { return AuraPageData.cb_hex_to_colour(s); }
|
||||
set_hex_from_colour(c1) => {
|
||||
return AuraPageData.cb_hex_from_colour(c1);
|
||||
}
|
||||
hex_to_colour(s) => {
|
||||
return AuraPageData.cb_hex_to_colour(s);
|
||||
}
|
||||
released => {
|
||||
AuraPageData.apply_effect({
|
||||
mode: AuraPageData.led_mode_data.mode,
|
||||
zone: AuraPageData.led_mode_data.zone,
|
||||
colour1: AuraPageData.color1,
|
||||
colour2: AuraPageData.led_mode_data.colour2,
|
||||
speed: AuraPageData.led_mode_data.speed,
|
||||
direction: AuraPageData.led_mode_data.direction,
|
||||
});
|
||||
AuraPageData.led_mode_data.colour1 = AuraPageData.color1;
|
||||
AuraPageData.cb_led_mode_data(AuraPageData.led_mode_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
VerticalBox {
|
||||
Text { text: @tr("Colour 2"); vertical-alignment: TextVerticalAlignment.center; horizontal-alignment: TextHorizontalAlignment.center; }
|
||||
Text {
|
||||
text: @tr("Colour 2");
|
||||
vertical-alignment: TextVerticalAlignment.center;
|
||||
horizontal-alignment: TextHorizontalAlignment.center;
|
||||
}
|
||||
|
||||
HorizontalBox {
|
||||
c2 := ColourSlider {
|
||||
enabled: AuraPageData.colour2_enabled;
|
||||
enabled: AuraPageData.led_mode == 1 || AuraPageData.led_mode == 4;
|
||||
final_colour <=> AuraPageData.color2;
|
||||
colourbox <=> AuraPageData.colorbox2;
|
||||
set_hex_from_colour(c) => { return AuraPageData.cb_hex_from_colour(c); }
|
||||
hex_to_colour(s) => { return AuraPageData.cb_hex_to_colour(s); }
|
||||
set_hex_from_colour(c1) => {
|
||||
return AuraPageData.cb_hex_from_colour(c1);
|
||||
}
|
||||
hex_to_colour(s) => {
|
||||
return AuraPageData.cb_hex_to_colour(s);
|
||||
}
|
||||
released => {
|
||||
AuraPageData.apply_effect({
|
||||
mode: AuraPageData.led_mode_data.mode,
|
||||
zone: AuraPageData.led_mode_data.zone,
|
||||
colour1: AuraPageData.led_mode_data.colour1,
|
||||
colour2: AuraPageData.color2,
|
||||
speed: AuraPageData.led_mode_data.speed,
|
||||
direction: AuraPageData.led_mode_data.direction,
|
||||
});
|
||||
AuraPageData.led_mode_data.colour2 = AuraPageData.color2;
|
||||
AuraPageData.cb_led_mode_data(AuraPageData.led_mode_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -116,64 +113,70 @@ export component PageAura inherits Rectangle {
|
||||
min-height: 80px;
|
||||
max-height: 90px;
|
||||
RogItem {
|
||||
//padding only has effect on layout elements
|
||||
//padding: 0px;
|
||||
VerticalBox {
|
||||
Text { text: @tr("Zone"); vertical-alignment: TextVerticalAlignment.center; horizontal-alignment: TextHorizontalAlignment.center; }
|
||||
Text {
|
||||
text: @tr("Zone");
|
||||
vertical-alignment: TextVerticalAlignment.center;
|
||||
horizontal-alignment: TextHorizontalAlignment.center;
|
||||
}
|
||||
|
||||
ComboBox {
|
||||
enabled: false;
|
||||
// enabled: AuraPageData.led_mode == ;
|
||||
enabled: false;
|
||||
current_index <=> AuraPageData.zone;
|
||||
current_value: AuraPageData.zone_names[self.current-index];
|
||||
model <=> AuraPageData.zone_names;
|
||||
selected => {
|
||||
AuraPageData.apply_effect({
|
||||
mode: AuraPageData.led_mode_data.mode,
|
||||
zone: self.current-index,
|
||||
colour1: AuraPageData.led_mode_data.colour1,
|
||||
colour2: AuraPageData.led_mode_data.colour2,
|
||||
speed: AuraPageData.led_mode_data.speed,
|
||||
direction: AuraPageData.led_mode_data.direction,
|
||||
});
|
||||
AuraPageData.led_mode_data.zone = self.current-index;
|
||||
AuraPageData.cb_led_mode_data(AuraPageData.led_mode_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RogItem {
|
||||
//padding only has effect on layout elements
|
||||
//padding: 0px;
|
||||
VerticalBox {
|
||||
Text { text: @tr("Direction"); vertical-alignment: TextVerticalAlignment.center; horizontal-alignment: TextHorizontalAlignment.center; }
|
||||
Text {
|
||||
text: @tr("Direction");
|
||||
vertical-alignment: TextVerticalAlignment.center;
|
||||
horizontal-alignment: TextHorizontalAlignment.center;
|
||||
}
|
||||
|
||||
ComboBox {
|
||||
enabled: AuraPageData.direction_enabled;
|
||||
enabled: AuraPageData.led_mode == 3;
|
||||
current_index <=> AuraPageData.direction;
|
||||
current_value: AuraPageData.direction_names[self.current-index];
|
||||
model <=> AuraPageData.direction_names;
|
||||
selected => {
|
||||
AuraPageData.apply_effect({
|
||||
mode: AuraPageData.led_mode_data.mode,
|
||||
zone: AuraPageData.led_mode_data.zone,
|
||||
colour1: AuraPageData.led_mode_data.colour1,
|
||||
colour2: AuraPageData.led_mode_data.colour2,
|
||||
speed: AuraPageData.led_mode_data.speed,
|
||||
direction: self.current-index,
|
||||
});
|
||||
AuraPageData.led_mode_data.direction = self.current-index;
|
||||
AuraPageData.cb_led_mode_data(AuraPageData.led_mode_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RogItem {
|
||||
//padding only has effect on layout elements
|
||||
//padding: 0px;
|
||||
VerticalBox {
|
||||
Text { text: @tr("Speed"); vertical-alignment: TextVerticalAlignment.center; horizontal-alignment: TextHorizontalAlignment.center; }
|
||||
Text {
|
||||
text: @tr("Speed");
|
||||
vertical-alignment: TextVerticalAlignment.center;
|
||||
horizontal-alignment: TextHorizontalAlignment.center;
|
||||
}
|
||||
|
||||
ComboBox {
|
||||
enabled: AuraPageData.speed_enabled;
|
||||
enabled: AuraPageData.led_mode == 1 || AuraPageData.led_mode == 2 || AuraPageData.led_mode == 3 || AuraPageData.led_mode == 4 || AuraPageData.led_mode == 5 || AuraPageData.led_mode == 6 || AuraPageData.led_mode == 7 || AuraPageData.led_mode == 8;
|
||||
current_index <=> AuraPageData.speed;
|
||||
current_value: AuraPageData.speed_names[self.current-index];
|
||||
model <=> AuraPageData.speed_names;
|
||||
selected => {
|
||||
AuraPageData.apply_effect({
|
||||
mode: AuraPageData.led_mode_data.mode,
|
||||
zone: AuraPageData.led_mode_data.zone,
|
||||
colour1: AuraPageData.led_mode_data.colour1,
|
||||
colour2: AuraPageData.led_mode_data.colour2,
|
||||
speed: self.current-index,
|
||||
direction: AuraPageData.led_mode_data.direction,
|
||||
});
|
||||
AuraPageData.led_mode_data.speed = self.current-index;
|
||||
AuraPageData.cb_led_mode_data(AuraPageData.led_mode_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -202,7 +205,6 @@ export component PageAura inherits Rectangle {
|
||||
}
|
||||
|
||||
if root.show_aura_power && AuraPageData.device_type == AuraDevType.New: Rectangle {
|
||||
background: Palette.background;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
opacity: 1;
|
||||
@@ -238,54 +240,21 @@ export component PageAura inherits Rectangle {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TUF devices: show the same configurable power groups as `New`, since
|
||||
// `setup_aura` fills `AuraPageData.supported_power_zones` and `led_power`
|
||||
// appropriately for TUF devices. This ensures the Power Settings panel
|
||||
// reflects what the firmware reports for TUF models.
|
||||
if root.show_aura_power && AuraPageData.device_type == AuraDevType.Tuf: Rectangle {
|
||||
background: Palette.background;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
opacity: 1;
|
||||
ScrollView {
|
||||
VerticalLayout {
|
||||
padding: 30px;
|
||||
padding-top: 10px;
|
||||
spacing: 10px;
|
||||
alignment: LayoutAlignment.start;
|
||||
|
||||
for state[idx] in AuraPageData.led_power.states: tuf_zone := AuraPowerGroup {
|
||||
group-title: AuraPageData.power_zone_names[state.zone_name_idx];
|
||||
boot_checked: state.boot;
|
||||
boot_toggled => {
|
||||
AuraPageData.led_power.states[idx].boot = tuf_zone.boot_checked;
|
||||
AuraPageData.cb_led_power(AuraPageData.led_power);
|
||||
}
|
||||
awake_checked: state.awake;
|
||||
awake_toggled => {
|
||||
AuraPageData.led_power.states[idx].awake = tuf_zone.awake_checked;
|
||||
AuraPageData.cb_led_power(AuraPageData.led_power);
|
||||
}
|
||||
sleep_checked: state.sleep;
|
||||
sleep_toggled => {
|
||||
AuraPageData.led_power.states[idx].sleep = tuf_zone.sleep_checked;
|
||||
AuraPageData.cb_led_power(AuraPageData.led_power);
|
||||
}
|
||||
shutdown_checked: state.shutdown;
|
||||
shutdown_toggled => {
|
||||
AuraPageData.led_power.states[idx].shutdown = tuf_zone.shutdown_checked;
|
||||
AuraPageData.cb_led_power(AuraPageData.led_power);
|
||||
}
|
||||
Button {
|
||||
x: root.width - self.width - 6px;
|
||||
y: 6px;
|
||||
text: "X";
|
||||
height: 40px;
|
||||
clicked => {
|
||||
root.show_aura_power = false;
|
||||
root.show_fade_cover = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if root.show_aura_power && AuraPageData.device_type == AuraDevType.Old: Rectangle {
|
||||
background: Palette.background;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
opacity: 1;
|
||||
@@ -324,17 +293,17 @@ export component PageAura inherits Rectangle {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if root.show_aura_power: Button {
|
||||
x: root.width - self.width - 6px;
|
||||
y: 6px;
|
||||
text: "✕";
|
||||
height: 36px;
|
||||
clicked => {
|
||||
root.show_aura_power = false;
|
||||
root.show_fade_cover = false;
|
||||
Button {
|
||||
x: root.width - self.width - 6px;
|
||||
y: 6px;
|
||||
text: "X";
|
||||
height: 40px;
|
||||
clicked => {
|
||||
root.show_aura_power = false;
|
||||
root.show_fade_cover = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,28 +16,20 @@ component FanTab inherits Rectangle {
|
||||
in-out property <[Node]> nodes;
|
||||
|
||||
VerticalLayout {
|
||||
padding: 5px;
|
||||
HorizontalLayout {
|
||||
if root.tab_enabled: Graph {
|
||||
nodes <=> root.nodes;
|
||||
}
|
||||
if !root.tab_enabled: Rectangle {
|
||||
Text {
|
||||
font-size: 16px;
|
||||
font-size: 24px;
|
||||
text: @tr("This fan is not avilable on this machine");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
background: Palette.border;
|
||||
height: 1px;
|
||||
}
|
||||
|
||||
HorizontalLayout {
|
||||
alignment: LayoutAlignment.end;
|
||||
spacing: 10px;
|
||||
padding: 10px;
|
||||
CheckBox {
|
||||
text: @tr("Enabled");
|
||||
checked <=> root.enabled;
|
||||
|
||||
@@ -1,80 +1,102 @@
|
||||
import { Palette, TabWidget, Button, CheckBox, ScrollView } from "std-widgets.slint";
|
||||
import { Palette, TabWidget, Button, CheckBox } from "std-widgets.slint";
|
||||
import { Graph, Node } from "../widgets/graph.slint";
|
||||
import { SystemToggle, SystemDropdown } from "../widgets/common.slint";
|
||||
import { SystemToggle } from "../widgets/common.slint";
|
||||
import { Profile, FanType, FanPageData } from "../types/fan_types.slint";
|
||||
import { Palette, HorizontalBox , VerticalBox, ScrollView, Slider, Button, Switch, ComboBox, GroupBox, StandardButton} from "std-widgets.slint";
|
||||
|
||||
export global GPUPageData {
|
||||
// GPU mode and device state
|
||||
in-out property <int> gpu_mux_mode: 1; // 0 = Ultra/Discreet, 1 = Integrated/Optimus
|
||||
in-out property <int> dgpu_disabled: 0; // 1 == dGPU disabled
|
||||
in-out property <int> egpu_enabled: 0; // 1 == eGPU (XGMobile) enabled
|
||||
in-out property <[string]> gpu_modes_choises: [@tr("Integrated"), @tr("Hybrid")];
|
||||
in-out property <bool> gpu_mux_available: false;
|
||||
callback cb_set_gpu_mode(int);
|
||||
callback cb_gpu_mux_mode(int);
|
||||
callback cb_dgpu_disabled(int);
|
||||
callback cb_egpu_enabled(int);
|
||||
}
|
||||
|
||||
export component PageGPU inherits Rectangle {
|
||||
clip: true;
|
||||
|
||||
clip: true;
|
||||
ScrollView {
|
||||
VerticalLayout {
|
||||
padding: 12px;
|
||||
spacing: 8px;
|
||||
|
||||
padding: 10px;
|
||||
spacing: 10px;
|
||||
alignment: LayoutAlignment.start;
|
||||
Rectangle {
|
||||
background: Palette.alternate-background;
|
||||
border-color: Palette.border;
|
||||
border-width: 1px;
|
||||
border-radius: 2px;
|
||||
height: 36px;
|
||||
border-color: Palette.accent-background;
|
||||
border-width: 3px;
|
||||
border-radius: 10px;
|
||||
height: 40px;
|
||||
Text {
|
||||
font-size: 16px;
|
||||
font-size: 18px;
|
||||
color: Palette.control-foreground;
|
||||
horizontal-alignment: TextHorizontalAlignment.center;
|
||||
text: @tr("Coming Soon: GPU Configuration");
|
||||
text: @tr("GPU Configuration");
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Rectangle {
|
||||
background: Palette.alternate-background;
|
||||
border-color: Palette.border;
|
||||
border-width: 1px;
|
||||
border-radius: 2px;
|
||||
height: 36px;
|
||||
Text {
|
||||
font-size: 16px;
|
||||
color: Palette.control-foreground;
|
||||
horizontal-alignment: TextHorizontalAlignment.center;
|
||||
text: @tr("Internal/Discrete GPU");
|
||||
}
|
||||
}
|
||||
|
||||
HorizontalLayout {
|
||||
padding-right: 10px;
|
||||
padding-left: 10px;
|
||||
alignment: LayoutAlignment.space-between;
|
||||
Rectangle {
|
||||
height: 32px;
|
||||
Text {
|
||||
font-size: 16px;
|
||||
text: @tr("Note: Changes take effect after a reboot. The dropdown always shows the current mode.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
HorizontalLayout {
|
||||
SystemDropdown {
|
||||
text: @tr("GPU mode");
|
||||
model <=> GPUPageData.gpu_modes_choises;
|
||||
current_index <=> GPUPageData.gpu_mux_mode;
|
||||
current_value: GPUPageData.gpu_modes_choises[GPUPageData.gpu_mux_mode];
|
||||
selected => {
|
||||
GPUPageData.cb_set_gpu_mode(GPUPageData.gpu_mux_mode)
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
GroupBox {
|
||||
HorizontalLayout {
|
||||
spacing: 10px;
|
||||
|
||||
// Ultra (discreet) mode button - disabled if dGPU is marked disabled
|
||||
Rectangle {
|
||||
width: 120px;
|
||||
height: 36px;
|
||||
border-radius: 6px;
|
||||
border-color: Palette.border;
|
||||
border-width: 2px;
|
||||
background: GPUPageData.gpu_mux_mode == 0 ? Palette.accent-background : Palette.control-background;
|
||||
opacity: GPUPageData.dgpu_disabled == 1 ? 0.5 : 1.0;
|
||||
|
||||
Text {
|
||||
color: Palette.control-foreground;
|
||||
horizontal-alignment: TextHorizontalAlignment.center;
|
||||
vertical-alignment: TextVerticalAlignment.center;
|
||||
text: @tr("Ultra");
|
||||
}
|
||||
|
||||
TouchArea {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
clicked => {
|
||||
if (GPUPageData.dgpu_disabled != 1 && GPUPageData.gpu_mux_mode != 0) {
|
||||
GPUPageData.cb_gpu_mux_mode(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Integrated (Optimus) mode button
|
||||
Rectangle {
|
||||
width: 120px;
|
||||
height: 36px;
|
||||
border-radius: 6px;
|
||||
border-color: Palette.border;
|
||||
border-width: 2px;
|
||||
background: GPUPageData.gpu_mux_mode == 1 ? Palette.accent-background : Palette.control-background;
|
||||
|
||||
Text {
|
||||
color: Palette.control-foreground;
|
||||
horizontal-alignment: TextHorizontalAlignment.center;
|
||||
vertical-alignment: TextVerticalAlignment.center;
|
||||
text: @tr("Integrated");
|
||||
}
|
||||
|
||||
TouchArea {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
clicked => {
|
||||
if (GPUPageData.gpu_mux_mode != 1) {
|
||||
GPUPageData.cb_gpu_mux_mode(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -51,6 +51,14 @@ export global SystemPageData {
|
||||
callback cb_panel_overdrive(int);
|
||||
in-out property <int> boot_sound;
|
||||
callback cb_boot_sound(int);
|
||||
in-out property <int> kbd_leds_awake;
|
||||
callback cb_kbd_leds_awake(int);
|
||||
in-out property <int> kbd_leds_sleep;
|
||||
callback cb_kbd_leds_sleep(int);
|
||||
in-out property <int> kbd_leds_boot;
|
||||
callback cb_kbd_leds_boot(int);
|
||||
in-out property <int> kbd_leds_shutdown;
|
||||
callback cb_kbd_leds_shutdown(int);
|
||||
in-out property <int> screen_auto_brightness;
|
||||
callback cb_screen_auto_brightness(int);
|
||||
in-out property <int> mcu_powersave;
|
||||
@@ -144,20 +152,21 @@ export component PageSystem inherits Rectangle {
|
||||
property <bool> show_fade_cover: false;
|
||||
property <bool> show_throttle_advanced: false;
|
||||
clip: true;
|
||||
|
||||
//padding only has effect on layout elements
|
||||
//padding: 8px;
|
||||
ScrollView {
|
||||
VerticalLayout {
|
||||
padding: 12px;
|
||||
spacing: 8px;
|
||||
padding: 10px;
|
||||
spacing: 10px;
|
||||
alignment: LayoutAlignment.start;
|
||||
Rectangle {
|
||||
background: Palette.alternate-background;
|
||||
border-color: Palette.border;
|
||||
border-width: 1px;
|
||||
border-radius: 2px;
|
||||
height: 36px;
|
||||
border-color: Palette.accent-background;
|
||||
border-width: 3px;
|
||||
border-radius: 10px;
|
||||
height: 40px;
|
||||
Text {
|
||||
font-size: 16px;
|
||||
font-size: 18px;
|
||||
color: Palette.control-foreground;
|
||||
horizontal-alignment: TextHorizontalAlignment.center;
|
||||
text: @tr("Power settings");
|
||||
@@ -203,11 +212,11 @@ export component PageSystem inherits Rectangle {
|
||||
padding-left: 10px;
|
||||
padding-right: 20px;
|
||||
HorizontalLayout {
|
||||
width: 40%;
|
||||
width: 38%;
|
||||
alignment: LayoutAlignment.space-between;
|
||||
padding-right: 15px;
|
||||
Text {
|
||||
font-size: 14px;
|
||||
font-size: 16px;
|
||||
vertical-alignment: TextVerticalAlignment.center;
|
||||
color: Palette.control-foreground;
|
||||
text: @tr("Screenpad brightness");
|
||||
@@ -231,7 +240,7 @@ export component PageSystem inherits Rectangle {
|
||||
|
||||
HorizontalLayout {
|
||||
width: 20%;
|
||||
padding-left: 14px;
|
||||
padding-left: 10px;
|
||||
alignment: LayoutAlignment.stretch;
|
||||
Switch {
|
||||
text: @tr("Sync with primary");
|
||||
@@ -244,14 +253,74 @@ export component PageSystem inherits Rectangle {
|
||||
}
|
||||
}
|
||||
|
||||
if SystemPageData.kbd_leds_awake != -1 ||
|
||||
SystemPageData.kbd_leds_sleep != -1 ||
|
||||
SystemPageData.kbd_leds_boot != -1 ||
|
||||
SystemPageData.kbd_leds_shutdown != -1: VerticalLayout {
|
||||
padding: 0px;
|
||||
spacing: 0px;
|
||||
alignment: LayoutAlignment.start;
|
||||
Rectangle {
|
||||
background: Palette.alternate-background;
|
||||
border-color: Palette.accent-background;
|
||||
border-width: 3px;
|
||||
border-radius: 10px;
|
||||
height: 40px;
|
||||
Text {
|
||||
font-size: 18px;
|
||||
color: Palette.control-foreground;
|
||||
horizontal-alignment: TextHorizontalAlignment.center;
|
||||
text: @tr("Keyboard Power Management");
|
||||
}
|
||||
}
|
||||
|
||||
GroupBox {
|
||||
|
||||
HorizontalLayout {
|
||||
spacing: 10px;
|
||||
if SystemPageData.kbd_leds_awake != -1: SystemToggleInt {
|
||||
text: @tr("Keyboard Awake Effect");
|
||||
checked_int <=> SystemPageData.kbd_leds_awake;
|
||||
toggled => {
|
||||
SystemPageData.cb_kbd_leds_awake(SystemPageData.kbd_leds_awake)
|
||||
}
|
||||
}
|
||||
|
||||
if SystemPageData.kbd_leds_sleep != -1: SystemToggleInt {
|
||||
text: @tr("Keyboard Sleep Effect");
|
||||
checked_int <=> SystemPageData.kbd_leds_sleep;
|
||||
toggled => {
|
||||
SystemPageData.cb_kbd_leds_sleep(SystemPageData.kbd_leds_sleep)
|
||||
}
|
||||
}
|
||||
|
||||
if SystemPageData.kbd_leds_boot != -1: SystemToggleInt {
|
||||
text: @tr("Keyboard Boot Effect");
|
||||
checked_int <=> SystemPageData.kbd_leds_boot;
|
||||
toggled => {
|
||||
SystemPageData.cb_kbd_leds_boot(SystemPageData.kbd_leds_boot)
|
||||
}
|
||||
}
|
||||
|
||||
if SystemPageData.kbd_leds_shutdown != -1: SystemToggleInt {
|
||||
text: @tr("Keyboard Shutdown Effect");
|
||||
checked_int <=> SystemPageData.kbd_leds_shutdown;
|
||||
toggled => {
|
||||
SystemPageData.cb_kbd_leds_shutdown(SystemPageData.kbd_leds_shutdown)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
background: Palette.alternate-background;
|
||||
border-color: Palette.border;
|
||||
border-width: 1px;
|
||||
border-radius: 2px;
|
||||
height: 36px;
|
||||
border-color: Palette.accent-background;
|
||||
border-width: 3px;
|
||||
border-radius: 10px;
|
||||
height: 40px;
|
||||
Text {
|
||||
font-size: 16px;
|
||||
font-size: 18px;
|
||||
color: Palette.control-foreground;
|
||||
horizontal-alignment: TextHorizontalAlignment.center;
|
||||
text: @tr("Armoury settings");
|
||||
@@ -259,21 +328,19 @@ export component PageSystem inherits Rectangle {
|
||||
}
|
||||
|
||||
if !SystemPageData.asus_armoury_loaded: Rectangle {
|
||||
background: maroon;
|
||||
// background: darkred;
|
||||
border-width: 3px;
|
||||
border-color: red;
|
||||
max-height: 30px;
|
||||
VerticalBox {
|
||||
Text {
|
||||
text: @tr("no_asus_armoury_driver_1" => "The asus-armoury driver is not loaded");
|
||||
font-size: 16px;
|
||||
color: white;
|
||||
horizontal-alignment: TextHorizontalAlignment.center;
|
||||
}
|
||||
|
||||
Text {
|
||||
text: @tr("no_asus_armoury_driver_2" => "For advanced features you will require a kernel with this driver added.");
|
||||
font-size: 16px;
|
||||
color: white;
|
||||
horizontal-alignment: TextHorizontalAlignment.center;
|
||||
}
|
||||
}
|
||||
@@ -516,22 +583,20 @@ export component PageSystem inherits Rectangle {
|
||||
}
|
||||
|
||||
if root.show_throttle_advanced: Rectangle {
|
||||
background: Palette.background;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
opacity: 1;
|
||||
ScrollView {
|
||||
VerticalLayout {
|
||||
alignment: start;
|
||||
padding: 5px;
|
||||
padding-top: 15px;
|
||||
padding: 50px;
|
||||
padding-top: 5px;
|
||||
padding-bottom: 100px;
|
||||
spacing: 10px;
|
||||
GroupBox {
|
||||
VerticalBox {
|
||||
alignment: start;
|
||||
spacing: 10px;
|
||||
Text {
|
||||
font-size: 16px;
|
||||
font-size: 18px;
|
||||
horizontal-alignment: TextHorizontalAlignment.center;
|
||||
vertical-alignment: TextVerticalAlignment.center;
|
||||
text: @tr("Energy Performance Preference linked to Throttle Policy");
|
||||
@@ -566,7 +631,7 @@ export component PageSystem inherits Rectangle {
|
||||
}
|
||||
|
||||
SystemDropdown {
|
||||
text: @tr("EPP for ") + SystemPageData.platform_profile_choices[2] + @tr(" Policy");
|
||||
text: @tr("EPP for Quiet Policy");
|
||||
current_index <=> SystemPageData.profile_quiet_epp;
|
||||
current_value: SystemPageData.energy_performance_choices[SystemPageData.profile_quiet_epp];
|
||||
model <=> SystemPageData.energy_performance_choices;
|
||||
@@ -579,10 +644,9 @@ export component PageSystem inherits Rectangle {
|
||||
|
||||
GroupBox {
|
||||
VerticalBox {
|
||||
alignment: start;
|
||||
spacing: 10px;
|
||||
Text {
|
||||
font-size: 16px;
|
||||
font-size: 18px;
|
||||
horizontal-alignment: TextHorizontalAlignment.center;
|
||||
vertical-alignment: TextVerticalAlignment.center;
|
||||
text: @tr("Throttle Policy for power state");
|
||||
@@ -637,8 +701,8 @@ export component PageSystem inherits Rectangle {
|
||||
Button {
|
||||
x: root.width - self.width - 6px;
|
||||
y: 6px;
|
||||
text: "✕";
|
||||
height: 34px;
|
||||
text: "X";
|
||||
height: 40px;
|
||||
clicked => {
|
||||
root.show_throttle_advanced = false;
|
||||
root.show_fade_cover = false;
|
||||
|
||||
@@ -46,10 +46,8 @@ export struct LaptopAuraPower {
|
||||
states: [AuraPowerState],
|
||||
}
|
||||
|
||||
// Modes with colour1: Static,Breathe,Star,Rain,Highlight,Laser,Ripple,Pulse,Comet,Flash (excl. Strobe,Rainbow,Nothing)
|
||||
// Modes with colour2: Breathe, Star only.
|
||||
// Speed: Breathe,Strobe,Rainbow,Star,Rain,Highlight,Laser,Ripple. Direction: Rainbow only.
|
||||
export global AuraPageData {
|
||||
// The ordering must match the rog-aura crate
|
||||
in-out property <[string]> power_zone_names: [
|
||||
@tr("Aura power zone" => "Logo"),
|
||||
@tr("Aura power zone" => "Keyboard"),
|
||||
@@ -89,9 +87,15 @@ export global AuraPageData {
|
||||
@tr("Basic aura mode" => "Comet"),
|
||||
@tr("Basic aura mode" => "Flash"),
|
||||
];
|
||||
in-out property <[string]> available_mode_names: [ @tr("Basic aura mode" => "Static"), @tr("Basic aura mode" => "Breathe"), @tr("Basic aura mode" => "Strobe") ];
|
||||
in-out property <[string]> available_mode_names: [
|
||||
@tr("Basic aura mode" => "Static"),
|
||||
@tr("Basic aura mode" => "Breathe"),
|
||||
@tr("Basic aura mode" => "Strobe"),
|
||||
];
|
||||
in-out property <int> current_available_mode: 0;
|
||||
in-out property <[int]> supported_basic_modes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12];
|
||||
in-out property <int> led_mode;
|
||||
callback cb_led_mode(int);
|
||||
in-out property <[string]> zone_names: [
|
||||
@tr("Aura zone" => "None"),
|
||||
@tr("Aura zone" => "Key1"),
|
||||
@@ -102,57 +106,51 @@ export global AuraPageData {
|
||||
@tr("Aura zone" => "Lightbar Left"),
|
||||
@tr("Aura zone" => "Lightbar Right"),
|
||||
];
|
||||
in-out property <int> zone;
|
||||
in-out property <[string]> direction_names: [
|
||||
@tr("Aura direction" => "Right"),
|
||||
@tr("Aura direction" => "Left"),
|
||||
@tr("Aura direction" => "Up"),
|
||||
@tr("Aura direction" => "Down"),
|
||||
];
|
||||
in-out property <int> direction;
|
||||
in-out property <[string]> speed_names: [
|
||||
@tr("Aura speed" => "Low"),
|
||||
@tr("Aura speed" => "Medium"),
|
||||
@tr("Aura speed" => "High"),
|
||||
];
|
||||
|
||||
in-out property <int> speed;
|
||||
in-out property <AuraEffect> led_mode_data: {
|
||||
mode: 0,
|
||||
zone: 0,
|
||||
colour1: Colors.aquamarine,
|
||||
colourbox1: Colors.aquamarine,
|
||||
colour2: Colors.hotpink,
|
||||
colourbox2: Colors.hotpink,
|
||||
speed: 0,
|
||||
direction: 0,
|
||||
};
|
||||
callback cb_led_mode_data(AuraEffect);
|
||||
in-out property <color> color1;
|
||||
in-out property <brush> colorbox1;
|
||||
in-out property <color> color2;
|
||||
in-out property <brush> colorbox2;
|
||||
|
||||
out property <bool> colour1_enabled: led_mode_data.mode == 0 || led_mode_data.mode == 1 || led_mode_data.mode == 4 || led_mode_data.mode == 6 || led_mode_data.mode == 7 || led_mode_data.mode == 8 || led_mode_data.mode == 10 || led_mode_data.mode == 11 || led_mode_data.mode == 12;
|
||||
out property <bool> colour2_enabled: led_mode_data.mode == 1 || led_mode_data.mode == 4;
|
||||
out property <bool> speed_enabled: led_mode_data.mode == 1 || led_mode_data.mode == 2 || led_mode_data.mode == 3 || led_mode_data.mode == 4 || led_mode_data.mode == 5 || led_mode_data.mode == 6 || led_mode_data.mode == 7 || led_mode_data.mode == 8;
|
||||
out property <bool> direction_enabled: led_mode_data.mode == 3;
|
||||
|
||||
callback apply_led_mode_data();
|
||||
callback apply_effect(AuraEffect);
|
||||
apply_effect(e) => { led_mode_data = e; apply_led_mode_data(); }
|
||||
in-out property <int> zone;
|
||||
in-out property <int> speed;
|
||||
in-out property <int> direction;
|
||||
|
||||
callback update_led_mode_data(AuraEffect);
|
||||
update_led_mode_data(d) => {
|
||||
led_mode_data = d;
|
||||
zone = d.zone;
|
||||
speed = d.speed;
|
||||
direction = d.direction;
|
||||
color1 = d.colour1;
|
||||
color2 = d.colour2;
|
||||
colorbox1 = d.colour1;
|
||||
colorbox2 = d.colour2;
|
||||
update_led_mode_data(data) => {
|
||||
led_mode_data = data;
|
||||
current_available_mode = data.mode;
|
||||
zone = data.zone;
|
||||
speed = data.speed;
|
||||
direction = data.direction;
|
||||
color1 = data.colour1;
|
||||
color2 = data.colour2;
|
||||
colorbox1 = data.colour1;
|
||||
colorbox2 = data.colour2;
|
||||
}
|
||||
callback cb_hex_from_colour(color) -> string;
|
||||
callback cb_hex_to_colour(string) -> color;
|
||||
in-out property <AuraDevType> device_type: AuraDevType.Old;
|
||||
// List of indexes to power_zone_names. Must correspond to rog-aura crate
|
||||
in-out property <[PowerZones]> supported_power_zones: [
|
||||
PowerZones.Keyboard,
|
||||
PowerZones.Lightbar,
|
||||
|
||||
@@ -4,6 +4,8 @@ import { PowerZones } from "../types/aura_types.slint";
|
||||
|
||||
export component AuraPowerGroup inherits Rectangle {
|
||||
min-width: row.min-width;
|
||||
border-radius: 20px;
|
||||
background: Palette.alternate-background;
|
||||
opacity: 0.9;
|
||||
in-out property <string> group-title;
|
||||
in-out property <bool> boot_checked;
|
||||
@@ -14,7 +16,6 @@ export component AuraPowerGroup inherits Rectangle {
|
||||
callback awake_toggled(bool);
|
||||
callback sleep_toggled(bool);
|
||||
callback shutdown_toggled(bool);
|
||||
|
||||
VerticalBox {
|
||||
spacing: 10px;
|
||||
Text {
|
||||
@@ -27,7 +28,7 @@ export component AuraPowerGroup inherits Rectangle {
|
||||
row := HorizontalBox {
|
||||
alignment: LayoutAlignment.center;
|
||||
SystemToggleVert {
|
||||
min-width: 128px;
|
||||
min-width: 96px;
|
||||
max-height: 42px;
|
||||
text: @tr("Boot");
|
||||
checked <=> root.boot_checked;
|
||||
@@ -37,7 +38,7 @@ export component AuraPowerGroup inherits Rectangle {
|
||||
}
|
||||
|
||||
SystemToggleVert {
|
||||
min-width: 128px;
|
||||
min-width: 96px;
|
||||
max-height: 42px;
|
||||
text: @tr("Awake");
|
||||
checked <=> root.awake_checked;
|
||||
@@ -47,7 +48,7 @@ export component AuraPowerGroup inherits Rectangle {
|
||||
}
|
||||
|
||||
SystemToggleVert {
|
||||
min-width: 128px;
|
||||
min-width: 96px;
|
||||
max-height: 42px;
|
||||
text: @tr("Sleep");
|
||||
checked <=> root.sleep_checked;
|
||||
@@ -57,7 +58,7 @@ export component AuraPowerGroup inherits Rectangle {
|
||||
}
|
||||
|
||||
SystemToggleVert {
|
||||
min-width: 128px;
|
||||
min-width: 96px;
|
||||
max-height: 42px;
|
||||
text: @tr("Shutdown");
|
||||
checked <=> root.shutdown_checked;
|
||||
@@ -71,6 +72,8 @@ export component AuraPowerGroup inherits Rectangle {
|
||||
|
||||
export component AuraPowerGroupOld inherits Rectangle {
|
||||
min-width: row.min-width;
|
||||
border-radius: 20px;
|
||||
background: Palette.alternate-background;
|
||||
opacity: 0.9;
|
||||
in-out property <int> current_zone;
|
||||
in-out property <[int]> zones;
|
||||
@@ -83,7 +86,6 @@ export component AuraPowerGroupOld inherits Rectangle {
|
||||
callback awake_toggled(bool);
|
||||
callback sleep_toggled(bool);
|
||||
callback selected_zone(int);
|
||||
|
||||
VerticalBox {
|
||||
spacing: 10px;
|
||||
Text {
|
||||
@@ -107,7 +109,7 @@ export component AuraPowerGroupOld inherits Rectangle {
|
||||
}
|
||||
|
||||
SystemToggleVert {
|
||||
min-width: 128px;
|
||||
min-width: 96px;
|
||||
max-height: 42px;
|
||||
text: @tr("Boot");
|
||||
checked <=> root.boot_checked;
|
||||
@@ -117,7 +119,7 @@ export component AuraPowerGroupOld inherits Rectangle {
|
||||
}
|
||||
|
||||
SystemToggleVert {
|
||||
min-width: 128px;
|
||||
min-width: 96px;
|
||||
max-height: 42px;
|
||||
text: @tr("Awake");
|
||||
checked <=> root.awake_checked;
|
||||
@@ -127,7 +129,7 @@ export component AuraPowerGroupOld inherits Rectangle {
|
||||
}
|
||||
|
||||
SystemToggleVert {
|
||||
min-width: 128px;
|
||||
min-width: 96px;
|
||||
max-height: 42px;
|
||||
text: @tr("Sleep");
|
||||
checked <=> root.sleep_checked;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Palette, Slider, HorizontalBox, Button, LineEdit } from "std-widgets.slint";
|
||||
|
||||
export component ColourSlider inherits VerticalLayout {
|
||||
spacing: 12px;
|
||||
spacing: 10px;
|
||||
in-out property <bool> enabled;
|
||||
property <string> hex: "#FF0000";
|
||||
in-out property <float> c1value <=> c1.value;
|
||||
@@ -102,9 +102,9 @@ export component ColourSlider inherits VerticalLayout {
|
||||
hex = set_hex_from_colour(final_colour);
|
||||
}
|
||||
Rectangle {
|
||||
height: 28px;
|
||||
border-width: 1px;
|
||||
border-radius: 3px;
|
||||
height: 32px;
|
||||
border-width: 2px;
|
||||
border-radius: 7px;
|
||||
border-color: Palette.border;
|
||||
// 13 colours
|
||||
background: !root.enabled ? Palette.alternate-background : @linear-gradient(90deg, base_colours[0], base_colours[1], base_colours[2], base_colours[3], base_colours[4], base_colours[5], base_colours[6], base_colours[7], base_colours[8], base_colours[9], base_colours[10], base_colours[11], base_colours[12], base_colours[13], base_colours[14], base_colours[15], base_colours[16], base_colours[17], base_colours[18], base_colours[19], base_colours[20], base_colours[21], base_colours[22], base_colours[23], base_colours[24], base_colours[25], base_colours[26], base_colours[27], base_colours[28], base_colours[29], base_colours[30], base_colours[31], base_colours[32], base_colours[33], base_colours[34], base_colours[35]);
|
||||
@@ -127,9 +127,9 @@ export component ColourSlider inherits VerticalLayout {
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
height: 28px;
|
||||
border-width: 1px;
|
||||
border-radius: 3px;
|
||||
height: 32px;
|
||||
border-width: 2px;
|
||||
border-radius: 7px;
|
||||
border-color: Palette.border;
|
||||
// 11 colours
|
||||
background: !root.enabled ? Palette.alternate-background : @linear-gradient(90deg, base_saturation[0], base_saturation[1], base_saturation[2], base_saturation[3], base_saturation[4], base_saturation[5], base_saturation[6], base_saturation[7], base_saturation[8], base_saturation[9], base_saturation[10]);
|
||||
@@ -151,9 +151,9 @@ export component ColourSlider inherits VerticalLayout {
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
height: 28px;
|
||||
border-width: 1px;
|
||||
border-radius: 3px;
|
||||
height: 32px;
|
||||
border-width: 2px;
|
||||
border-radius: 7px;
|
||||
border-color: Palette.border;
|
||||
// 11 colours
|
||||
background: !root.enabled ? Palette.alternate-background : @linear-gradient(90deg, base_value[0], base_value[1], base_value[2], base_value[3], base_value[4], base_value[5], base_value[6], base_value[7], base_value[8], base_value[9], base_value[10]);
|
||||
@@ -191,8 +191,8 @@ export component ColourSlider inherits VerticalLayout {
|
||||
|
||||
Rectangle {
|
||||
width: self.height;
|
||||
border-width: 1px;
|
||||
border-radius: 3px;
|
||||
border-width: 2px;
|
||||
border-radius: 7px;
|
||||
border-color: Palette.border;
|
||||
background <=> root.colourbox;
|
||||
}
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
import { Palette, VerticalBox , StandardButton, Button, HorizontalBox, ComboBox, Switch, Slider} from "std-widgets.slint";
|
||||
|
||||
export component RogItem inherits Rectangle {
|
||||
background: Palette.control-background;
|
||||
border-color: Palette.border;
|
||||
border-width: 1px;
|
||||
border-radius: 2px;
|
||||
min-height: 44px;
|
||||
max-height: 44px;
|
||||
border-width: 3px;
|
||||
border-radius: 10px;
|
||||
min-height: 48px;
|
||||
max-height: 56px;
|
||||
}
|
||||
|
||||
export component SystemSlider inherits RogItem {
|
||||
@@ -29,14 +30,14 @@ export component SystemSlider inherits RogItem {
|
||||
HorizontalLayout {
|
||||
spacing: 6px;
|
||||
Text {
|
||||
font-size: 14px;
|
||||
font-size: 16px;
|
||||
vertical-alignment: TextVerticalAlignment.center;
|
||||
color: Palette.control-foreground;
|
||||
text: root.text;
|
||||
}
|
||||
|
||||
Text {
|
||||
font-size: 14px;
|
||||
font-size: 16px;
|
||||
horizontal-alignment: TextHorizontalAlignment.right;
|
||||
vertical-alignment: TextVerticalAlignment.center;
|
||||
color: Palette.control-foreground;
|
||||
@@ -46,7 +47,7 @@ export component SystemSlider inherits RogItem {
|
||||
}
|
||||
|
||||
HorizontalBox {
|
||||
padding-right: 10px;
|
||||
padding-right: 20px;
|
||||
slider := Slider {
|
||||
enabled: root.enabled;
|
||||
maximum: root.maximum;
|
||||
@@ -161,7 +162,7 @@ export component SystemToggle inherits RogItem {
|
||||
alignment: LayoutAlignment.start;
|
||||
padding-left: 10px;
|
||||
Text {
|
||||
font-size: 14px;
|
||||
font-size: 16px;
|
||||
vertical-alignment: TextVerticalAlignment.center;
|
||||
color: Palette.control-foreground;
|
||||
text: root.text;
|
||||
@@ -192,7 +193,7 @@ export component SystemToggleInt inherits RogItem {
|
||||
alignment: LayoutAlignment.start;
|
||||
padding-left: 10px;
|
||||
Text {
|
||||
font-size: 14px;
|
||||
font-size: 16px;
|
||||
vertical-alignment: TextVerticalAlignment.center;
|
||||
color: Palette.control-foreground;
|
||||
text: root.text;
|
||||
@@ -222,7 +223,7 @@ export component SystemToggleVert inherits RogItem {
|
||||
alignment: LayoutAlignment.space-around;
|
||||
padding-top: 8px;
|
||||
Text {
|
||||
font-size: 14px;
|
||||
font-size: 16px;
|
||||
vertical-alignment: TextVerticalAlignment.bottom;
|
||||
horizontal-alignment: TextHorizontalAlignment.center;
|
||||
color: Palette.control-foreground;
|
||||
@@ -253,7 +254,7 @@ export component SystemDropdown inherits RogItem {
|
||||
alignment: LayoutAlignment.start;
|
||||
padding-left: 10px;
|
||||
Text {
|
||||
font-size: 14px;
|
||||
font-size: 16px;
|
||||
vertical-alignment: TextVerticalAlignment.center;
|
||||
color: Palette.control-foreground;
|
||||
text: root.text;
|
||||
@@ -290,7 +291,11 @@ export component PopupNotification {
|
||||
border-width: 2px;
|
||||
border-color: Palette.accent-background;
|
||||
background: Palette.background;
|
||||
|
||||
// TODO: drop shadows slow
|
||||
// drop-shadow-offset-x: 7px;
|
||||
// drop-shadow-offset-y: 7px;
|
||||
// drop-shadow-color: black;
|
||||
// drop-shadow-blur: 30px;
|
||||
VerticalLayout {
|
||||
Dialog {
|
||||
VerticalLayout {
|
||||
|
||||
@@ -191,11 +191,10 @@ export component Graph inherits Rectangle {
|
||||
tip := Rectangle {
|
||||
background: Palette.control-foreground;
|
||||
opacity: 0.3;
|
||||
border-radius: 12px;
|
||||
x: final_x_pos();
|
||||
y: final_y_pos();
|
||||
width: label.preferred-width + 14px;
|
||||
height: label.preferred-height + 4px;
|
||||
width: label.preferred-width;
|
||||
height: label.preferred-height;
|
||||
function x_pos() -> length {
|
||||
scale_x_to_graph(n.x) - label.preferred-width - 8px
|
||||
}
|
||||
@@ -226,7 +225,7 @@ export component Graph inherits Rectangle {
|
||||
//
|
||||
label := Text {
|
||||
color: Palette.accent-foreground;
|
||||
font-size: 14px;
|
||||
font-size: 16px;
|
||||
text: "\{Math.floor(n.x / 1px)}c, \{fan_pct()}%";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
import { Palette, HorizontalBox, VerticalBox } from "std-widgets.slint";
|
||||
|
||||
component SideBarItem inherits Rectangle {
|
||||
// padding only has effect on layout elements
|
||||
// padding: 10px;
|
||||
in property <bool> selected;
|
||||
in property <bool> has-focus;
|
||||
in-out property <string> text <=> label.text;
|
||||
@@ -24,16 +26,18 @@ component SideBarItem inherits Rectangle {
|
||||
state.opacity: 0.8;
|
||||
}
|
||||
]
|
||||
|
||||
state := Rectangle {
|
||||
opacity: 0;
|
||||
background: Palette.selection-background;
|
||||
border-width: 2px;
|
||||
border-radius: 10px;
|
||||
border-color: Palette.accent-background;
|
||||
background: Palette.alternate-background;
|
||||
animate opacity { duration: 150ms; }
|
||||
animate border-width { duration: 150ms; }
|
||||
height: l.preferred-height;
|
||||
}
|
||||
|
||||
l := HorizontalBox {
|
||||
x: 4px;
|
||||
y: (parent.height - self.height) / 2;
|
||||
spacing: 0px;
|
||||
label := Text {
|
||||
@@ -52,17 +56,20 @@ component SideBarItem inherits Rectangle {
|
||||
export component SideBar inherits Rectangle {
|
||||
in property <[string]> model: [];
|
||||
in property <[bool]> available: [];
|
||||
in property <bool> is_tuf: false;
|
||||
in property <string> title <=> label.text;
|
||||
out property <int> current-item: 0;
|
||||
out property <int> current-focused: fs.has-focus ? fs.focused-tab : -1;
|
||||
|
||||
// The currently focused tab
|
||||
width: 180px;
|
||||
width: 160px;
|
||||
forward-focus: fs;
|
||||
accessible-role: tab;
|
||||
accessible-delegate-focus: root.current-focused >= 0 ? root.current-focused : root.current-item;
|
||||
Rectangle {
|
||||
background: Palette.alternate-background;
|
||||
border-width: 2px;
|
||||
border-color: Palette.accent-background;
|
||||
border-radius: 0px;
|
||||
background: Palette.background.darker(0.2);
|
||||
fs := FocusScope {
|
||||
key-pressed(event) => {
|
||||
if (event.text == "\n") {
|
||||
@@ -95,22 +102,10 @@ export component SideBar inherits Rectangle {
|
||||
|
||||
VerticalBox {
|
||||
spacing: 4px;
|
||||
padding: 0px;
|
||||
alignment: start;
|
||||
|
||||
Image {
|
||||
height: 100px;
|
||||
// TODO: change if TUF on the logo in the menu on the main page
|
||||
// If running on a TUF model, replace the ROG red with TUF orange
|
||||
// (add data/tuf-control-center.png and switch here when available)
|
||||
source: @image-url("../../data/rog-control-center.png");
|
||||
label := Text {
|
||||
font-size: 16px;
|
||||
horizontal-alignment: center;
|
||||
image-fit: contain;
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
height: 1px;
|
||||
background: Palette.border;
|
||||
}
|
||||
|
||||
navigation := VerticalLayout {
|
||||
|
||||
@@ -257,6 +257,7 @@ impl FirmwareAttributes {
|
||||
pub enum FirmwareAttributeType {
|
||||
#[default]
|
||||
Immediate,
|
||||
TUFKeyboard,
|
||||
Ppt,
|
||||
Gpu,
|
||||
Bios,
|
||||
@@ -345,6 +346,11 @@ define_attribute_getters!(
|
||||
panel_hd_mode: Immediate,
|
||||
panel_od: Immediate,
|
||||
|
||||
kbd_leds_awake: TUFKeyboard,
|
||||
kbd_leds_sleep: TUFKeyboard,
|
||||
kbd_leds_boot: TUFKeyboard,
|
||||
kbd_leds_shutdown: TUFKeyboard,
|
||||
|
||||
charge_mode: Immediate,
|
||||
}
|
||||
);
|
||||
@@ -394,6 +400,10 @@ pub enum FirmwareAttribute {
|
||||
PptEnabled = 24,
|
||||
None = 25,
|
||||
ScreenAutoBrightness = 26,
|
||||
KbdLedsAwake = 27,
|
||||
KbdLedsSleep = 28,
|
||||
KbdLedsBoot = 29,
|
||||
KbdLedsShutdown = 30,
|
||||
}
|
||||
|
||||
impl From<&str> for FirmwareAttribute {
|
||||
@@ -415,6 +425,10 @@ impl From<&str> for FirmwareAttribute {
|
||||
"nv_tgp" => Self::DgpuTgp,
|
||||
"charge_mode" => Self::ChargeMode,
|
||||
"boot_sound" => Self::BootSound,
|
||||
"kbd_leds_awake" => Self::KbdLedsAwake,
|
||||
"kbd_leds_sleep" => Self::KbdLedsSleep,
|
||||
"kbd_leds_boot" => Self::KbdLedsBoot,
|
||||
"kbd_leds_shutdown" => Self::KbdLedsShutdown,
|
||||
"mcu_powersave" => Self::McuPowersave,
|
||||
"panel_overdrive" => Self::PanelOverdrive,
|
||||
"panel_hd_mode" => Self::PanelHdMode,
|
||||
@@ -460,6 +474,10 @@ impl From<FirmwareAttribute> for &str {
|
||||
FirmwareAttribute::DgpuDisable => "dgpu_disable",
|
||||
FirmwareAttribute::GpuMuxMode => "gpu_mux_mode",
|
||||
FirmwareAttribute::MiniLedMode => "mini_led_mode",
|
||||
FirmwareAttribute::KbdLedsAwake => "kbd_leds_awake",
|
||||
FirmwareAttribute::KbdLedsSleep => "kbd_leds_sleep",
|
||||
FirmwareAttribute::KbdLedsBoot => "kbd_leds_boot",
|
||||
FirmwareAttribute::KbdLedsShutdown => "kbd_leds_shutdown",
|
||||
FirmwareAttribute::PendingReboot => "pending_reboot",
|
||||
FirmwareAttribute::ScreenAutoBrightness => "screen_auto_brightness",
|
||||
FirmwareAttribute::None => "none",
|
||||
|
||||
@@ -42,9 +42,23 @@ pub struct AniMatrix {
|
||||
|
||||
impl AniMatrix {
|
||||
pub fn new(model: AnimeType) -> Self {
|
||||
let led_shape = LedShape {
|
||||
vertical: 2,
|
||||
horizontal: 5,
|
||||
let led_shape = match model {
|
||||
// TODO: Verify how this reacts on G635L and G835L
|
||||
// These are all doing the same thing. Can be simplified
|
||||
AnimeType::GA401 => LedShape {
|
||||
vertical: 2,
|
||||
horizontal: 5,
|
||||
},
|
||||
AnimeType::GA402 | AnimeType::G635L | AnimeType::G835L | AnimeType::Unsupported => {
|
||||
LedShape {
|
||||
vertical: 2,
|
||||
horizontal: 5,
|
||||
}
|
||||
}
|
||||
AnimeType::GU604 => LedShape {
|
||||
vertical: 2,
|
||||
horizontal: 5,
|
||||
},
|
||||
};
|
||||
|
||||
// Do a hard mapping of each (derived from wireshardk captures)
|
||||
|
||||
Reference in New Issue
Block a user