diff --git a/Cargo.lock b/Cargo.lock index b1ef387d..d3bb39e1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -517,7 +517,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" dependencies = [ - "event-listener 5.4.2", + "event-listener", "event-listener-strategy", "futures-core", "pin-project-lite", @@ -586,7 +586,7 @@ version = "3.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" dependencies = [ - "event-listener 5.4.2", + "event-listener", "event-listener-strategy", "pin-project-lite", ] @@ -604,7 +604,7 @@ dependencies = [ "async-task", "blocking", "cfg-if", - "event-listener 5.4.2", + "event-listener", "futures-lite", "rustix 1.1.4", ] @@ -704,15 +704,6 @@ dependencies = [ "tungstenite", ] -[[package]] -name = "async-watch" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a078faf4e27c0c6cc0efb20e5da59dcccc04968ebf2801d8e0b2195124cdcdb2" -dependencies = [ - "event-listener 2.5.3", -] - [[package]] name = "async_zip" version = "0.0.18" @@ -874,6 +865,12 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" + [[package]] name = "beul" version = "1.0.0" @@ -1142,7 +1139,7 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eec09acab5c2227aba2e592d431708305bdeb6d507703f6cd8983fb57b6c5ef7" dependencies = [ - "base64", + "base64 0.22.1", "cargo-packager-utils", "ctor 0.2.9", "dirs", @@ -1939,12 +1936,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - [[package]] name = "event-listener" version = "5.4.2" @@ -1961,7 +1952,7 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ - "event-listener 5.4.2", + "event-listener", "pin-project-lite", ] @@ -2102,9 +2093,9 @@ dependencies = [ [[package]] name = "freya" -version = "0.5.0-rc.1" +version = "0.5.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d58881053a1b879450514b0cd59031e85057226c77bdf7432265873bd3830e61" +checksum = "7a0902ffd592df176d3088ad001788f9a9438c21c40b4cbdec4dc3ef8bd16247" dependencies = [ "cfg-if", "freya-android", @@ -2126,9 +2117,9 @@ dependencies = [ [[package]] name = "freya-android" -version = "0.5.0-rc.1" +version = "0.5.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfded12bc5487ac3bc4dc45e38daa2d27abfd5ff7d888680e929ddf5ea44cbed" +checksum = "fe3befea9d845539f4428f232ec6b1661a54e974a6e7b852f82fef90d994ccba" dependencies = [ "freya-components", "freya-core", @@ -2140,9 +2131,9 @@ dependencies = [ [[package]] name = "freya-animation" -version = "0.5.0-rc.1" +version = "0.5.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d436ad6d8565b1e42f75eb7d1ec2d914c69475793d104e2eca0ba72d0a4b2cb5" +checksum = "d9f9429ff1e0a793068ebdd4be84c03e722fdfb3d20c8bf3a63a7a875ba0a6de" dependencies = [ "async-io", "easer", @@ -2151,9 +2142,9 @@ dependencies = [ [[package]] name = "freya-clipboard" -version = "0.5.0-rc.1" +version = "0.5.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "133c38b53ab539439d29930a1fe0628180df844457430a8b53863815a22d924e" +checksum = "c8b2076b0a2d040ef2153cdd624dba28a6f4fabd64ca6182b128f642e2423b32" dependencies = [ "copypasta", "freya-core", @@ -2161,9 +2152,9 @@ dependencies = [ [[package]] name = "freya-components" -version = "0.5.0-rc.1" +version = "0.5.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c4874a0c79b5d1248f4dc70aa99a488c2b8721f0548980fa338bfb56f661d5d" +checksum = "bd20c885e7e29f43e0279affea98ae3e1392c9d9f07a09b0ce0fc65d46fc09dc" dependencies = [ "accesskit", "anyhow", @@ -2177,7 +2168,6 @@ dependencies = [ "freya-core", "freya-edit", "freya-engine", - "freya-icons", "freya-router", "freya-sdk", "open", @@ -2190,12 +2180,11 @@ dependencies = [ [[package]] name = "freya-core" -version = "0.5.0-rc.1" +version = "0.5.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "849fbf97eb9e5c842d63d1fe9291a31fcaacb6dba26d4d9ef230d17c08800fc7" +checksum = "4ee644e4c5b4686b4cf59463347df7b64d9eb057c4a251e4528e90a1ecbf707d" dependencies = [ "accesskit", - "async-watch", "bitflags 2.13.1", "bytes 1.11.1", "cursor-icon", @@ -2220,9 +2209,9 @@ dependencies = [ [[package]] name = "freya-edit" -version = "0.5.0-rc.1" +version = "0.5.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f8a3e6e18118ed1f3c240789a0d79b899ab6881542c5c67d8b8f4db3cb7e3f" +checksum = "b0e20601f2d927591cace6bdaf731397908105a572eeaa934b387471bc6cd3b1" dependencies = [ "bitflags 2.13.1", "freya-clipboard", @@ -2235,27 +2224,18 @@ dependencies = [ [[package]] name = "freya-engine" -version = "0.5.0-rc.1" +version = "0.5.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48a6a6f340133481eb2bfe9dd4a18e3ff409288fcce3c0ae44421766403b3a6" +checksum = "95c5ba0dae520d78222758cffdcb335ba9cac6f846721b544fe216d894866b8c" dependencies = [ "freya-skia-safe", ] -[[package]] -name = "freya-icons" -version = "0.5.0-rc.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de6fb3ee664cab1d601d32265218792e86870e9d0adb4dfc00982da7e97706b1" -dependencies = [ - "bytes 1.11.1", -] - [[package]] name = "freya-markdown" -version = "0.5.0-rc.1" +version = "0.5.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4f0cbfd1fe4380c8a6a3ba046186c8a2297d16d982d531b05b9be456649b9b5" +checksum = "94eb6ca3e8f9f18654ff14589c94155d7fa60c697dcbbbf0f02cb0a9e72e538c" dependencies = [ "freya-components", "freya-core", @@ -2265,9 +2245,9 @@ dependencies = [ [[package]] name = "freya-performance-plugin" -version = "0.5.0-rc.1" +version = "0.5.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ece11eccfdbdb4ce337dd6989545ffada4331d8f5b277c18755c9d4342ff800" +checksum = "e2c69c000dd001e2df79a8b9ad0977cc0f835c494d2e17a2848b80495c293fce" dependencies = [ "freya-core", "freya-engine", @@ -2276,9 +2256,9 @@ dependencies = [ [[package]] name = "freya-query" -version = "0.5.0-rc.1" +version = "0.5.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c64093d04e01793f4dfa4f2534d0eb560a02e4a341417fda8db1186fb1c629ce" +checksum = "9db86c4a0dea3ce04df0defa4ce62dad8e7c32bad05090e3644ff6d2f2e0655e" dependencies = [ "async-io", "freya-core", @@ -2287,18 +2267,18 @@ dependencies = [ [[package]] name = "freya-radio" -version = "0.5.0-rc.1" +version = "0.5.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3df935a2d24b8bbdbcaed0b0faf156c6aa86722b42e67b54cac3db7fa8d570ae" +checksum = "35a2458e07d312a2365951a216a8fa14a604159f8ae7702a7ccb2ffbc3fccf0a" dependencies = [ "freya-core", ] [[package]] name = "freya-router" -version = "0.5.0-rc.1" +version = "0.5.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2a12fd1d5f42737ff2b73821ce9ef5b219b58e77c60efe72e304989e6cd85da" +checksum = "f26a8c7b3b3c6432de8d90c01821f5206ab6d6c2c8417fe7b873d7a6586e7580" dependencies = [ "freya-core", "freya-router-macro", @@ -2309,9 +2289,9 @@ dependencies = [ [[package]] name = "freya-router-macro" -version = "0.5.0-rc.1" +version = "0.5.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd179a428cb960df4bd43f8f50bbe5c57c92b86e9875734dfbf2bd6074ceb446" +checksum = "105a54bccebe377d4ce12066813737a0f86e1cc587cdc98c4df92fe48c800be4" dependencies = [ "proc-macro2", "quote", @@ -2321,9 +2301,9 @@ dependencies = [ [[package]] name = "freya-sdk" -version = "0.5.0-rc.1" +version = "0.5.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a78c948db33b22f1804566b5399f210beb8009ddc7ad42d78f50d944eda51663" +checksum = "0fe2c1e80db9c6c782536bf1e8f8e4859ed43359e7c0775c619be8826e16dd18" dependencies = [ "async-io", "freya-core", @@ -2331,9 +2311,9 @@ dependencies = [ [[package]] name = "freya-skia-bindings" -version = "0.98.1" +version = "0.99.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3b9c668f9711350e499fc1f07724f6e66f92379cdbda8f2ba61c3373c857f7" +checksum = "6e65f9ff56a7d08451c839386a86842f065552c561041d0cdcc213390a2361a2" dependencies = [ "bindgen", "cc", @@ -2348,11 +2328,11 @@ dependencies = [ [[package]] name = "freya-skia-safe" -version = "0.98.1" +version = "0.99.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6498ad326bbce161e52567f10f38e53a106bed1e8d575396fce28f5d67a5d311" +checksum = "567c808eff01a4ad7d9d3dc42ce0fb4335dce76a2398d0cd18f1357bf2450c81" dependencies = [ - "base64", + "base64 0.23.1", "bitflags 2.13.1", "freya-skia-bindings", "freya-skia-svg-macros", @@ -2372,9 +2352,9 @@ dependencies = [ [[package]] name = "freya-winit" -version = "0.5.0-rc.1" +version = "0.5.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "273f5eaae2f6561d86c67285c56cd098bceec322169eddfae36e9dce3d52a270" +checksum = "5f3e4172e15aa5bd524db527733fec0ba9ac3e4191388064c9ff0d4f5a23e091" dependencies = [ "accesskit", "accesskit_winit", @@ -2981,7 +2961,7 @@ version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ - "base64", + "base64 0.22.1", "bytes 1.11.1", "futures-channel", "futures-util", @@ -4526,7 +4506,7 @@ dependencies = [ name = "oneclient_auth" version = "2.2.3" dependencies = [ - "base64", + "base64 0.22.1", "chrono", "md-5 0.10.6", "oneclient_common", @@ -4616,7 +4596,7 @@ dependencies = [ "async-trait", "async-tungstenite", "async_zip", - "base64", + "base64 0.22.1", "bytes 1.11.1", "chrono", "digest 0.10.7", @@ -4742,7 +4722,7 @@ dependencies = [ name = "oneclient_mc" version = "2.2.3" dependencies = [ - "base64", + "base64 0.22.1", "chrono", "futures-util", "interfrost", @@ -4915,9 +4895,9 @@ checksum = "35fb2e5f958ec131621fdd531e9fc186ed768cbe395337403ae56c17a74c68ec" [[package]] name = "pathgraph" -version = "0.5.0-rc.1" +version = "0.5.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4520bda5a6ac05d6f8f051eb65cdc647dda6a05cdbb1eb5c65e246423fb060b" +checksum = "e2f33d657119e71a8b28da5c8d52ade41672d873c292ae5bf4833b8fa658c86a" [[package]] name = "percent-encoding" @@ -5343,9 +5323,9 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "ragnarok" -version = "0.5.0-rc.1" +version = "0.5.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fa4dfe7f0fbe3c9d24c9bf9de10b58d44941633e5bfe7937cebb248119e8cad" +checksum = "5c5bbbde00035bdece3362a320eb982f23a57f82bf5f480a74f6aec4aaa01203" dependencies = [ "euclid", "hotpath", @@ -5602,7 +5582,7 @@ version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ - "base64", + "base64 0.22.1", "bytes 1.11.1", "futures-channel", "futures-core", @@ -5646,7 +5626,7 @@ version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62e0021ea2c22aed41653bc7e1419abb2c97e038ff2c33d0e1309e49a97deec0" dependencies = [ - "base64", + "base64 0.22.1", "bytes 1.11.1", "encoding_rs", "futures-channel", @@ -6498,14 +6478,14 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05b44e85bf579a8eeb4ceaa77a3a523baf2bf0e9bac7e40f405d537b5d2d5ccb" dependencies = [ - "base64", + "base64 0.22.1", "bytes 1.11.1", "cfg-if", "chrono", "crc", "crossbeam-queue", "either", - "event-listener 5.4.2", + "event-listener", "futures-core", "futures-intrusive", "futures-io", @@ -6604,7 +6584,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87a2bdd6e83f6b3ea525ca9fee568030508b58355a43d0b2c1674d5f79dcd65e" dependencies = [ "atoi", - "base64", + "base64 0.22.1", "bitflags 2.13.1", "byteorder", "chrono", @@ -7145,9 +7125,9 @@ checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" [[package]] name = "torin" -version = "0.5.0-rc.1" +version = "0.5.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bfa551add6f7c4eee4c7b4b92610b1559d677fc2518802d3b7265be2e53ef43" +checksum = "e4fb54c965056694c8616b9e0a6dfa151207c3599cd0c18f93acdb7172949bee" dependencies = [ "euclid", "itertools 0.14.0", @@ -7433,7 +7413,7 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dea7109cdcd5864d4eeb1b58a1648dc9bf520360d7af16ec26d0a9354bafcfc0" dependencies = [ - "base64", + "base64 0.22.1", "log", "percent-encoding", "rustls", @@ -7449,7 +7429,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e994ba84b0bd1b1b0cf92878b7ef898a5c1760108fe7b6010327e274917a808c" dependencies = [ - "base64", + "base64 0.22.1", "http 1.5.0", "httparse", "log", @@ -8511,7 +8491,7 @@ dependencies = [ "async-trait", "blocking", "enumflags2", - "event-listener 5.4.2", + "event-listener", "futures-core", "futures-lite", "hex", diff --git a/Cargo.toml b/Cargo.toml index 6b7952aa..ab0d1c44 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -136,8 +136,8 @@ syn = {version = "=2.0.117"} thiserror = {version = "=2.0.18"} # ui -freya = {version = "=0.5.0-rc.1", features = ["engine", "winit", "router", "remote-asset", "sdk", "markdown", "query", "radio", "titlebar"]} -freya-skia-safe = "=0.98.1" # required for the SKSL player renderer +freya = {version = "=0.5.0-rc.4", features = ["engine", "winit", "router", "remote-asset", "sdk", "markdown", "query", "radio", "titlebar"]} +freya-skia-safe = "=0.99.1" # required for the SKSL player renderer image = {version = "=0.25.10", default-features = false, features = ["png", "jpeg"]} [profile.release] diff --git a/packages/oneclient_app/src/components/account_switcher.rs b/packages/oneclient_app/src/components/account_switcher.rs index 8e81a335..673b7dbf 100644 --- a/packages/oneclient_app/src/components/account_switcher.rs +++ b/packages/oneclient_app/src/components/account_switcher.rs @@ -179,16 +179,9 @@ impl Component for AccountRow { .maybe(*hovered.read() && !active, |el| { el.background(colors::ghost_overlay_hover()) }) - .on_pointer_enter(move |_| { - hovered.set(true); - if !active { - Cursor::set(CursorIcon::Pointer); - } - }) - .on_pointer_leave(move |_| { - hovered.set(false); - Cursor::set(CursorIcon::default()); - }) + .cursor((!active).then_some(CursorIcon::Pointer)) + .on_pointer_enter(move |_| hovered.set(true)) + .on_pointer_leave(move |_| hovered.set(false)) .on_press(switch) .child( Avatar::new(id.to_string()) diff --git a/packages/oneclient_app/src/components/button.rs b/packages/oneclient_app/src/components/button.rs index a4235be9..8699a010 100644 --- a/packages/oneclient_app/src/components/button.rs +++ b/packages/oneclient_app/src/components/button.rs @@ -251,10 +251,6 @@ impl Component for Button { let cursor_icon = self.cursor_icon; - use_drop(move || { - Cursor::set(CursorIcon::default()); - }); - let palette = variant_colors(self.variant); let background = if !enabled() { @@ -329,21 +325,14 @@ impl Component for Button { hovering.set(false); pressing.set(false); }) - .on_pointer_enter(move |_| { - Cursor::set(cursor_icon); - }) - .on_pointer_leave(move |_| { - Cursor::set(CursorIcon::default()); - }) + .cursor(cursor_icon) .map(on_press.clone(), |rect, handler| { rect.on_all_press(move |event: Event| { handler.call(event); }) }); } else { - rect = rect - .on_pointer_enter(move |_| Cursor::set(CursorIcon::NotAllowed)) - .on_pointer_leave(move |_| Cursor::set(CursorIcon::default())); + rect = rect.cursor(CursorIcon::NotAllowed); } rect diff --git a/packages/oneclient_app/src/components/charts.rs b/packages/oneclient_app/src/components/charts.rs index 3c5a65ce..8e94c22b 100644 --- a/packages/oneclient_app/src/components/charts.rs +++ b/packages/oneclient_app/src/components/charts.rs @@ -357,11 +357,8 @@ impl Component for BarChart { .width(Size::flex(1.0)) .height(Size::fill()) .main_align(Alignment::End) - .on_pointer_enter(move |_| { - *hovered.write() = Some(i); - Cursor::set(CursorIcon::Pointer); - }) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) + .cursor(CursorIcon::Pointer) + .on_pointer_enter(move |_| *hovered.write() = Some(i)) .child( rect() .width(Size::fill()) diff --git a/packages/oneclient_app/src/components/cluster_update_popup.rs b/packages/oneclient_app/src/components/cluster_update_popup.rs index 64df1c52..af99312c 100644 --- a/packages/oneclient_app/src/components/cluster_update_popup.rs +++ b/packages/oneclient_app/src/components/cluster_update_popup.rs @@ -356,8 +356,7 @@ fn cluster_header( .margin(Gaps::new(if first { 0. } else { 8. }, 0., 3., 0.)) .corner_radius(CornerRadius::new_all(8.)) .background(colors::component_bg()) - .on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) + .cursor(CursorIcon::Pointer) .on_press(move |_| open_cluster(&dispatch, cluster_id)) .child( label() diff --git a/packages/oneclient_app/src/components/context_menu.rs b/packages/oneclient_app/src/components/context_menu.rs index c8389f03..a2d1a3eb 100644 --- a/packages/oneclient_app/src/components/context_menu.rs +++ b/packages/oneclient_app/src/components/context_menu.rs @@ -192,14 +192,9 @@ impl Component for ContextMenuRow { } else { Color::TRANSPARENT }) - .on_pointer_enter(move |_| { - hovered.set(true); - Cursor::set(CursorIcon::Pointer); - }) - .on_pointer_leave(move |_| { - hovered.set(false); - Cursor::set(CursorIcon::default()); - }) + .cursor(CursorIcon::Pointer) + .on_pointer_enter(move |_| hovered.set(true)) + .on_pointer_leave(move |_| hovered.set(false)) .on_press(move |_| { on_select.call(()); on_close.call(()); diff --git a/packages/oneclient_app/src/components/log_viewer.rs b/packages/oneclient_app/src/components/log_viewer.rs index 49b18d55..9cad37fc 100644 --- a/packages/oneclient_app/src/components/log_viewer.rs +++ b/packages/oneclient_app/src/components/log_viewer.rs @@ -280,8 +280,7 @@ fn auto_scroll_toggle(mut auto_scroll: State) -> impl IntoElement { } else { colors::component_bg() }) - .on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) + .cursor(CursorIcon::Pointer) .on_press(move |_| auto_scroll.toggle()) .child(Icon::new(IconType::ChevronDown).size(13.).color(if on { colors::brand() diff --git a/packages/oneclient_app/src/components/navbar/app_navbar.rs b/packages/oneclient_app/src/components/navbar/app_navbar.rs index 27b78f3d..76a148a7 100644 --- a/packages/oneclient_app/src/components/navbar/app_navbar.rs +++ b/packages/oneclient_app/src/components/navbar/app_navbar.rs @@ -164,10 +164,6 @@ impl Component for NavLink { let target = self.target.clone(); let nav_label = self.nav_label; - use_drop(move || { - Cursor::set(CursorIcon::default()); - }); - let color = if active || hovering() || focused().is_focused() { theme::colors::fg_primary() } else { @@ -204,8 +200,7 @@ impl Component for NavLink { }) .on_pointer_over(move |_| hovering.set(true)) .on_pointer_out(move |_| hovering.set(false)) - .on_pointer_enter(move |_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(move |_| Cursor::set(CursorIcon::default())) + .cursor(CursorIcon::Pointer) .child( label() .text(nav_label) diff --git a/packages/oneclient_app/src/components/notifications.rs b/packages/oneclient_app/src/components/notifications.rs index 7e56682e..a960a129 100644 --- a/packages/oneclient_app/src/components/notifications.rs +++ b/packages/oneclient_app/src/components/notifications.rs @@ -207,8 +207,7 @@ fn tasks_section(entry: &InboxEntry, mut expanded: State) -> impl IntoElem .horizontal() .cross_align(Alignment::Center) .spacing(6.) - .on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) + .cursor(CursorIcon::Pointer) .on_press(move |_| { let now = !*expanded.peek(); expanded.set(now); diff --git a/packages/oneclient_app/src/components/package_row.rs b/packages/oneclient_app/src/components/package_row.rs index 65c0047b..00b316d4 100644 --- a/packages/oneclient_app/src/components/package_row.rs +++ b/packages/oneclient_app/src/components/package_row.rs @@ -225,8 +225,7 @@ fn grid_card( let package_id = item.package_id.clone(); let package_type_owned = package_type.to_string(); rect() - .on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) + .cursor(CursorIcon::Pointer) .on_press(move |e: Event| { e.stop_propagation(); let _ = RouterContext::get().push(Route::BrowserPackage { @@ -307,8 +306,7 @@ fn grid_card( .background(bg) .border(border_all_color(1.5, border)) .content(Content::Flex) - .on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) + .cursor(CursorIcon::Pointer) .on_press(move |_| on_toggle.call(())) .child(header) .child( @@ -344,15 +342,13 @@ fn package_info( .spacing(12.) .content(Content::Flex) .maybe(remote, |el| { - el.on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) - .on_press(move |_| { - let _ = RouterContext::get().push(Route::BrowserPackage { - cluster_id, - package_type: package_type.clone(), - package_id: format!("{}:{}", provider as u8, package_id), - }); - }) + el.cursor(CursorIcon::Pointer).on_press(move |_| { + let _ = RouterContext::get().push(Route::BrowserPackage { + cluster_id, + package_type: package_type.clone(), + package_id: format!("{}:{}", provider as u8, package_id), + }); + }) }) .child(icon) .child( @@ -528,15 +524,10 @@ fn remove_button( Color::TRANSPARENT }) .maybe(enabled, |el| { - el.on_pointer_enter(move |_| { - hovering.set(true); - Cursor::set(CursorIcon::Pointer); - }) - .on_pointer_leave(move |_| { - hovering.set(false); - Cursor::set(CursorIcon::default()); - }) - .on_press(move |_| on_remove()) + el.cursor(CursorIcon::Pointer) + .on_pointer_enter(move |_| hovering.set(true)) + .on_pointer_leave(move |_| hovering.set(false)) + .on_press(move |_| on_remove()) }) .child(Icon::new(IconType::Trash01).size(14.).color(color)) .into_element() diff --git a/packages/oneclient_app/src/components/player_model.rs b/packages/oneclient_app/src/components/player_model.rs index 70de4f80..23524feb 100644 --- a/packages/oneclient_app/src/components/player_model.rs +++ b/packages/oneclient_app/src/components/player_model.rs @@ -106,19 +106,6 @@ impl Component for PlayerModel { }); let mut drag = use_state(|| None::<(f32, f32, f32, f32)>); - let mut hovering = use_state(|| false); - - // Derive from both states Freya re-emits `pointer enter` after a press which - // would otherwise drop the grabbing cursor as the drag starts - let apply_cursor = move || { - Cursor::set(if drag.peek().is_some() { - CursorIcon::Grabbing - } else if *hovering.peek() { - CursorIcon::Grab - } else { - CursorIcon::default() - }); - }; let mut last_uuid = use_state({ let u = self.uuid.clone(); @@ -168,22 +155,21 @@ impl Component for PlayerModel { ctx.canvas.draw_rect(SkRect::new(0.0, 0.0, w, h), &paint); }); - canvas(render_cb) - .key(src_ptr as u64) + // `canvas` carries no style data, so the cursor rides on a wrapper `rect` that + // covers exactly the same area + rect() .width(self.width.clone()) .height(self.height.clone()) - .on_pointer_enter(move |_| { - hovering.set(true); - apply_cursor(); - }) - .on_pointer_leave(move |_| { - hovering.set(false); - apply_cursor(); - }) + .cursor(CursorIcon::Grab) + .child( + canvas(render_cb) + .key(src_ptr as u64) + .width(Size::fill()) + .height(Size::fill()), + ) .on_pointer_down(move |e: Event| { let loc = e.global_location(); drag.set(Some((loc.x as f32, loc.y as f32, yaw(), pitch()))); - apply_cursor(); }) .on_global_pointer_move(move |e: Event| { let Some((sx, sy, yaw0, pitch0)) = *drag.read() else { @@ -206,7 +192,6 @@ impl Component for PlayerModel { .on_global_pointer_press(move |_: Event| { if drag.peek().is_some() { drag.set(None); - apply_cursor(); } }) } diff --git a/packages/oneclient_app/src/components/screenshot_viewer.rs b/packages/oneclient_app/src/components/screenshot_viewer.rs index cdb65394..2826d06d 100644 --- a/packages/oneclient_app/src/components/screenshot_viewer.rs +++ b/packages/oneclient_app/src/components/screenshot_viewer.rs @@ -191,8 +191,7 @@ fn chevron_btn( } base.background(Color::from_argb(140, 0, 0, 0)) - .on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) + .cursor(CursorIcon::Pointer) .on_press(on_press) .child(Icon::new(icon).size(26.).color(colors::fg_primary())) .into_element() diff --git a/packages/oneclient_app/src/components/segmented_control.rs b/packages/oneclient_app/src/components/segmented_control.rs index 384711a7..917beb31 100644 --- a/packages/oneclient_app/src/components/segmented_control.rs +++ b/packages/oneclient_app/src/components/segmented_control.rs @@ -184,8 +184,7 @@ impl Component for SegmentButton { el.border(border_all_color(1., colors::brand())) }) .maybe(!disabled, |el| { - el.on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) + el.cursor(CursorIcon::Pointer) .on_all_press(move |_| *selected.write() = value) }) .maybe_child(self.icon.map(|icon| { diff --git a/packages/oneclient_app/src/components/status_bar.rs b/packages/oneclient_app/src/components/status_bar.rs index 6b616de8..58dd86c4 100644 --- a/packages/oneclient_app/src/components/status_bar.rs +++ b/packages/oneclient_app/src/components/status_bar.rs @@ -128,9 +128,6 @@ impl Component for StatusBanner { let mut close_hover = use_state(|| false); - // Close unmounts the banner from under the pointer so no `leave` fires - use_drop(|| Cursor::set(CursorIcon::default())); - let close = issue.closeable().then(|| { rect() .center() @@ -142,14 +139,9 @@ impl Component for StatusBanner { } else { Color::TRANSPARENT }) - .on_pointer_enter(move |_| { - close_hover.set(true); - Cursor::set(CursorIcon::Pointer); - }) - .on_pointer_leave(move |_| { - close_hover.set(false); - Cursor::set(CursorIcon::default()); - }) + .cursor(CursorIcon::Pointer) + .on_pointer_enter(move |_| close_hover.set(true)) + .on_pointer_leave(move |_| close_hover.set(false)) .on_press(move |_| { dismissed.write().insert(issue); }) diff --git a/packages/oneclient_app/src/components/tab_bar.rs b/packages/oneclient_app/src/components/tab_bar.rs index 1aa5d327..636748fe 100644 --- a/packages/oneclient_app/src/components/tab_bar.rs +++ b/packages/oneclient_app/src/components/tab_bar.rs @@ -184,8 +184,7 @@ impl Component for TabButton { .a11y_id(a11y_id) .a11y_focusable(true) .a11y_role(AccessibilityRole::Button) - .on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())); + .cursor(CursorIcon::Pointer); if let Some(handler) = self.on_press.clone() { el = el.on_all_press(move |e| handler.call(e)); diff --git a/packages/oneclient_app/src/components/toggle.rs b/packages/oneclient_app/src/components/toggle.rs index cdb6ad63..30adb1d7 100644 --- a/packages/oneclient_app/src/components/toggle.rs +++ b/packages/oneclient_app/src/components/toggle.rs @@ -98,10 +98,6 @@ impl Component for Switch { let text = if on { "On" } else { "Off" }; - use_drop(|| { - Cursor::set(CursorIcon::default()); - }); - rect() .horizontal() .cross_align(Alignment::Center) @@ -110,11 +106,9 @@ impl Component for Switch { .a11y_focusable(!disabled) .a11y_role(AccessibilityRole::Button) .maybe(!disabled, |el| { - el.on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) - .on_all_press(move |_| { - on_press.call(()); - }) + el.cursor(CursorIcon::Pointer).on_all_press(move |_| { + on_press.call(()); + }) }) .child( label() diff --git a/packages/oneclient_app/src/hooks/queries/auth.rs b/packages/oneclient_app/src/hooks/queries/auth.rs index 281d8bf0..487f0fc2 100644 --- a/packages/oneclient_app/src/hooks/queries/auth.rs +++ b/packages/oneclient_app/src/hooks/queries/auth.rs @@ -113,15 +113,13 @@ pub fn try_account(query: &UseQuery) -> Option { } async fn invalidate_auth_queries(account_id: Option) { - QueriesStorage::::try_invalidate_matching(ListAccountsKeys).await; + QueriesStorage::::invalidate_matching(ListAccountsKeys).await; for fallback in [false, true] { - QueriesStorage::::try_invalidate_matching(DefaultAccountKeys { - fallback, - }) - .await; + QueriesStorage::::invalidate_matching(DefaultAccountKeys { fallback }) + .await; } if let Some(id) = account_id { - QueriesStorage::::try_invalidate_matching(AccountKeys { id }).await; + QueriesStorage::::invalidate_matching(AccountKeys { id }).await; } } diff --git a/packages/oneclient_app/src/hooks/queries/image.rs b/packages/oneclient_app/src/hooks/queries/image.rs index 95b997bb..85d2e506 100644 --- a/packages/oneclient_app/src/hooks/queries/image.rs +++ b/packages/oneclient_app/src/hooks/queries/image.rs @@ -45,11 +45,10 @@ pub fn loaded_image(url: Option<&str>, query: &UseQuery) -> Op pub fn use_cached_image(url: Option, max_edge: u32) -> UseQuery { let url = url.unwrap_or_default(); - let enabled = !url.is_empty(); + let keys = (!url.is_empty()).then_some(CachedImageKeys { url, max_edge }); use_query( - Query::new(CachedImageKeys { url, max_edge }, CachedImageQuery) - .enable(enabled) + Query::new(keys, CachedImageQuery) .stale_time(IMAGE_STALE) .clean_time(IMAGE_CLEAN), ) diff --git a/packages/oneclient_app/src/hooks/queries/java.rs b/packages/oneclient_app/src/hooks/queries/java.rs index ddb1a1c9..5c26f125 100644 --- a/packages/oneclient_app/src/hooks/queries/java.rs +++ b/packages/oneclient_app/src/hooks/queries/java.rs @@ -29,7 +29,7 @@ pub fn java_runtimes(query: &UseQuery) -> Vec::try_invalidate_all().await; + QueriesStorage::::invalidate_all().await; } #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] diff --git a/packages/oneclient_app/src/hooks/queries/logs.rs b/packages/oneclient_app/src/hooks/queries/logs.rs index 2fe6ae85..53d1a4b1 100644 --- a/packages/oneclient_app/src/hooks/queries/logs.rs +++ b/packages/oneclient_app/src/hooks/queries/logs.rs @@ -90,8 +90,8 @@ pub fn try_log_content(query: &UseQuery) -> Option } pub async fn invalidate_logs_queries() { - QueriesStorage::::try_invalidate_all().await; - QueriesStorage::::try_invalidate_all().await; + QueriesStorage::::invalidate_all().await; + QueriesStorage::::invalidate_all().await; } #[derive(Clone, Debug, PartialEq, Eq, Hash)] diff --git a/packages/oneclient_app/src/hooks/queries/mutations.rs b/packages/oneclient_app/src/hooks/queries/mutations.rs index cc685c5e..53748ec2 100644 --- a/packages/oneclient_app/src/hooks/queries/mutations.rs +++ b/packages/oneclient_app/src/hooks/queries/mutations.rs @@ -25,12 +25,12 @@ async fn timed(step: &'static str, fut: impl std::future::Future) { pub async fn invalidate_cluster_queries() { let started = std::time::Instant::now(); - timed("cluster_content", QueriesStorage::::try_invalidate_all()).await; - timed("bundle_overrides", QueriesStorage::::try_invalidate_all()).await; - timed("bundles_with_status", QueriesStorage::::try_invalidate_all()).await; - timed("clusters", QueriesStorage::::try_invalidate_all()).await; - timed("bundle_updates", QueriesStorage::::try_invalidate_all()).await; - timed("package_updates", QueriesStorage::::try_invalidate_all()).await; + timed("cluster_content", QueriesStorage::::invalidate_all()).await; + timed("bundle_overrides", QueriesStorage::::invalidate_all()).await; + timed("bundles_with_status", QueriesStorage::::invalidate_all()).await; + timed("clusters", QueriesStorage::::invalidate_all()).await; + timed("bundle_updates", QueriesStorage::::invalidate_all()).await; + timed("package_updates", QueriesStorage::::invalidate_all()).await; tracing::debug!( target: "oneclient_app::perf", ms = started.elapsed().as_millis() as u64, @@ -41,15 +41,15 @@ pub async fn invalidate_cluster_queries() { /// Split out of [`invalidate_cluster_queries`] so an install can wait for just /// this before dropping its busy flag pub async fn invalidate_cluster_content_queries() { - QueriesStorage::::try_invalidate_all().await; + QueriesStorage::::invalidate_all().await; } pub async fn invalidate_profile_queries() { - QueriesStorage::::try_invalidate_all().await; - QueriesStorage::::try_invalidate_all().await; - QueriesStorage::::try_invalidate_all().await; - QueriesStorage::::try_invalidate_all().await; - QueriesStorage::::try_invalidate_all().await; + QueriesStorage::::invalidate_all().await; + QueriesStorage::::invalidate_all().await; + QueriesStorage::::invalidate_all().await; + QueriesStorage::::invalidate_all().await; + QueriesStorage::::invalidate_all().await; } #[derive(Clone, PartialEq, Eq, Hash)] diff --git a/packages/oneclient_app/src/hooks/queries/packages.rs b/packages/oneclient_app/src/hooks/queries/packages.rs index 8e7d0cb5..548276b9 100644 --- a/packages/oneclient_app/src/hooks/queries/packages.rs +++ b/packages/oneclient_app/src/hooks/queries/packages.rs @@ -13,8 +13,6 @@ use oneclient_core::LauncherError; pub const BROWSE_PAGE_SIZE: usize = DEFAULT_PAGE_SIZE; pub const VERSIONS_PAGE_SIZE: usize = 20; -/// The listing asks for one per visible card holding them stops scrolling from -/// refiring a request per card each time it comes back into view const VERSIONS_STALE: Duration = Duration::from_secs(5 * 60); pub fn content_type_for_slug(slug: &str) -> ContentType { @@ -242,8 +240,6 @@ pub fn use_package_versions( use_package_versions_when(true, provider, project_id, game_version, loader, page) } -/// A listing row keeps its install button once installed so the hook still -/// runs there but a request per already-installed row is pure waste pub fn use_package_versions_when( enabled: bool, provider: ProviderId, @@ -252,20 +248,15 @@ pub fn use_package_versions_when( loader: Option, page: usize, ) -> UseQuery { - use_query( - Query::new( - PackageVersionsKeys { - provider, - project_id, - game_version, - loader, - page, - }, - PackageVersionsQuery, - ) - .enable(enabled) - .stale_time(VERSIONS_STALE), - ) + let keys = enabled.then_some(PackageVersionsKeys { + provider, + project_id, + game_version, + loader, + page, + }); + + use_query(Query::new(keys, PackageVersionsQuery).stale_time(VERSIONS_STALE)) } pub fn version_list(query: &UseQuery) -> Vec { diff --git a/packages/oneclient_app/src/hooks/queries/screenshots.rs b/packages/oneclient_app/src/hooks/queries/screenshots.rs index c705959d..c7d2fa1e 100644 --- a/packages/oneclient_app/src/hooks/queries/screenshots.rs +++ b/packages/oneclient_app/src/hooks/queries/screenshots.rs @@ -179,8 +179,8 @@ pub fn try_cluster_screenshots( } pub async fn invalidate_screenshots_queries() { - QueriesStorage::::try_invalidate_all().await; - QueriesStorage::::try_invalidate_all().await; + QueriesStorage::::invalidate_all().await; + QueriesStorage::::invalidate_all().await; } #[derive(Clone, Debug, PartialEq, Eq, Hash)] diff --git a/packages/oneclient_app/src/hooks/queries/storage.rs b/packages/oneclient_app/src/hooks/queries/storage.rs index f5ba2996..4db9e814 100644 --- a/packages/oneclient_app/src/hooks/queries/storage.rs +++ b/packages/oneclient_app/src/hooks/queries/storage.rs @@ -24,8 +24,6 @@ impl QueryCapability for StorageReportQuery { } } -/// The report walks tens of thousands of files and the default zero stale time -/// would rescan the whole tree on every mount The page has a refresh button const STORAGE_STALE_TIME: Duration = Duration::from_secs(120); pub fn use_storage_report() -> UseQuery { @@ -37,7 +35,7 @@ pub fn try_storage_report(query: &UseQuery) -> Option::try_invalidate_all().await; + QueriesStorage::::invalidate_all().await; } #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] diff --git a/packages/oneclient_app/src/layout/settings_shell.rs b/packages/oneclient_app/src/layout/settings_shell.rs index da971183..0700c104 100644 --- a/packages/oneclient_app/src/layout/settings_shell.rs +++ b/packages/oneclient_app/src/layout/settings_shell.rs @@ -484,8 +484,7 @@ fn search_box(mut search: State) -> impl IntoElement { .padding(Gaps::new_symmetric(2., 2.)) .corner_radius(CornerRadius::new_all(6.)) .background(Color::TRANSPARENT) - .on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) + .cursor(CursorIcon::Pointer) .on_press(move |_| search.set(String::new())) .child( Icon::new(IconType::XClose) @@ -570,8 +569,7 @@ fn search_results(query: &SearchQuery, mut search: State) -> Vec) -> impl .background(colors::component_bg()) .border(border_all_color(1., colors::component_border())) .maybe(enabled, |el| { - el.on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) + el.cursor(CursorIcon::Pointer) .on_press(move |_| page.set(target)) }) .child(Icon::new(icon).size(14.).color(if enabled { diff --git a/packages/oneclient_app/src/view/app/browser/package/sidebar.rs b/packages/oneclient_app/src/view/app/browser/package/sidebar.rs index 4aa6a745..04939b5d 100644 --- a/packages/oneclient_app/src/view/app/browser/package/sidebar.rs +++ b/packages/oneclient_app/src/view/app/browser/package/sidebar.rs @@ -207,8 +207,7 @@ impl Component for ProviderTag { .maybe(focused, |el| { el.border(border_all_color(1., colors::brand())) }) - .on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) + .cursor(CursorIcon::Pointer) .on_all_press(move |_| confirm.set(Some(url.clone()))) }) } @@ -302,8 +301,7 @@ impl Component for AuthorRow { el.a11y_id(a11y_id) .a11y_focusable(true) .a11y_role(AccessibilityRole::Button) - .on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) + .cursor(CursorIcon::Pointer) .on_all_press(move |_| confirm.set(Some(url.clone()))) }) .maybe(interactive && focused, |el| { @@ -440,8 +438,7 @@ impl Component for LinkRow { .maybe(focused, |el| { el.border(border_all_color(1., colors::brand())) }) - .on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) + .cursor(CursorIcon::Pointer) .on_all_press(move |_| confirm.set(Some(url.clone()))) .child( Icon::new(IconType::Link03) diff --git a/packages/oneclient_app/src/view/app/cluster/logs.rs b/packages/oneclient_app/src/view/app/cluster/logs.rs index 332bf38a..39725181 100644 --- a/packages/oneclient_app/src/view/app/cluster/logs.rs +++ b/packages/oneclient_app/src/view/app/cluster/logs.rs @@ -424,8 +424,7 @@ impl Component for LogPicker { colors::component_border() }, )) - .on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) + .cursor(CursorIcon::Pointer) .on_all_press(move |e: Event| { e.stop_propagation(); open.toggle(); @@ -553,14 +552,9 @@ impl Component for PickerRow { } else { Color::TRANSPARENT }) - .on_pointer_enter(move |_| { - hovering.set(true); - Cursor::set(CursorIcon::Pointer); - }) - .on_pointer_leave(move |_| { - hovering.set(false); - Cursor::set(CursorIcon::default()); - }) + .cursor(CursorIcon::Pointer) + .on_pointer_enter(move |_| hovering.set(true)) + .on_pointer_leave(move |_| hovering.set(false)) .on_all_press(self.on_press.clone()) .child( rect() diff --git a/packages/oneclient_app/src/view/app/cluster/package_manager/views.rs b/packages/oneclient_app/src/view/app/cluster/package_manager/views.rs index 056c9fe2..c5b789e4 100644 --- a/packages/oneclient_app/src/view/app/cluster/package_manager/views.rs +++ b/packages/oneclient_app/src/view/app/cluster/package_manager/views.rs @@ -472,8 +472,7 @@ impl Component for ChoiceRow { .maybe(focused, |el| { el.border(crate::ui::border_all_color(1., colors::brand())) }) - .on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) + .cursor(CursorIcon::Pointer) .on_all_press(self.on_press.clone()) .child( label() diff --git a/packages/oneclient_app/src/view/app/cluster/screenshots.rs b/packages/oneclient_app/src/view/app/cluster/screenshots.rs index 7a6670fc..4236ee15 100644 --- a/packages/oneclient_app/src/view/app/cluster/screenshots.rs +++ b/packages/oneclient_app/src/view/app/cluster/screenshots.rs @@ -445,14 +445,9 @@ impl Component for ScreenshotTile { .background(CARD_BG) .overflow(Overflow::Clip) .border(border_all_color(1., border_color).alignment(BorderAlignment::Inner)) - .on_pointer_enter(move |_| { - hovered.set(true); - Cursor::set(CursorIcon::Pointer); - }) - .on_pointer_leave(move |_| { - hovered.set(false); - Cursor::set(CursorIcon::default()); - }) + .cursor(CursorIcon::Pointer) + .on_pointer_enter(move |_| hovered.set(true)) + .on_pointer_leave(move |_| hovered.set(false)) .on_press(move |_| on_activate.call(())) .on_secondary_down(move |e: Event| { if let PressEventData::Mouse(m) = e.data() { @@ -540,14 +535,9 @@ impl Component for ScreenshotRow { colors::component_border() }, )) - .on_pointer_enter(move |_| { - hovered.set(true); - Cursor::set(CursorIcon::Pointer); - }) - .on_pointer_leave(move |_| { - hovered.set(false); - Cursor::set(CursorIcon::default()); - }) + .cursor(CursorIcon::Pointer) + .on_pointer_enter(move |_| hovered.set(true)) + .on_pointer_leave(move |_| hovered.set(false)) .on_press(move |_| on_activate.call(())) .on_secondary_down(move |e: Event| { if let PressEventData::Mouse(m) = e.data() { diff --git a/packages/oneclient_app/src/view/app/settings/changelog.rs b/packages/oneclient_app/src/view/app/settings/changelog.rs index 40e59626..3c78dfa3 100644 --- a/packages/oneclient_app/src/view/app/settings/changelog.rs +++ b/packages/oneclient_app/src/view/app/settings/changelog.rs @@ -112,10 +112,6 @@ impl Component for ReleaseCard { let changes = self.changes.clone(); - use_drop(|| { - Cursor::set(CursorIcon::default()); - }); - rect() .vertical() .width(Size::fill()) @@ -129,8 +125,7 @@ impl Component for ReleaseCard { .width(Size::fill()) .cross_align(Alignment::Center) .main_align(Alignment::SpaceBetween) - .on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) + .cursor(CursorIcon::Pointer) .on_press(move |_| { let next = !*open.peek(); *open.write() = next; diff --git a/packages/oneclient_app/src/view/app/settings/language.rs b/packages/oneclient_app/src/view/app/settings/language.rs index 02483963..809e7b8d 100644 --- a/packages/oneclient_app/src/view/app/settings/language.rs +++ b/packages/oneclient_app/src/view/app/settings/language.rs @@ -39,8 +39,7 @@ fn language_row( .padding(Gaps::new_symmetric(12., 16.)) .corner_radius(CornerRadius::new_all(12.)) .background(colors::page_elevated()) - .on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) + .cursor(CursorIcon::Pointer) .on_press(move |_| *selected.write() = index) .child( rect() diff --git a/packages/oneclient_app/src/view/app/skins.rs b/packages/oneclient_app/src/view/app/skins.rs index b9f4b395..5ea92368 100644 --- a/packages/oneclient_app/src/view/app/skins.rs +++ b/packages/oneclient_app/src/view/app/skins.rs @@ -77,8 +77,7 @@ fn anim_chip(name: &'static str, active: bool) -> impl IntoElement { } else { colors::component_bg() }) - .on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) + .cursor(CursorIcon::Pointer) .child( label() .text(name) @@ -158,8 +157,7 @@ fn skin_grid(count: usize) -> impl IntoElement { colors::component_border() }, )) - .on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) + .cursor(CursorIcon::Pointer) .child( Icon::new(IconType::Users01) .size(24.) diff --git a/packages/oneclient_app/src/view/onboarding/bundles/row.rs b/packages/oneclient_app/src/view/onboarding/bundles/row.rs index ec165bcc..479bf341 100644 --- a/packages/oneclient_app/src/view/onboarding/bundles/row.rs +++ b/packages/oneclient_app/src/view/onboarding/bundles/row.rs @@ -105,8 +105,7 @@ impl Component for OnboardingModCard { .border(border_all_color(1.5, border)) .content(Content::Flex) .a11y_role(AccessibilityRole::Button) - .on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) + .cursor(CursorIcon::Pointer) .on_press(move |_| on_toggle.call(())) .child(header) .child( diff --git a/packages/oneclient_app/src/view/onboarding/language.rs b/packages/oneclient_app/src/view/onboarding/language.rs index 7166f534..c34b0e39 100644 --- a/packages/oneclient_app/src/view/onboarding/language.rs +++ b/packages/oneclient_app/src/view/onboarding/language.rs @@ -101,8 +101,7 @@ fn language_row( el.border(border_all_color(1., colors::brand())) }) .a11y_role(AccessibilityRole::Button) - .on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) + .cursor(CursorIcon::Pointer) .on_press(move |_| { selected.set(index); chosen.set(name.to_string()); diff --git a/packages/oneclient_app/src/view/onboarding/migration.rs b/packages/oneclient_app/src/view/onboarding/migration.rs index a5c577a9..b09f74c0 100644 --- a/packages/oneclient_app/src/view/onboarding/migration.rs +++ b/packages/oneclient_app/src/view/onboarding/migration.rs @@ -304,8 +304,7 @@ fn version_card( if importable { card = card .a11y_role(AccessibilityRole::Button) - .on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) + .cursor(CursorIcon::Pointer) .on_press(move |_| on_select(())); } @@ -368,8 +367,7 @@ fn import_choice_card( .background(bg) .border(border_all_color(1., border_color)) .a11y_role(AccessibilityRole::Button) - .on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) + .cursor(CursorIcon::Pointer) .on_press(move |_| on_press(())) .child( rect() diff --git a/packages/oneclient_app/src/view/onboarding/mod.rs b/packages/oneclient_app/src/view/onboarding/mod.rs index 811bad42..9abb4f19 100644 --- a/packages/oneclient_app/src/view/onboarding/mod.rs +++ b/packages/oneclient_app/src/view/onboarding/mod.rs @@ -260,8 +260,7 @@ pub(crate) fn choice_row_sized( .corner_radius(CornerRadius::new_all(8.)) .border(border_all_color(1., border_color)) .a11y_role(AccessibilityRole::Button) - .on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) + .cursor(CursorIcon::Pointer) .on_press(move |_| on_press(())) .child( rect() @@ -316,8 +315,7 @@ pub(crate) fn version_chip( .background(bg) .border(border_all_color(1.5, border)) .a11y_role(AccessibilityRole::Button) - .on_pointer_enter(|_| Cursor::set(CursorIcon::Pointer)) - .on_pointer_leave(|_| Cursor::set(CursorIcon::default())) + .cursor(CursorIcon::Pointer) .on_press(move |_| on_press(())) .child( label()