From 79dbc66e5b6b055a2f8722198b7faf319e114a05 Mon Sep 17 00:00:00 2001 From: PolyMeilex Date: Sat, 16 Dec 2023 03:30:58 +0100 Subject: [PATCH] Update winit to 0.29 --- Cargo.lock | 700 ++++++++++-------- neothesia/Cargo.toml | 4 +- neothesia/src/iced_utils/iced_conversion.rs | 509 ++++--------- neothesia/src/main.rs | 99 +-- neothesia/src/scene/menu_scene/mod.rs | 2 +- neothesia/src/scene/playing_scene/mod.rs | 59 +- .../scene/playing_scene/rewind_controller.rs | 26 +- neothesia/src/utils/window.rs | 13 +- 8 files changed, 647 insertions(+), 765 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 91c33439..dc5b3b83 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -40,6 +40,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" dependencies = [ "cfg-if", + "getrandom", "once_cell", "version_check", "zerocopy", @@ -84,20 +85,23 @@ dependencies = [ [[package]] name = "android-activity" -version = "0.4.3" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64529721f27c2314ced0890ce45e469574a73e5e6fdd6e9da1860eb29285f5e0" +checksum = "052ad56e336bcc615a214bffbeca6c181ee9550acec193f0327e0b103b033a4d" dependencies = [ "android-properties", - "bitflags 1.3.2", + "bitflags 2.4.1", "cc", + "cesu8", + "jni 0.21.1", "jni-sys", "libc", "log", - "ndk", + "ndk 0.8.0", "ndk-context", - "ndk-sys", - "num_enum 0.6.1", + "ndk-sys 0.5.0+25.2.9519653", + "num_enum 0.7.1", + "thiserror", ] [[package]] @@ -136,6 +140,12 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +[[package]] +name = "as-raw-xcb-connection" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d5f312b0a56c5cdf967c0aeb67f6289603354951683bc97ddc595ab974ba9aa" + [[package]] name = "ash" version = "0.37.3+1.3.251" @@ -145,35 +155,6 @@ dependencies = [ "libloading 0.7.4", ] -[[package]] -name = "async-io" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" -dependencies = [ - "async-lock", - "autocfg", - "cfg-if", - "concurrent-queue", - "futures-lite", - "log", - "parking", - "polling", - "rustix 0.37.27", - "slab", - "socket2", - "waker-fn", -] - -[[package]] -name = "async-lock" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" -dependencies = [ - "event-listener", -] - [[package]] name = "async-thread" version = "0.1.2" @@ -185,9 +166,9 @@ dependencies = [ [[package]] name = "atk-sys" -version = "0.16.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ad703eb64dc058024f0e57ccfa069e15a413b98dbd50a1a950e743b7f11148" +checksum = "251e0b7d90e33e0ba930891a505a9a35ece37b2dd37a14f3ffc306c13b980009" dependencies = [ "glib-sys", "gobject-sys", @@ -195,6 +176,12 @@ dependencies = [ "system-deps", ] +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "autocfg" version = "1.1.0" @@ -306,21 +293,21 @@ checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" [[package]] name = "block-sys" -version = "0.1.0-beta.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146" +checksum = "2dd7cf50912cddc06dc5ea7c08c5e81c1b2c842a70d19def1848d54c586fed92" dependencies = [ "objc-sys", ] [[package]] name = "block2" -version = "0.2.0-alpha.6" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dd9e63c1744f755c2f60332b88de39d341e5e86239014ad839bd71c106dec42" +checksum = "15b55663a85f33501257357e6421bb33e769d5c9ffb5ba0921c975a123e35e68" dependencies = [ "block-sys", - "objc2-encode", + "objc2", ] [[package]] @@ -369,9 +356,9 @@ checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" [[package]] name = "cairo-sys-rs" -version = "0.16.3" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c48f4af05fabdcfa9658178e1326efa061853f040ce7d72e33af6885196f421" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" dependencies = [ "libc", "system-deps", @@ -379,16 +366,28 @@ dependencies = [ [[package]] name = "calloop" -version = "0.10.6" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e0d00eb1ea24371a97d2da6201c6747a633dc6dc1988ef503403b4c59504a8" +checksum = "7b50b5a44d59a98c55a9eeb518f39bf7499ba19fd98ee7d22618687f3f10adbf" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.1", "log", - "nix 0.25.1", - "slotmap", + "polling", + "rustix", + "slab", "thiserror", - "vec_map", +] + +[[package]] +name = "calloop-wayland-source" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f0ea9b9476c7fad82841a8dbb380e2eae480c21910feba80725b46931ed8f02" +dependencies = [ + "calloop", + "rustix", + "wayland-backend 0.3.2", + "wayland-client 0.31.1", ] [[package]] @@ -459,7 +458,7 @@ dependencies = [ "block", "cocoa-foundation", "core-foundation", - "core-graphics", + "core-graphics 0.22.3", "foreign-types 0.3.2", "libc", "objc", @@ -549,6 +548,19 @@ dependencies = [ "libc", ] +[[package]] +name = "core-graphics" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "970a29baf4110c26fedbc7f82107d42c23f7e88e404c4577ed73fe99ff85a212" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-graphics-types", + "foreign-types 0.5.0", + "libc", +] + [[package]] name = "core-graphics-types" version = "0.1.3" @@ -635,7 +647,7 @@ dependencies = [ "js-sys", "libc", "mach2", - "ndk", + "ndk 0.7.0", "ndk-context", "oboe", "once_cell", @@ -694,6 +706,12 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +[[package]] +name = "cursor-icon" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" + [[package]] name = "d3d12" version = "0.7.0" @@ -792,12 +810,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 = "exr" version = "1.6.4" @@ -1027,21 +1039,6 @@ version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" -[[package]] -name = "futures-lite" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" -dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] - [[package]] name = "futures-macro" version = "0.3.29" @@ -1085,9 +1082,9 @@ dependencies = [ [[package]] name = "gdk-pixbuf-sys" -version = "0.16.3" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3092cf797a5f1210479ea38070d9ae8a5b8e9f8f1be9f32f4643c529c7d70016" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" dependencies = [ "gio-sys", "glib-sys", @@ -1098,9 +1095,9 @@ dependencies = [ [[package]] name = "gdk-sys" -version = "0.16.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76354f97a913e55b984759a997b693aa7dc71068c9e98bcce51aa167a0a5c5a" +checksum = "31ff856cb3386dae1703a920f803abafcc580e9b5f711ca62ed1620c25b51ff2" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", @@ -1132,6 +1129,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "gethostname" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb65d4ba3173c56a500b555b532f72c42e8d1fe64962b518897f8959fae2c177" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "getrandom" version = "0.2.11" @@ -1163,9 +1170,9 @@ checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "gio-sys" -version = "0.16.3" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" dependencies = [ "glib-sys", "gobject-sys", @@ -1193,9 +1200,9 @@ checksum = "b5418c17512bdf42730f9032c74e1ae39afc408745ebb2acf72fbc4691c17945" [[package]] name = "glib-sys" -version = "0.16.3" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" dependencies = [ "libc", "system-deps", @@ -1241,9 +1248,9 @@ dependencies = [ [[package]] name = "gobject-sys" -version = "0.16.3" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" dependencies = [ "glib-sys", "libc", @@ -1305,9 +1312,9 @@ dependencies = [ [[package]] name = "gtk-sys" -version = "0.16.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b5f8946685d5fe44497007786600c2f368ff6b1e61a16251c89f72a97520a3" +checksum = "771437bf1de2c1c0b496c11505bdf748e26066bbe942dfc8f614c9460f6d7722" dependencies = [ "atk-sys", "cairo-sys-rs", @@ -1400,7 +1407,7 @@ dependencies = [ "log", "num-traits", "palette", - "raw-window-handle", + "raw-window-handle 0.5.2", "thiserror", "xxhash-rust", ] @@ -1432,7 +1439,7 @@ dependencies = [ "kamadak-exif", "log", "once_cell", - "raw-window-handle", + "raw-window-handle 0.5.2", "rustc-hash", "thiserror", "unicode-segmentation", @@ -1448,7 +1455,7 @@ dependencies = [ "iced_tiny_skia", "iced_wgpu", "log", - "raw-window-handle", + "raw-window-handle 0.5.2", "thiserror", ] @@ -1482,10 +1489,10 @@ dependencies = [ "iced_graphics", "kurbo", "log", - "raw-window-handle", + "raw-window-handle 0.5.2", "rustc-hash", "softbuffer", - "tiny-skia 0.11.3", + "tiny-skia", "xxhash-rust", ] @@ -1503,7 +1510,7 @@ dependencies = [ "iced_graphics", "log", "once_cell", - "raw-window-handle", + "raw-window-handle 0.5.2", "wgpu", ] @@ -1520,6 +1527,17 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "icrate" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d3aaff8a54577104bafdf686ff18565c3b6903ca5782a2026ef06e2c7aa319" +dependencies = [ + "block2", + "dispatch", + "objc2", +] + [[package]] name = "image" version = "0.24.7" @@ -1556,9 +1574,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" dependencies = [ "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", ] [[package]] @@ -1579,7 +1594,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" dependencies = [ "hermit-abi", - "rustix 0.38.26", + "rustix", "windows-sys 0.48.0", ] @@ -1611,6 +1626,22 @@ dependencies = [ "walkdir", ] +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", + "windows-sys 0.45.0", +] + [[package]] name = "jni-sys" version = "0.3.0" @@ -1740,12 +1771,6 @@ dependencies = [ "redox_syscall 0.4.1", ] -[[package]] -name = "linux-raw-sys" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" - [[package]] name = "linux-raw-sys" version = "0.4.12" @@ -1803,18 +1828,18 @@ checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" [[package]] name = "memmap2" -version = "0.5.10" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +checksum = "43a5a03cefb0d953ec0be133036f14e109412fa594edc2f77227249db66cc3ed" dependencies = [ "libc", ] [[package]] name = "memmap2" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a5a03cefb0d953ec0be133036f14e109412fa594edc2f77227249db66cc3ed" +checksum = "deaba38d7abf1d4cca21cc89e932e542ba2b9258664d2a9ef0e61512039c9375" dependencies = [ "libc", ] @@ -1917,18 +1942,6 @@ dependencies = [ "simd-adler32", ] -[[package]] -name = "mio" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" -dependencies = [ - "libc", - "log", - "wasi", - "windows-sys 0.48.0", -] - [[package]] name = "mpeg_encoder" version = "0.2.1" @@ -1980,9 +1993,25 @@ checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" dependencies = [ "bitflags 1.3.2", "jni-sys", - "ndk-sys", + "ndk-sys 0.4.1+23.1.7779620", "num_enum 0.5.11", - "raw-window-handle", + "raw-window-handle 0.5.2", + "thiserror", +] + +[[package]] +name = "ndk" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" +dependencies = [ + "bitflags 2.4.1", + "jni-sys", + "log", + "ndk-sys 0.5.0+25.2.9519653", + "num_enum 0.7.1", + "raw-window-handle 0.5.2", + "raw-window-handle 0.6.0", "thiserror", ] @@ -2001,6 +2030,15 @@ dependencies = [ "jni-sys", ] +[[package]] +name = "ndk-sys" +version = "0.5.0+25.2.9519653" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" +dependencies = [ + "jni-sys", +] + [[package]] name = "neothesia" version = "0.1.0" @@ -2070,7 +2108,6 @@ dependencies = [ "bitflags 1.3.2", "cfg-if", "libc", - "memoffset 0.6.5", ] [[package]] @@ -2217,11 +2254,11 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.6.1" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" +checksum = "683751d591e6d81200c39fb0d1032608b77724f34114db54f571ff1317b337c0" dependencies = [ - "num_enum_derive 0.6.1", + "num_enum_derive 0.7.1", ] [[package]] @@ -2238,9 +2275,9 @@ dependencies = [ [[package]] name = "num_enum_derive" -version = "0.6.1" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" +checksum = "6c11e44798ad209ccdd91fc192f0526a369a01234f7373e1b141c96d7cee4f0e" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2271,29 +2308,25 @@ dependencies = [ [[package]] name = "objc-sys" -version = "0.2.0-beta.2" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7" +checksum = "c7c71324e4180d0899963fc83d9d241ac39e699609fc1025a850aadac8257459" [[package]] name = "objc2" -version = "0.3.0-beta.3.patch-leaks.3" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e01640f9f2cb1220bbe80325e179e532cb3379ebcd1bf2279d703c19fe3a468" +checksum = "559c5a40fdd30eb5e344fbceacf7595a81e242529fb4e21cf5f43fb4f11ff98d" dependencies = [ - "block2", "objc-sys", "objc2-encode", ] [[package]] name = "objc2-encode" -version = "2.0.0-pre.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abfcac41015b00a120608fdaa6938c44cb983fee294351cc4bac7638b4e50512" -dependencies = [ - "objc-sys", -] +checksum = "d079845b37af429bfe5dfa76e6d087d788031045b25cfc6fd898486fd9847666" [[package]] name = "objc_exception" @@ -2329,7 +2362,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8868cc237ee02e2d9618539a23a8d228b9bb3fc2e7a5b11eed3831de77c395d0" dependencies = [ "jni 0.20.0", - "ndk", + "ndk 0.7.0", "ndk-context", "num-derive", "num-traits", @@ -2412,9 +2445,9 @@ dependencies = [ [[package]] name = "pango-sys" -version = "0.16.3" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e134909a9a293e04d2cc31928aa95679c5e4df954d0b85483159bd20d8f047f" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" dependencies = [ "glib-sys", "gobject-sys", @@ -2422,12 +2455,6 @@ dependencies = [ "system-deps", ] -[[package]] -name = "parking" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" - [[package]] name = "parking_lot" version = "0.11.2" @@ -2593,18 +2620,16 @@ dependencies = [ [[package]] name = "polling" -version = "2.8.0" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +checksum = "cf63fa624ab313c11656b4cda960bfc46c410187ad493c41f6ba2d8c1e991c9e" dependencies = [ - "autocfg", - "bitflags 1.3.2", "cfg-if", "concurrent-queue", - "libc", - "log", "pin-project-lite", - "windows-sys 0.48.0", + "rustix", + "tracing", + "windows-sys 0.52.0", ] [[package]] @@ -2656,6 +2681,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "quick-xml" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" +dependencies = [ + "memchr", +] + [[package]] name = "quote" version = "1.0.33" @@ -2698,6 +2732,12 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" +[[package]] +name = "raw-window-handle" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42a9830a0e1b9fb145ebb365b8bc4ccd75f290f98c0247deafbbe2c75cefb544" + [[package]] name = "rayon" version = "1.8.0" @@ -2782,14 +2822,12 @@ checksum = "216080ab382b992234dda86873c18d4c48358f5cfcb70fd693d7f6f2131b628b" [[package]] name = "rfd" -version = "0.11.4" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fe664af397d2b6a13a8ba1d172a2b5c87c6c5149039edbf8fa122b98c9ed96f" +checksum = "3c9e7b57df6e8472152674607f6cc68aa14a748a3157a857a94f516e11aeacc2" dependencies = [ - "async-io", "block", "dispatch", - "futures-util", "glib-sys", "gobject-sys", "gtk-sys", @@ -2798,11 +2836,11 @@ dependencies = [ "objc", "objc-foundation", "objc_id", - "raw-window-handle", + "raw-window-handle 0.5.2", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "windows 0.44.0", + "windows-sys 0.48.0", ] [[package]] @@ -2844,20 +2882,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" -[[package]] -name = "rustix" -version = "0.37.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" -dependencies = [ - "bitflags 1.3.2", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys 0.3.8", - "windows-sys 0.48.0", -] - [[package]] name = "rustix" version = "0.38.26" @@ -2867,7 +2891,7 @@ dependencies = [ "bitflags 2.4.1", "errno", "libc", - "linux-raw-sys 0.4.12", + "linux-raw-sys", "windows-sys 0.52.0", ] @@ -2911,15 +2935,15 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sctk-adwaita" -version = "0.5.4" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda4e97be1fd174ccc2aae81c8b694e803fa99b34e8fd0f057a9d70698e3ed09" +checksum = "1729a30a469de249c6effc17ec8d039b0aa29b3af79b819b7f51cb6ab8046a90" dependencies = [ "ab_glyph", "log", - "memmap2 0.5.10", + "memmap2 0.9.0", "smithay-client-toolkit", - "tiny-skia 0.8.4", + "tiny-skia", ] [[package]] @@ -3001,31 +3025,36 @@ checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" [[package]] name = "smithay-client-toolkit" -version = "0.16.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "870427e30b8f2cbe64bf43ec4b86e88fe39b0a84b3f15efd9c9c2d020bc86eb9" +checksum = "60e3d9941fa3bacf7c2bf4b065304faa14164151254cd16ce1b1bc8fc381600f" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.1", "calloop", - "dlib", - "lazy_static", + "calloop-wayland-source", + "cursor-icon", + "libc", "log", - "memmap2 0.5.10", - "nix 0.24.3", - "pkg-config", - "wayland-client 0.29.5", + "memmap2 0.9.0", + "rustix", + "thiserror", + "wayland-backend 0.3.2", + "wayland-client 0.31.1", + "wayland-csd-frame", "wayland-cursor", "wayland-protocols", + "wayland-protocols-wlr", + "wayland-scanner 0.31.0", + "xkeysym", ] [[package]] -name = "socket2" -version = "0.4.10" +name = "smol_str" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +checksum = "74212e6bbe9a4352329b2f68ba3130c15a3f26fe88ff22dbdc6cdd58fa85e99c" dependencies = [ - "libc", - "winapi", + "serde", ] [[package]] @@ -3037,23 +3066,23 @@ dependencies = [ "bytemuck", "cfg_aliases", "cocoa", - "core-graphics", + "core-graphics 0.22.3", "fastrand", "foreign-types 0.3.2", "log", "nix 0.26.4", "objc", - "raw-window-handle", + "raw-window-handle 0.5.2", "redox_syscall 0.3.5", "thiserror", "wasm-bindgen", - "wayland-backend", + "wayland-backend 0.1.2", "wayland-client 0.30.2", "wayland-sys 0.30.1", "web-sys", "windows-sys 0.48.0", "x11-dl", - "x11rb", + "x11rb 0.11.1", ] [[package]] @@ -3202,20 +3231,6 @@ dependencies = [ "weezl", ] -[[package]] -name = "tiny-skia" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df8493a203431061e901613751931f047d1971337153f96d0e5e363d6dbf6a67" -dependencies = [ - "arrayref", - "arrayvec", - "bytemuck", - "cfg-if", - "png", - "tiny-skia-path 0.8.4", -] - [[package]] name = "tiny-skia" version = "0.11.3" @@ -3228,18 +3243,7 @@ dependencies = [ "cfg-if", "log", "png", - "tiny-skia-path 0.11.3", -] - -[[package]] -name = "tiny-skia-path" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adbfb5d3f3dd57a0e11d12f4f13d4ebbbc1b5c15b7ab0a156d030b21da5f677c" -dependencies = [ - "arrayref", - "bytemuck", - "strict-num", + "tiny-skia-path", ] [[package]] @@ -3313,6 +3317,22 @@ dependencies = [ "winnow", ] +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" + [[package]] name = "ttf-parser" version = "0.19.2" @@ -3391,12 +3411,6 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" -[[package]] -name = "vec_map" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" - [[package]] name = "version-compare" version = "0.1.1" @@ -3409,12 +3423,6 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" -[[package]] -name = "waker-fn" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" - [[package]] name = "walkdir" version = "2.4.0" @@ -3528,19 +3536,17 @@ dependencies = [ ] [[package]] -name = "wayland-client" -version = "0.29.5" +name = "wayland-backend" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f3b068c05a039c9f755f881dc50f01732214f5685e379829759088967c46715" +checksum = "19152ddd73f45f024ed4534d9ca2594e0ef252c1847695255dae47f34df9fbe4" dependencies = [ - "bitflags 1.3.2", + "cc", "downcast-rs", - "libc", - "nix 0.24.3", + "nix 0.26.4", "scoped-tls", - "wayland-commons", - "wayland-scanner 0.29.5", - "wayland-sys 0.29.5", + "smallvec", + "wayland-sys 0.31.1", ] [[package]] @@ -3551,87 +3557,125 @@ checksum = "489c9654770f674fc7e266b3c579f4053d7551df0ceb392f153adb1f9ed06ac8" dependencies = [ "bitflags 1.3.2", "nix 0.26.4", - "wayland-backend", + "wayland-backend 0.1.2", "wayland-scanner 0.30.1", ] [[package]] -name = "wayland-commons" -version = "0.29.5" +name = "wayland-client" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902" +checksum = "1ca7d52347346f5473bf2f56705f360e8440873052e575e55890c4fa57843ed3" dependencies = [ - "nix 0.24.3", - "once_cell", - "smallvec", - "wayland-sys 0.29.5", + "bitflags 2.4.1", + "nix 0.26.4", + "wayland-backend 0.3.2", + "wayland-scanner 0.31.0", +] + +[[package]] +name = "wayland-csd-frame" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" +dependencies = [ + "bitflags 2.4.1", + "cursor-icon", + "wayland-backend 0.3.2", ] [[package]] name = "wayland-cursor" -version = "0.29.5" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6865c6b66f13d6257bef1cd40cbfe8ef2f150fb8ebbdb1e8e873455931377661" +checksum = "a44aa20ae986659d6c77d64d808a046996a932aa763913864dc40c359ef7ad5b" dependencies = [ - "nix 0.24.3", - "wayland-client 0.29.5", + "nix 0.26.4", + "wayland-client 0.31.1", "xcursor", ] [[package]] name = "wayland-protocols" -version = "0.29.5" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b950621f9354b322ee817a23474e479b34be96c2e909c14f7bc0100e9a970bc6" +checksum = "e253d7107ba913923dc253967f35e8561a3c65f914543e46843c88ddd729e21c" dependencies = [ - "bitflags 1.3.2", - "wayland-client 0.29.5", - "wayland-commons", - "wayland-scanner 0.29.5", + "bitflags 2.4.1", + "wayland-backend 0.3.2", + "wayland-client 0.31.1", + "wayland-scanner 0.31.0", +] + +[[package]] +name = "wayland-protocols-plasma" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23803551115ff9ea9bce586860c5c5a971e360825a0309264102a9495a5ff479" +dependencies = [ + "bitflags 2.4.1", + "wayland-backend 0.3.2", + "wayland-client 0.31.1", + "wayland-protocols", + "wayland-scanner 0.31.0", +] + +[[package]] +name = "wayland-protocols-wlr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6" +dependencies = [ + "bitflags 2.4.1", + "wayland-backend 0.3.2", + "wayland-client 0.31.1", + "wayland-protocols", + "wayland-scanner 0.31.0", ] [[package]] name = "wayland-scanner" -version = "0.29.5" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53" +checksum = "b9b873b257fbc32ec909c0eb80dea312076a67014e65e245f5eb69a6b8ab330e" dependencies = [ "proc-macro2", + "quick-xml 0.28.2", "quote", - "xml-rs", ] [[package]] name = "wayland-scanner" -version = "0.30.1" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9b873b257fbc32ec909c0eb80dea312076a67014e65e245f5eb69a6b8ab330e" +checksum = "fb8e28403665c9f9513202b7e1ed71ec56fde5c107816843fb14057910b2c09c" dependencies = [ "proc-macro2", - "quick-xml", + "quick-xml 0.30.0", "quote", ] [[package]] name = "wayland-sys" -version = "0.29.5" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be12ce1a3c39ec7dba25594b97b42cb3195d54953ddb9d3d95a7c3902bc6e9d4" +checksum = "96b2a02ac608e07132978689a6f9bf4214949c85998c247abadd4f4129b1aa06" dependencies = [ "dlib", "lazy_static", + "log", "pkg-config", ] [[package]] name = "wayland-sys" -version = "0.30.1" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b2a02ac608e07132978689a6f9bf4214949c85998c247abadd4f4129b1aa06" +checksum = "15a0c8eaff5216d07f226cb7a549159267f3467b289d9a2e52fd3ef5aae2b7af" dependencies = [ "dlib", - "lazy_static", "log", + "once_cell", "pkg-config", ] @@ -3645,6 +3689,16 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "web-time" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57099a701fb3a8043f993e8228dc24229c7b942e2b009a1b962e54489ba1d3bf" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "weezl" version = "0.1.7" @@ -3665,7 +3719,7 @@ dependencies = [ "naga", "parking_lot 0.12.1", "profiling", - "raw-window-handle", + "raw-window-handle 0.5.2", "smallvec", "static_assertions", "wasm-bindgen", @@ -3690,7 +3744,7 @@ dependencies = [ "naga", "parking_lot 0.12.1", "profiling", - "raw-window-handle", + "raw-window-handle 0.5.2", "rustc-hash", "smallvec", "thiserror", @@ -3731,7 +3785,7 @@ dependencies = [ "parking_lot 0.12.1", "profiling", "range-alloc", - "raw-window-handle", + "raw-window-handle 0.5.2", "renderdoc-sys", "rustc-hash", "smallvec", @@ -3748,7 +3802,7 @@ version = "0.1.0" dependencies = [ "bytemuck", "log", - "raw-window-handle", + "raw-window-handle 0.5.2", "wgpu", ] @@ -3824,15 +3878,6 @@ dependencies = [ "windows_x86_64_msvc 0.42.2", ] -[[package]] -name = "windows" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" -dependencies = [ - "windows-targets 0.42.2", -] - [[package]] name = "windows" version = "0.46.0" @@ -4061,37 +4106,51 @@ checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" [[package]] name = "winit" -version = "0.28.7" +version = "0.29.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9596d90b45384f5281384ab204224876e8e8bf7d58366d9b795ad99aa9894b94" +checksum = "d25d662bb83b511acd839534bb2d88521b0bbc81440969cb077d23c4db9e62c7" dependencies = [ + "ahash", "android-activity", - "bitflags 1.3.2", + "atomic-waker", + "bitflags 2.4.1", + "bytemuck", + "calloop", "cfg_aliases", "core-foundation", - "core-graphics", - "dispatch", - "instant", + "core-graphics 0.23.1", + "cursor-icon", + "icrate", + "js-sys", "libc", "log", - "mio", - "ndk", + "memmap2 0.9.0", + "ndk 0.8.0", + "ndk-sys 0.5.0+25.2.9519653", "objc2", "once_cell", "orbclient", "percent-encoding", - "raw-window-handle", + "raw-window-handle 0.5.2", + "raw-window-handle 0.6.0", "redox_syscall 0.3.5", + "rustix", "sctk-adwaita", "smithay-client-toolkit", + "smol_str", + "unicode-segmentation", "wasm-bindgen", - "wayland-client 0.29.5", - "wayland-commons", + "wasm-bindgen-futures", + "wayland-backend 0.3.2", + "wayland-client 0.31.1", "wayland-protocols", - "wayland-scanner 0.29.5", + "wayland-protocols-plasma", "web-sys", - "windows-sys 0.45.0", + "web-time", + "windows-sys 0.48.0", "x11-dl", + "x11rb 0.12.0", + "xkbcommon-dl", ] [[package]] @@ -4120,14 +4179,31 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdf3c79412dd91bae7a7366b8ad1565a85e35dd049affc3a6a2c549e97419617" dependencies = [ - "gethostname", + "gethostname 0.2.3", "libc", "libloading 0.7.4", "nix 0.25.1", "once_cell", "winapi", "winapi-wsapoll", - "x11rb-protocol", + "x11rb-protocol 0.11.1", +] + +[[package]] +name = "x11rb" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1641b26d4dec61337c35a1b1aaf9e3cba8f46f0b43636c609ab0291a648040a" +dependencies = [ + "as-raw-xcb-connection", + "gethostname 0.3.0", + "libc", + "libloading 0.7.4", + "nix 0.26.4", + "once_cell", + "winapi", + "winapi-wsapoll", + "x11rb-protocol 0.12.0", ] [[package]] @@ -4139,6 +4215,15 @@ dependencies = [ "nix 0.25.1", ] +[[package]] +name = "x11rb-protocol" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d6c3f9a0fb6701fab8f6cea9b0c0bd5d6876f1f89f7fada07e558077c344bc" +dependencies = [ + "nix 0.26.4", +] + [[package]] name = "xcursor" version = "0.3.4" @@ -4148,6 +4233,25 @@ dependencies = [ "nom", ] +[[package]] +name = "xkbcommon-dl" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6924668544c48c0133152e7eec86d644a056ca3d09275eb8d5cdb9855f9d8699" +dependencies = [ + "bitflags 2.4.1", + "dlib", + "log", + "once_cell", + "xkeysym", +] + +[[package]] +name = "xkeysym" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "054a8e68b76250b253f671d1268cb7f1ae089ec35e195b2efb2a4e9a836d0621" + [[package]] name = "xml-rs" version = "0.8.19" diff --git a/neothesia/Cargo.toml b/neothesia/Cargo.toml index 26fc2327..c1da7406 100644 --- a/neothesia/Cargo.toml +++ b/neothesia/Cargo.toml @@ -27,8 +27,8 @@ wgpu-jumpstart = { workspace = true } neothesia-core = { workspace = true } piano-math = { workspace = true } -winit = "0.28.2" -rfd = "0.11.2" +winit = { version = "0.29.4", features = ["rwh_05"] } +rfd = "0.12.1" async-thread = "0.1" cpal = { version = "0.15.0", optional = true } diff --git a/neothesia/src/iced_utils/iced_conversion.rs b/neothesia/src/iced_utils/iced_conversion.rs index 5ca2a618..2b8fd7b9 100644 --- a/neothesia/src/iced_utils/iced_conversion.rs +++ b/neothesia/src/iced_utils/iced_conversion.rs @@ -44,9 +44,9 @@ pub enum Mode { /// Converts a winit window event into an iced event. pub fn window_event( - event: &winit::event::WindowEvent<'_>, + event: &winit::event::WindowEvent, scale_factor: f64, - modifiers: winit::event::ModifiersState, + modifiers: winit::keyboard::ModifiersState, ) -> Option { use winit::event::WindowEvent; @@ -64,17 +64,6 @@ pub fn window_event( }, )) } - WindowEvent::ScaleFactorChanged { new_inner_size, .. } => { - let logical_size = new_inner_size.to_logical(scale_factor); - - Some(Event::Window( - id, - window::Event::Resized { - width: logical_size.width, - height: logical_size.height, - }, - )) - } WindowEvent::CloseRequested => Some(Event::Window(id, window::Event::CloseRequested)), WindowEvent::CursorMoved { position, .. } => { let position = position.to_logical::(scale_factor); @@ -111,19 +100,17 @@ pub fn window_event( })) } }, - WindowEvent::ReceivedCharacter(c) if !is_private_use_character(*c) => { - Some(Event::Keyboard(keyboard::Event::CharacterReceived(*c))) - } WindowEvent::KeyboardInput { - input: - winit::event::KeyboardInput { - virtual_keycode: Some(virtual_keycode), + event: + winit::event::KeyEvent { + logical_key, state, + // text, .. }, .. } => Some(Event::Keyboard({ - let key_code = key_code(*virtual_keycode); + let key_code = key_code(logical_key); let modifiers = self::modifiers(modifiers); match state { @@ -138,7 +125,7 @@ pub fn window_event( } })), WindowEvent::ModifiersChanged(new_modifiers) => Some(Event::Keyboard( - keyboard::Event::ModifiersChanged(self::modifiers(*new_modifiers)), + keyboard::Event::ModifiersChanged(self::modifiers(new_modifiers.state())), )), WindowEvent::Focused(focused) => Some(Event::Window( id, @@ -239,7 +226,7 @@ pub fn mouse_interaction(interaction: mouse::Interaction) -> winit::window::Curs match interaction { Interaction::Idle => winit::window::CursorIcon::Default, - Interaction::Pointer => winit::window::CursorIcon::Hand, + Interaction::Pointer => winit::window::CursorIcon::Pointer, Interaction::Working => winit::window::CursorIcon::Progress, Interaction::Grab => winit::window::CursorIcon::Grab, Interaction::Grabbing => winit::window::CursorIcon::Grabbing, @@ -260,6 +247,10 @@ pub fn mouse_button(mouse_button: winit::event::MouseButton) -> mouse::Button { winit::event::MouseButton::Left => mouse::Button::Left, winit::event::MouseButton::Right => mouse::Button::Right, winit::event::MouseButton::Middle => mouse::Button::Middle, + winit::event::MouseButton::Back => mouse::Button::Other(0), + winit::event::MouseButton::Forward => mouse::Button::Other(0), + // winit::event::MouseButton::Back => mouse::Button::Back, + // winit::event::MouseButton::Forward => mouse::Button::Forward, winit::event::MouseButton::Other(other) => mouse::Button::Other(other), } } @@ -269,13 +260,13 @@ pub fn mouse_button(mouse_button: winit::event::MouseButton) -> mouse::Button { /// /// [`winit`]: https://github.com/rust-windowing/winit /// [`iced_native`]: https://github.com/hecrj/iced/tree/master/native -pub fn modifiers(modifiers: winit::event::ModifiersState) -> keyboard::Modifiers { +pub fn modifiers(modifiers: winit::keyboard::ModifiersState) -> keyboard::Modifiers { let mut result = keyboard::Modifiers::empty(); - result.set(keyboard::Modifiers::SHIFT, modifiers.shift()); - result.set(keyboard::Modifiers::CTRL, modifiers.ctrl()); - result.set(keyboard::Modifiers::ALT, modifiers.alt()); - result.set(keyboard::Modifiers::LOGO, modifiers.logo()); + result.set(keyboard::Modifiers::SHIFT, modifiers.shift_key()); + result.set(keyboard::Modifiers::CTRL, modifiers.control_key()); + result.set(keyboard::Modifiers::ALT, modifiers.alt_key()); + result.set(keyboard::Modifiers::LOGO, modifiers.super_key()); result } @@ -307,356 +298,128 @@ pub fn touch_event(touch: winit::event::Touch, scale_factor: f64) -> touch::Even } } -/// Converts a `KeyCode` from [`iced_native`] to an [`winit`] key code. -/// -/// [`winit`]: https://github.com/rust-windowing/winit -/// [`iced_native`]: https://github.com/hecrj/iced/tree/master/native -fn to_virtual_keycode(keycode: keyboard::KeyCode) -> winit::event::VirtualKeyCode { - use keyboard::KeyCode; - use winit::event::VirtualKeyCode; - - match keycode { - KeyCode::Key1 => VirtualKeyCode::Key1, - KeyCode::Key2 => VirtualKeyCode::Key2, - KeyCode::Key3 => VirtualKeyCode::Key3, - KeyCode::Key4 => VirtualKeyCode::Key4, - KeyCode::Key5 => VirtualKeyCode::Key5, - KeyCode::Key6 => VirtualKeyCode::Key6, - KeyCode::Key7 => VirtualKeyCode::Key7, - KeyCode::Key8 => VirtualKeyCode::Key8, - KeyCode::Key9 => VirtualKeyCode::Key9, - KeyCode::Key0 => VirtualKeyCode::Key0, - KeyCode::A => VirtualKeyCode::A, - KeyCode::B => VirtualKeyCode::B, - KeyCode::C => VirtualKeyCode::C, - KeyCode::D => VirtualKeyCode::D, - KeyCode::E => VirtualKeyCode::E, - KeyCode::F => VirtualKeyCode::F, - KeyCode::G => VirtualKeyCode::G, - KeyCode::H => VirtualKeyCode::H, - KeyCode::I => VirtualKeyCode::I, - KeyCode::J => VirtualKeyCode::J, - KeyCode::K => VirtualKeyCode::K, - KeyCode::L => VirtualKeyCode::L, - KeyCode::M => VirtualKeyCode::M, - KeyCode::N => VirtualKeyCode::N, - KeyCode::O => VirtualKeyCode::O, - KeyCode::P => VirtualKeyCode::P, - KeyCode::Q => VirtualKeyCode::Q, - KeyCode::R => VirtualKeyCode::R, - KeyCode::S => VirtualKeyCode::S, - KeyCode::T => VirtualKeyCode::T, - KeyCode::U => VirtualKeyCode::U, - KeyCode::V => VirtualKeyCode::V, - KeyCode::W => VirtualKeyCode::W, - KeyCode::X => VirtualKeyCode::X, - KeyCode::Y => VirtualKeyCode::Y, - KeyCode::Z => VirtualKeyCode::Z, - KeyCode::Escape => VirtualKeyCode::Escape, - KeyCode::F1 => VirtualKeyCode::F1, - KeyCode::F2 => VirtualKeyCode::F2, - KeyCode::F3 => VirtualKeyCode::F3, - KeyCode::F4 => VirtualKeyCode::F4, - KeyCode::F5 => VirtualKeyCode::F5, - KeyCode::F6 => VirtualKeyCode::F6, - KeyCode::F7 => VirtualKeyCode::F7, - KeyCode::F8 => VirtualKeyCode::F8, - KeyCode::F9 => VirtualKeyCode::F9, - KeyCode::F10 => VirtualKeyCode::F10, - KeyCode::F11 => VirtualKeyCode::F11, - KeyCode::F12 => VirtualKeyCode::F12, - KeyCode::F13 => VirtualKeyCode::F13, - KeyCode::F14 => VirtualKeyCode::F14, - KeyCode::F15 => VirtualKeyCode::F15, - KeyCode::F16 => VirtualKeyCode::F16, - KeyCode::F17 => VirtualKeyCode::F17, - KeyCode::F18 => VirtualKeyCode::F18, - KeyCode::F19 => VirtualKeyCode::F19, - KeyCode::F20 => VirtualKeyCode::F20, - KeyCode::F21 => VirtualKeyCode::F21, - KeyCode::F22 => VirtualKeyCode::F22, - KeyCode::F23 => VirtualKeyCode::F23, - KeyCode::F24 => VirtualKeyCode::F24, - KeyCode::Snapshot => VirtualKeyCode::Snapshot, - KeyCode::Scroll => VirtualKeyCode::Scroll, - KeyCode::Pause => VirtualKeyCode::Pause, - KeyCode::Insert => VirtualKeyCode::Insert, - KeyCode::Home => VirtualKeyCode::Home, - KeyCode::Delete => VirtualKeyCode::Delete, - KeyCode::End => VirtualKeyCode::End, - KeyCode::PageDown => VirtualKeyCode::PageDown, - KeyCode::PageUp => VirtualKeyCode::PageUp, - KeyCode::Left => VirtualKeyCode::Left, - KeyCode::Up => VirtualKeyCode::Up, - KeyCode::Right => VirtualKeyCode::Right, - KeyCode::Down => VirtualKeyCode::Down, - KeyCode::Backspace => VirtualKeyCode::Back, - KeyCode::Enter => VirtualKeyCode::Return, - KeyCode::Space => VirtualKeyCode::Space, - KeyCode::Compose => VirtualKeyCode::Compose, - KeyCode::Caret => VirtualKeyCode::Caret, - KeyCode::Numlock => VirtualKeyCode::Numlock, - KeyCode::Numpad0 => VirtualKeyCode::Numpad0, - KeyCode::Numpad1 => VirtualKeyCode::Numpad1, - KeyCode::Numpad2 => VirtualKeyCode::Numpad2, - KeyCode::Numpad3 => VirtualKeyCode::Numpad3, - KeyCode::Numpad4 => VirtualKeyCode::Numpad4, - KeyCode::Numpad5 => VirtualKeyCode::Numpad5, - KeyCode::Numpad6 => VirtualKeyCode::Numpad6, - KeyCode::Numpad7 => VirtualKeyCode::Numpad7, - KeyCode::Numpad8 => VirtualKeyCode::Numpad8, - KeyCode::Numpad9 => VirtualKeyCode::Numpad9, - KeyCode::AbntC1 => VirtualKeyCode::AbntC1, - KeyCode::AbntC2 => VirtualKeyCode::AbntC2, - KeyCode::NumpadAdd => VirtualKeyCode::NumpadAdd, - KeyCode::Plus => VirtualKeyCode::Plus, - KeyCode::Apostrophe => VirtualKeyCode::Apostrophe, - KeyCode::Apps => VirtualKeyCode::Apps, - KeyCode::At => VirtualKeyCode::At, - KeyCode::Ax => VirtualKeyCode::Ax, - KeyCode::Backslash => VirtualKeyCode::Backslash, - KeyCode::Calculator => VirtualKeyCode::Calculator, - KeyCode::Capital => VirtualKeyCode::Capital, - KeyCode::Colon => VirtualKeyCode::Colon, - KeyCode::Comma => VirtualKeyCode::Comma, - KeyCode::Convert => VirtualKeyCode::Convert, - KeyCode::NumpadDecimal => VirtualKeyCode::NumpadDecimal, - KeyCode::NumpadDivide => VirtualKeyCode::NumpadDivide, - KeyCode::Equals => VirtualKeyCode::Equals, - KeyCode::Grave => VirtualKeyCode::Grave, - KeyCode::Kana => VirtualKeyCode::Kana, - KeyCode::Kanji => VirtualKeyCode::Kanji, - KeyCode::LAlt => VirtualKeyCode::LAlt, - KeyCode::LBracket => VirtualKeyCode::LBracket, - KeyCode::LControl => VirtualKeyCode::LControl, - KeyCode::LShift => VirtualKeyCode::LShift, - KeyCode::LWin => VirtualKeyCode::LWin, - KeyCode::Mail => VirtualKeyCode::Mail, - KeyCode::MediaSelect => VirtualKeyCode::MediaSelect, - KeyCode::MediaStop => VirtualKeyCode::MediaStop, - KeyCode::Minus => VirtualKeyCode::Minus, - KeyCode::NumpadMultiply => VirtualKeyCode::NumpadMultiply, - KeyCode::Mute => VirtualKeyCode::Mute, - KeyCode::MyComputer => VirtualKeyCode::MyComputer, - KeyCode::NavigateForward => VirtualKeyCode::NavigateForward, - KeyCode::NavigateBackward => VirtualKeyCode::NavigateBackward, - KeyCode::NextTrack => VirtualKeyCode::NextTrack, - KeyCode::NoConvert => VirtualKeyCode::NoConvert, - KeyCode::NumpadComma => VirtualKeyCode::NumpadComma, - KeyCode::NumpadEnter => VirtualKeyCode::NumpadEnter, - KeyCode::NumpadEquals => VirtualKeyCode::NumpadEquals, - KeyCode::OEM102 => VirtualKeyCode::OEM102, - KeyCode::Period => VirtualKeyCode::Period, - KeyCode::PlayPause => VirtualKeyCode::PlayPause, - KeyCode::Power => VirtualKeyCode::Power, - KeyCode::PrevTrack => VirtualKeyCode::PrevTrack, - KeyCode::RAlt => VirtualKeyCode::RAlt, - KeyCode::RBracket => VirtualKeyCode::RBracket, - KeyCode::RControl => VirtualKeyCode::RControl, - KeyCode::RShift => VirtualKeyCode::RShift, - KeyCode::RWin => VirtualKeyCode::RWin, - KeyCode::Semicolon => VirtualKeyCode::Semicolon, - KeyCode::Slash => VirtualKeyCode::Slash, - KeyCode::Sleep => VirtualKeyCode::Sleep, - KeyCode::Stop => VirtualKeyCode::Stop, - KeyCode::NumpadSubtract => VirtualKeyCode::NumpadSubtract, - KeyCode::Sysrq => VirtualKeyCode::Sysrq, - KeyCode::Tab => VirtualKeyCode::Tab, - KeyCode::Underline => VirtualKeyCode::Underline, - KeyCode::Unlabeled => VirtualKeyCode::Unlabeled, - KeyCode::VolumeDown => VirtualKeyCode::VolumeDown, - KeyCode::VolumeUp => VirtualKeyCode::VolumeUp, - KeyCode::Wake => VirtualKeyCode::Wake, - KeyCode::WebBack => VirtualKeyCode::WebBack, - KeyCode::WebFavorites => VirtualKeyCode::WebFavorites, - KeyCode::WebForward => VirtualKeyCode::WebForward, - KeyCode::WebHome => VirtualKeyCode::WebHome, - KeyCode::WebRefresh => VirtualKeyCode::WebRefresh, - KeyCode::WebSearch => VirtualKeyCode::WebSearch, - KeyCode::WebStop => VirtualKeyCode::WebStop, - KeyCode::Yen => VirtualKeyCode::Yen, - KeyCode::Copy => VirtualKeyCode::Copy, - KeyCode::Paste => VirtualKeyCode::Paste, - KeyCode::Cut => VirtualKeyCode::Cut, - KeyCode::Asterisk => VirtualKeyCode::Asterisk, - } -} - /// Converts a `VirtualKeyCode` from [`winit`] to an [`iced_native`] key code. /// /// [`winit`]: https://github.com/rust-windowing/winit /// [`iced_native`]: https://github.com/hecrj/iced/tree/master/native -pub fn key_code(virtual_keycode: winit::event::VirtualKeyCode) -> keyboard::KeyCode { +pub fn key_code(key: &winit::keyboard::Key) -> keyboard::KeyCode { use keyboard::KeyCode; - - match virtual_keycode { - winit::event::VirtualKeyCode::Key1 => KeyCode::Key1, - winit::event::VirtualKeyCode::Key2 => KeyCode::Key2, - winit::event::VirtualKeyCode::Key3 => KeyCode::Key3, - winit::event::VirtualKeyCode::Key4 => KeyCode::Key4, - winit::event::VirtualKeyCode::Key5 => KeyCode::Key5, - winit::event::VirtualKeyCode::Key6 => KeyCode::Key6, - winit::event::VirtualKeyCode::Key7 => KeyCode::Key7, - winit::event::VirtualKeyCode::Key8 => KeyCode::Key8, - winit::event::VirtualKeyCode::Key9 => KeyCode::Key9, - winit::event::VirtualKeyCode::Key0 => KeyCode::Key0, - winit::event::VirtualKeyCode::A => KeyCode::A, - winit::event::VirtualKeyCode::B => KeyCode::B, - winit::event::VirtualKeyCode::C => KeyCode::C, - winit::event::VirtualKeyCode::D => KeyCode::D, - winit::event::VirtualKeyCode::E => KeyCode::E, - winit::event::VirtualKeyCode::F => KeyCode::F, - winit::event::VirtualKeyCode::G => KeyCode::G, - winit::event::VirtualKeyCode::H => KeyCode::H, - winit::event::VirtualKeyCode::I => KeyCode::I, - winit::event::VirtualKeyCode::J => KeyCode::J, - winit::event::VirtualKeyCode::K => KeyCode::K, - winit::event::VirtualKeyCode::L => KeyCode::L, - winit::event::VirtualKeyCode::M => KeyCode::M, - winit::event::VirtualKeyCode::N => KeyCode::N, - winit::event::VirtualKeyCode::O => KeyCode::O, - winit::event::VirtualKeyCode::P => KeyCode::P, - winit::event::VirtualKeyCode::Q => KeyCode::Q, - winit::event::VirtualKeyCode::R => KeyCode::R, - winit::event::VirtualKeyCode::S => KeyCode::S, - winit::event::VirtualKeyCode::T => KeyCode::T, - winit::event::VirtualKeyCode::U => KeyCode::U, - winit::event::VirtualKeyCode::V => KeyCode::V, - winit::event::VirtualKeyCode::W => KeyCode::W, - winit::event::VirtualKeyCode::X => KeyCode::X, - winit::event::VirtualKeyCode::Y => KeyCode::Y, - winit::event::VirtualKeyCode::Z => KeyCode::Z, - winit::event::VirtualKeyCode::Escape => KeyCode::Escape, - winit::event::VirtualKeyCode::F1 => KeyCode::F1, - winit::event::VirtualKeyCode::F2 => KeyCode::F2, - winit::event::VirtualKeyCode::F3 => KeyCode::F3, - winit::event::VirtualKeyCode::F4 => KeyCode::F4, - winit::event::VirtualKeyCode::F5 => KeyCode::F5, - winit::event::VirtualKeyCode::F6 => KeyCode::F6, - winit::event::VirtualKeyCode::F7 => KeyCode::F7, - winit::event::VirtualKeyCode::F8 => KeyCode::F8, - winit::event::VirtualKeyCode::F9 => KeyCode::F9, - winit::event::VirtualKeyCode::F10 => KeyCode::F10, - winit::event::VirtualKeyCode::F11 => KeyCode::F11, - winit::event::VirtualKeyCode::F12 => KeyCode::F12, - winit::event::VirtualKeyCode::F13 => KeyCode::F13, - winit::event::VirtualKeyCode::F14 => KeyCode::F14, - winit::event::VirtualKeyCode::F15 => KeyCode::F15, - winit::event::VirtualKeyCode::F16 => KeyCode::F16, - winit::event::VirtualKeyCode::F17 => KeyCode::F17, - winit::event::VirtualKeyCode::F18 => KeyCode::F18, - winit::event::VirtualKeyCode::F19 => KeyCode::F19, - winit::event::VirtualKeyCode::F20 => KeyCode::F20, - winit::event::VirtualKeyCode::F21 => KeyCode::F21, - winit::event::VirtualKeyCode::F22 => KeyCode::F22, - winit::event::VirtualKeyCode::F23 => KeyCode::F23, - winit::event::VirtualKeyCode::F24 => KeyCode::F24, - winit::event::VirtualKeyCode::Snapshot => KeyCode::Snapshot, - winit::event::VirtualKeyCode::Scroll => KeyCode::Scroll, - winit::event::VirtualKeyCode::Pause => KeyCode::Pause, - winit::event::VirtualKeyCode::Insert => KeyCode::Insert, - winit::event::VirtualKeyCode::Home => KeyCode::Home, - winit::event::VirtualKeyCode::Delete => KeyCode::Delete, - winit::event::VirtualKeyCode::End => KeyCode::End, - winit::event::VirtualKeyCode::PageDown => KeyCode::PageDown, - winit::event::VirtualKeyCode::PageUp => KeyCode::PageUp, - winit::event::VirtualKeyCode::Left => KeyCode::Left, - winit::event::VirtualKeyCode::Up => KeyCode::Up, - winit::event::VirtualKeyCode::Right => KeyCode::Right, - winit::event::VirtualKeyCode::Down => KeyCode::Down, - winit::event::VirtualKeyCode::Back => KeyCode::Backspace, - winit::event::VirtualKeyCode::Return => KeyCode::Enter, - winit::event::VirtualKeyCode::Space => KeyCode::Space, - winit::event::VirtualKeyCode::Compose => KeyCode::Compose, - winit::event::VirtualKeyCode::Caret => KeyCode::Caret, - winit::event::VirtualKeyCode::Numlock => KeyCode::Numlock, - winit::event::VirtualKeyCode::Numpad0 => KeyCode::Numpad0, - winit::event::VirtualKeyCode::Numpad1 => KeyCode::Numpad1, - winit::event::VirtualKeyCode::Numpad2 => KeyCode::Numpad2, - winit::event::VirtualKeyCode::Numpad3 => KeyCode::Numpad3, - winit::event::VirtualKeyCode::Numpad4 => KeyCode::Numpad4, - winit::event::VirtualKeyCode::Numpad5 => KeyCode::Numpad5, - winit::event::VirtualKeyCode::Numpad6 => KeyCode::Numpad6, - winit::event::VirtualKeyCode::Numpad7 => KeyCode::Numpad7, - winit::event::VirtualKeyCode::Numpad8 => KeyCode::Numpad8, - winit::event::VirtualKeyCode::Numpad9 => KeyCode::Numpad9, - winit::event::VirtualKeyCode::AbntC1 => KeyCode::AbntC1, - winit::event::VirtualKeyCode::AbntC2 => KeyCode::AbntC2, - winit::event::VirtualKeyCode::NumpadAdd => KeyCode::NumpadAdd, - winit::event::VirtualKeyCode::Plus => KeyCode::Plus, - winit::event::VirtualKeyCode::Apostrophe => KeyCode::Apostrophe, - winit::event::VirtualKeyCode::Apps => KeyCode::Apps, - winit::event::VirtualKeyCode::At => KeyCode::At, - winit::event::VirtualKeyCode::Ax => KeyCode::Ax, - winit::event::VirtualKeyCode::Backslash => KeyCode::Backslash, - winit::event::VirtualKeyCode::Calculator => KeyCode::Calculator, - winit::event::VirtualKeyCode::Capital => KeyCode::Capital, - winit::event::VirtualKeyCode::Colon => KeyCode::Colon, - winit::event::VirtualKeyCode::Comma => KeyCode::Comma, - winit::event::VirtualKeyCode::Convert => KeyCode::Convert, - winit::event::VirtualKeyCode::NumpadDecimal => KeyCode::NumpadDecimal, - winit::event::VirtualKeyCode::NumpadDivide => KeyCode::NumpadDivide, - winit::event::VirtualKeyCode::Equals => KeyCode::Equals, - winit::event::VirtualKeyCode::Grave => KeyCode::Grave, - winit::event::VirtualKeyCode::Kana => KeyCode::Kana, - winit::event::VirtualKeyCode::Kanji => KeyCode::Kanji, - winit::event::VirtualKeyCode::LAlt => KeyCode::LAlt, - winit::event::VirtualKeyCode::LBracket => KeyCode::LBracket, - winit::event::VirtualKeyCode::LControl => KeyCode::LControl, - winit::event::VirtualKeyCode::LShift => KeyCode::LShift, - winit::event::VirtualKeyCode::LWin => KeyCode::LWin, - winit::event::VirtualKeyCode::Mail => KeyCode::Mail, - winit::event::VirtualKeyCode::MediaSelect => KeyCode::MediaSelect, - winit::event::VirtualKeyCode::MediaStop => KeyCode::MediaStop, - winit::event::VirtualKeyCode::Minus => KeyCode::Minus, - winit::event::VirtualKeyCode::NumpadMultiply => KeyCode::NumpadMultiply, - winit::event::VirtualKeyCode::Mute => KeyCode::Mute, - winit::event::VirtualKeyCode::MyComputer => KeyCode::MyComputer, - winit::event::VirtualKeyCode::NavigateForward => KeyCode::NavigateForward, - winit::event::VirtualKeyCode::NavigateBackward => KeyCode::NavigateBackward, - winit::event::VirtualKeyCode::NextTrack => KeyCode::NextTrack, - winit::event::VirtualKeyCode::NoConvert => KeyCode::NoConvert, - winit::event::VirtualKeyCode::NumpadComma => KeyCode::NumpadComma, - winit::event::VirtualKeyCode::NumpadEnter => KeyCode::NumpadEnter, - winit::event::VirtualKeyCode::NumpadEquals => KeyCode::NumpadEquals, - winit::event::VirtualKeyCode::OEM102 => KeyCode::OEM102, - winit::event::VirtualKeyCode::Period => KeyCode::Period, - winit::event::VirtualKeyCode::PlayPause => KeyCode::PlayPause, - winit::event::VirtualKeyCode::Power => KeyCode::Power, - winit::event::VirtualKeyCode::PrevTrack => KeyCode::PrevTrack, - winit::event::VirtualKeyCode::RAlt => KeyCode::RAlt, - winit::event::VirtualKeyCode::RBracket => KeyCode::RBracket, - winit::event::VirtualKeyCode::RControl => KeyCode::RControl, - winit::event::VirtualKeyCode::RShift => KeyCode::RShift, - winit::event::VirtualKeyCode::RWin => KeyCode::RWin, - winit::event::VirtualKeyCode::Semicolon => KeyCode::Semicolon, - winit::event::VirtualKeyCode::Slash => KeyCode::Slash, - winit::event::VirtualKeyCode::Sleep => KeyCode::Sleep, - winit::event::VirtualKeyCode::Stop => KeyCode::Stop, - winit::event::VirtualKeyCode::NumpadSubtract => KeyCode::NumpadSubtract, - winit::event::VirtualKeyCode::Sysrq => KeyCode::Sysrq, - winit::event::VirtualKeyCode::Tab => KeyCode::Tab, - winit::event::VirtualKeyCode::Underline => KeyCode::Underline, - winit::event::VirtualKeyCode::Unlabeled => KeyCode::Unlabeled, - winit::event::VirtualKeyCode::VolumeDown => KeyCode::VolumeDown, - winit::event::VirtualKeyCode::VolumeUp => KeyCode::VolumeUp, - winit::event::VirtualKeyCode::Wake => KeyCode::Wake, - winit::event::VirtualKeyCode::WebBack => KeyCode::WebBack, - winit::event::VirtualKeyCode::WebFavorites => KeyCode::WebFavorites, - winit::event::VirtualKeyCode::WebForward => KeyCode::WebForward, - winit::event::VirtualKeyCode::WebHome => KeyCode::WebHome, - winit::event::VirtualKeyCode::WebRefresh => KeyCode::WebRefresh, - winit::event::VirtualKeyCode::WebSearch => KeyCode::WebSearch, - winit::event::VirtualKeyCode::WebStop => KeyCode::WebStop, - winit::event::VirtualKeyCode::Yen => KeyCode::Yen, - winit::event::VirtualKeyCode::Copy => KeyCode::Copy, - winit::event::VirtualKeyCode::Paste => KeyCode::Paste, - winit::event::VirtualKeyCode::Cut => KeyCode::Cut, - winit::event::VirtualKeyCode::Asterisk => KeyCode::Asterisk, + use winit::keyboard::NamedKey; + + match key { + winit::keyboard::Key::Character(c) => match c.as_str() { + "1" => KeyCode::Key1, + "2" => KeyCode::Key2, + "3" => KeyCode::Key3, + "4" => KeyCode::Key4, + "5" => KeyCode::Key5, + "6" => KeyCode::Key6, + "7" => KeyCode::Key7, + "8" => KeyCode::Key8, + "9" => KeyCode::Key9, + "0" => KeyCode::Key0, + "a" => KeyCode::A, + "b" => KeyCode::B, + "c" => KeyCode::C, + "d" => KeyCode::D, + "e" => KeyCode::E, + "f" => KeyCode::F, + "g" => KeyCode::G, + "h" => KeyCode::H, + "i" => KeyCode::I, + "j" => KeyCode::J, + "k" => KeyCode::K, + "l" => KeyCode::L, + "m" => KeyCode::M, + "n" => KeyCode::N, + "o" => KeyCode::O, + "p" => KeyCode::P, + "q" => KeyCode::Q, + "r" => KeyCode::R, + "s" => KeyCode::S, + "t" => KeyCode::T, + "u" => KeyCode::U, + "v" => KeyCode::V, + "w" => KeyCode::W, + "x" => KeyCode::X, + "y" => KeyCode::Y, + "z" => KeyCode::Z, + _ => KeyCode::Unlabeled, + }, + winit::keyboard::Key::Named(named_key) => match named_key { + NamedKey::Escape => KeyCode::Escape, + NamedKey::F1 => KeyCode::F1, + NamedKey::F2 => KeyCode::F2, + NamedKey::F3 => KeyCode::F3, + NamedKey::F4 => KeyCode::F4, + NamedKey::F5 => KeyCode::F5, + NamedKey::F6 => KeyCode::F6, + NamedKey::F7 => KeyCode::F7, + NamedKey::F8 => KeyCode::F8, + NamedKey::F9 => KeyCode::F9, + NamedKey::F10 => KeyCode::F10, + NamedKey::F11 => KeyCode::F11, + NamedKey::F12 => KeyCode::F12, + NamedKey::F13 => KeyCode::F13, + NamedKey::F14 => KeyCode::F14, + NamedKey::F15 => KeyCode::F15, + NamedKey::F16 => KeyCode::F16, + NamedKey::F17 => KeyCode::F17, + NamedKey::F18 => KeyCode::F18, + NamedKey::F19 => KeyCode::F19, + NamedKey::F20 => KeyCode::F20, + NamedKey::F21 => KeyCode::F21, + NamedKey::F22 => KeyCode::F22, + NamedKey::F23 => KeyCode::F23, + NamedKey::F24 => KeyCode::F24, + NamedKey::PrintScreen => KeyCode::Snapshot, + NamedKey::ScrollLock => KeyCode::Scroll, + NamedKey::Pause => KeyCode::Pause, + NamedKey::Insert => KeyCode::Insert, + NamedKey::Home => KeyCode::Home, + NamedKey::Delete => KeyCode::Delete, + NamedKey::End => KeyCode::End, + NamedKey::PageDown => KeyCode::PageDown, + NamedKey::PageUp => KeyCode::PageUp, + NamedKey::ArrowLeft => KeyCode::Left, + NamedKey::ArrowUp => KeyCode::Up, + NamedKey::ArrowRight => KeyCode::Right, + NamedKey::ArrowDown => KeyCode::Down, + NamedKey::Backspace => KeyCode::Backspace, + NamedKey::Enter => KeyCode::Enter, + NamedKey::Space => KeyCode::Space, + NamedKey::Compose => KeyCode::Compose, + NamedKey::NumLock => KeyCode::Numlock, + NamedKey::AppSwitch => KeyCode::Apps, + NamedKey::Convert => KeyCode::Convert, + NamedKey::LaunchMail => KeyCode::Mail, + NamedKey::MediaApps => KeyCode::MediaSelect, + NamedKey::MediaStop => KeyCode::MediaStop, + NamedKey::AudioVolumeMute => KeyCode::Mute, + NamedKey::MediaStepForward => KeyCode::NavigateForward, + NamedKey::MediaStepBackward => KeyCode::NavigateBackward, + NamedKey::MediaSkipForward => KeyCode::NextTrack, + NamedKey::NonConvert => KeyCode::NoConvert, + NamedKey::MediaPlayPause => KeyCode::PlayPause, + NamedKey::Power => KeyCode::Power, + NamedKey::MediaSkipBackward => KeyCode::PrevTrack, + NamedKey::PowerOff => KeyCode::Sleep, + NamedKey::Tab => KeyCode::Tab, + NamedKey::AudioVolumeDown => KeyCode::VolumeDown, + NamedKey::AudioVolumeUp => KeyCode::VolumeUp, + NamedKey::WakeUp => KeyCode::Wake, + NamedKey::BrowserBack => KeyCode::WebBack, + NamedKey::BrowserFavorites => KeyCode::WebFavorites, + NamedKey::BrowserForward => KeyCode::WebForward, + NamedKey::BrowserHome => KeyCode::WebHome, + NamedKey::BrowserRefresh => KeyCode::WebRefresh, + NamedKey::BrowserSearch => KeyCode::WebSearch, + NamedKey::BrowserStop => KeyCode::WebStop, + NamedKey::Copy => KeyCode::Copy, + NamedKey::Paste => KeyCode::Paste, + NamedKey::Cut => KeyCode::Cut, + _ => KeyCode::Unlabeled, + }, + _ => KeyCode::Unlabeled, } } - -// As defined in: http://www.unicode.org/faq/private_use.html -pub(crate) fn is_private_use_character(c: char) -> bool { - matches!(c, '\u{E000}'..='\u{F8FF}' | '\u{F0000}'..='\u{FFFFD}' | '\u{100000}'..='\u{10FFFD}') -} diff --git a/neothesia/src/main.rs b/neothesia/src/main.rs index 4d4bb298..7cf1889c 100644 --- a/neothesia/src/main.rs +++ b/neothesia/src/main.rs @@ -21,7 +21,7 @@ use wgpu_jumpstart::Surface; use wgpu_jumpstart::{Gpu, TransformUniform}; use winit::{ event::WindowEvent, - event_loop::{ControlFlow, EventLoop, EventLoopBuilder}, + event_loop::{EventLoop, EventLoopBuilder}, }; #[derive(Debug)] @@ -46,6 +46,7 @@ struct Neothesia { #[cfg(debug_assertions)] fps_ticker: fps_ticker::Fps, + last_time: std::time::Instant, } impl Neothesia { @@ -63,10 +64,15 @@ impl Neothesia { #[cfg(debug_assertions)] fps_ticker: fps_ticker::Fps::default(), + last_time: std::time::Instant::now(), } } - fn window_event(&mut self, event: &WindowEvent, control_flow: &mut ControlFlow) { + fn window_event( + &mut self, + event: &WindowEvent, + event_loop: &winit::event_loop::EventLoopWindowTarget, + ) { self.target.window_state.window_event(event); match &event { @@ -88,35 +94,51 @@ impl Neothesia { self.game_scene.resize(&mut self.target); } WindowEvent::KeyboardInput { - input: - winit::event::KeyboardInput { + event: + winit::event::KeyEvent { state: winit::event::ElementState::Pressed, - virtual_keycode: Some(winit::event::VirtualKeyCode::F), + logical_key, .. }, .. - } => { - if self.target.window.fullscreen().is_some() { - self.target.window.set_fullscreen(None); - } else { - let monitor = self.target.window.current_monitor(); - if let Some(monitor) = monitor { - let f = winit::window::Fullscreen::Borderless(Some(monitor)); - self.target.window.set_fullscreen(Some(f)); + } => match logical_key { + winit::keyboard::Key::Character(c) if c.as_str() == "f" => { + if self.target.window.fullscreen().is_some() { + self.target.window.set_fullscreen(None); } else { - let f = winit::window::Fullscreen::Borderless(None); - self.target.window.set_fullscreen(Some(f)); + let monitor = self.target.window.current_monitor(); + if let Some(monitor) = monitor { + let f = winit::window::Fullscreen::Borderless(Some(monitor)); + self.target.window.set_fullscreen(Some(f)); + } else { + let f = winit::window::Fullscreen::Borderless(None); + self.target.window.set_fullscreen(Some(f)); + } } } + _ => {} + }, + WindowEvent::RedrawRequested => { + let delta = self.last_time.elapsed(); + self.last_time = std::time::Instant::now(); + + self.update(delta); + self.render(); + } + WindowEvent::CloseRequested => { + event_loop.exit(); } - WindowEvent::CloseRequested => *control_flow = ControlFlow::Exit, _ => {} } self.game_scene.window_event(&mut self.target, event); } - fn neothesia_event(&mut self, event: NeothesiaEvent, control_flow: &mut ControlFlow) { + fn neothesia_event( + &mut self, + event: NeothesiaEvent, + event_loop: &winit::event_loop::EventLoopWindowTarget, + ) { match event { NeothesiaEvent::Play(song) => { self.target.iced_manager.renderer.clear(); @@ -133,7 +155,7 @@ impl Neothesia { .midi_event(&mut self.target, channel, &message); } NeothesiaEvent::Exit => { - *control_flow = ControlFlow::Exit; + event_loop.exit(); } } } @@ -228,40 +250,33 @@ fn main() { let mut app = Neothesia::new(target, surface); - let mut last_time = std::time::Instant::now(); - // Investigate: // https://github.com/gfx-rs/wgpu-rs/pull/306 - event_loop.run(move |event, _, control_flow| { - use winit::event::Event; - match event { - Event::UserEvent(event) => { - app.neothesia_event(event, control_flow); - } - Event::WindowEvent { event, .. } => { - app.window_event(&event, control_flow); - } - Event::RedrawRequested(_) => { - let delta = last_time.elapsed(); - last_time = std::time::Instant::now(); - - app.update(delta); - app.render(); - } - Event::RedrawEventsCleared => { - app.target.window.request_redraw(); + event_loop + .run(move |event, event_loop| { + use winit::event::Event; + match event { + Event::UserEvent(event) => { + app.neothesia_event(event, event_loop); + } + Event::WindowEvent { event, .. } => { + app.window_event(&event, event_loop); + } + Event::AboutToWait => { + app.target.window.request_redraw(); + } + _ => {} } - _ => {} - } - }); + }) + .unwrap(); } fn init(builder: winit::window::WindowBuilder) -> (EventLoop, Target, Surface) { env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("neothesia=info")) .init(); - let event_loop = EventLoopBuilder::with_user_event().build(); + let event_loop = EventLoopBuilder::with_user_event().build().unwrap(); let proxy = event_loop.create_proxy(); let builder = builder diff --git a/neothesia/src/scene/menu_scene/mod.rs b/neothesia/src/scene/menu_scene/mod.rs index 9580b2e2..5323bb24 100644 --- a/neothesia/src/scene/menu_scene/mod.rs +++ b/neothesia/src/scene/menu_scene/mod.rs @@ -91,7 +91,7 @@ impl Scene for MenuScene { } fn window_event(&mut self, target: &mut Target, event: &WindowEvent) { - use winit::event::ModifiersState; + use winit::keyboard::ModifiersState; let modifiers = ModifiersState::default(); diff --git a/neothesia/src/scene/playing_scene/mod.rs b/neothesia/src/scene/playing_scene/mod.rs index e6b3cbf5..a95481ff 100644 --- a/neothesia/src/scene/playing_scene/mod.rs +++ b/neothesia/src/scene/playing_scene/mod.rs @@ -2,7 +2,7 @@ use midi_file::midly::MidiMessage; use neothesia_core::render::{QuadInstance, QuadPipeline}; use std::time::Duration; use wgpu_jumpstart::{Color, TransformUniform, Uniform}; -use winit::event::{KeyboardInput, WindowEvent}; +use winit::event::{KeyEvent, WindowEvent}; use super::Scene; use crate::{ @@ -125,33 +125,35 @@ impl Scene for PlayingScene { } fn window_event(&mut self, target: &mut Target, event: &WindowEvent) { - use winit::event::WindowEvent::*; - use winit::event::{ElementState, VirtualKeyCode}; + use winit::{ + event::ElementState, + keyboard::{Key, NamedKey}, + }; match &event { - KeyboardInput { input, .. } => { + WindowEvent::KeyboardInput { event, .. } => { self.rewind_controler - .handle_keyboard_input(&mut self.player, input); + .handle_keyboard_input(&mut self.player, event); if self.rewind_controler.is_rewinding() { self.keyboard.reset_notes(); } - settings_keyboard_input(target, &mut self.toast_manager, input, &mut self.notes); + settings_keyboard_input(target, &mut self.toast_manager, event, &mut self.notes); - if input.state == ElementState::Released { - match input.virtual_keycode { - Some(VirtualKeyCode::Escape) => { + if event.state == ElementState::Released { + match event.logical_key { + Key::Named(NamedKey::Escape) => { target.proxy.send_event(NeothesiaEvent::MainMenu).ok(); } - Some(VirtualKeyCode::Space) => { + Key::Named(NamedKey::Space) => { self.player.pause_resume(); } _ => {} } } } - MouseInput { state, button, .. } => { + WindowEvent::MouseInput { state, button, .. } => { self.rewind_controler.handle_mouse_input( &mut self.player, &target.window_state, @@ -163,7 +165,7 @@ impl Scene for PlayingScene { self.keyboard.reset_notes(); } } - CursorMoved { position, .. } => { + WindowEvent::CursorMoved { position, .. } => { self.rewind_controler.handle_cursor_moved( &mut self.player, &target.window_state, @@ -185,30 +187,27 @@ impl Scene for PlayingScene { fn settings_keyboard_input( target: &mut Target, toast_manager: &mut ToastManager, - input: &KeyboardInput, + input: &KeyEvent, waterfall: &mut WaterfallRenderer, ) { - use winit::event::{ElementState, VirtualKeyCode}; + use winit::{ + event::ElementState, + keyboard::{Key, NamedKey}, + }; if input.state != ElementState::Released { return; } - let virtual_keycode = if let Some(virtual_keycode) = input.virtual_keycode { - virtual_keycode - } else { - return; - }; - - match virtual_keycode { - VirtualKeyCode::Up | VirtualKeyCode::Down => { - let amount = if target.window_state.modifers_state.shift() { + match input.logical_key { + Key::Named(key @ (NamedKey::ArrowUp | NamedKey::ArrowDown)) => { + let amount = if target.window_state.modifers_state.shift_key() { 0.5 } else { 0.1 }; - if virtual_keycode == VirtualKeyCode::Up { + if key == NamedKey::ArrowUp { target.config.speed_multiplier += amount; } else { target.config.speed_multiplier -= amount; @@ -218,14 +217,14 @@ fn settings_keyboard_input( toast_manager.speed_toast(target.config.speed_multiplier); } - VirtualKeyCode::PageUp | VirtualKeyCode::PageDown => { - let amount = if target.window_state.modifers_state.shift() { + Key::Named(key @ (NamedKey::PageUp | NamedKey::PageDown)) => { + let amount = if target.window_state.modifers_state.shift_key() { 500.0 } else { 100.0 }; - if virtual_keycode == VirtualKeyCode::PageUp { + if key == NamedKey::PageUp { target.config.animation_speed += amount; } else { target.config.animation_speed -= amount; @@ -238,14 +237,14 @@ fn settings_keyboard_input( toast_manager.animation_speed_toast(target.config.animation_speed); } - VirtualKeyCode::Minus | VirtualKeyCode::Plus | VirtualKeyCode::Equals => { - let amount = if target.window_state.modifers_state.shift() { + Key::Character(ref ch) if matches!(ch.as_str(), "_" | "-" | "+" | "=") => { + let amount = if target.window_state.modifers_state.shift_key() { 0.1 } else { 0.01 }; - if virtual_keycode == VirtualKeyCode::Minus { + if matches!(ch.as_str(), "-" | "_") { target.config.playback_offset -= amount; } else { target.config.playback_offset += amount; diff --git a/neothesia/src/scene/playing_scene/rewind_controller.rs b/neothesia/src/scene/playing_scene/rewind_controller.rs index a23956d6..9e0ec7c2 100644 --- a/neothesia/src/scene/playing_scene/rewind_controller.rs +++ b/neothesia/src/scene/playing_scene/rewind_controller.rs @@ -1,6 +1,6 @@ use winit::{ dpi::PhysicalPosition, - event::{ElementState, KeyboardInput, MouseButton, VirtualKeyCode}, + event::{ElementState, MouseButton}, }; use super::MidiPlayer; @@ -52,9 +52,9 @@ impl RewindController { pub fn update(&self, player: &mut MidiPlayer, target: &Target) { if let RewindController::Keyboard { speed, .. } = self { - if target.window_state.modifers_state.shift() { + if target.window_state.modifers_state.shift_key() { player.rewind(*speed * 2); - } else if target.window_state.modifers_state.ctrl() { + } else if target.window_state.modifers_state.control_key() { player.rewind(*speed / 2); } else { player.rewind(*speed); @@ -62,11 +62,17 @@ impl RewindController { } } - pub fn handle_keyboard_input(&mut self, player: &mut MidiPlayer, input: &KeyboardInput) { - if let Some(virtual_keycode) = input.virtual_keycode { - match virtual_keycode { - VirtualKeyCode::Left => { - if let winit::event::ElementState::Pressed = input.state { + pub fn handle_keyboard_input( + &mut self, + player: &mut MidiPlayer, + input: &winit::event::KeyEvent, + ) { + use winit::keyboard::{Key, NamedKey}; + + if let Key::Named(name) = input.logical_key { + match name { + NamedKey::ArrowLeft => { + if let ElementState::Pressed = input.state { if !self.is_rewinding() { self.start_keyboard_rewind(player, -100); } @@ -74,8 +80,8 @@ impl RewindController { self.stop_rewind(player); } } - VirtualKeyCode::Right => { - if let winit::event::ElementState::Pressed = input.state { + NamedKey::ArrowRight => { + if let ElementState::Pressed = input.state { if !self.is_rewinding() { self.start_keyboard_rewind(player, 100); } diff --git a/neothesia/src/utils/window.rs b/neothesia/src/utils/window.rs index cc0d2a7d..3a0f26d2 100644 --- a/neothesia/src/utils/window.rs +++ b/neothesia/src/utils/window.rs @@ -1,6 +1,6 @@ use winit::dpi::LogicalPosition; use winit::dpi::PhysicalPosition; -use winit::event::ModifiersState; +use winit::keyboard::ModifiersState; use winit::{ dpi::{LogicalSize, PhysicalSize}, @@ -55,13 +55,8 @@ impl WindowState { self.physical_size = *ps; self.logical_size = ps.to_logical(self.scale_factor); } - WindowEvent::ScaleFactorChanged { - scale_factor, - new_inner_size, - } => { - self.physical_size = **new_inner_size; - self.logical_size = new_inner_size.to_logical(self.scale_factor); - + WindowEvent::ScaleFactorChanged { scale_factor, .. } => { + self.logical_size = self.physical_size.to_logical(self.scale_factor); self.scale_factor = *scale_factor; } WindowEvent::CursorMoved { position, .. } => { @@ -72,7 +67,7 @@ impl WindowState { self.focused = *f; } WindowEvent::ModifiersChanged(state) => { - self.modifers_state = *state; + self.modifers_state = state.state(); } _ => {} }