desktop: Update winit to 0.29.10 and egui to 0.25.0

This commit is contained in:
Nathan Adams 2024-01-11 21:22:47 +01:00
parent 5169d9db3d
commit f65060e8c9
8 changed files with 524 additions and 559 deletions

540
Cargo.lock generated
View File

@ -56,6 +56,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01"
dependencies = [
"cfg-if",
"getrandom",
"once_cell",
"serde",
"version_check",
@ -107,20 +108,23 @@ dependencies = [
[[package]]
name = "android-activity"
version = "0.4.3"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "64529721f27c2314ced0890ce45e469574a73e5e6fdd6e9da1860eb29285f5e0"
checksum = "39b801912a977c3fd52d80511fe1c0c8480c6f957f21ae2ce1b92ffe970cf4b9"
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.2",
"thiserror",
]
[[package]]
@ -214,7 +218,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aafb29b107435aa276664c1db8954ac27a6e105cdad3c88287a199eb0e313c08"
dependencies = [
"clipboard-win",
"core-graphics",
"core-graphics 0.22.3",
"image",
"log",
"objc",
@ -224,7 +228,7 @@ dependencies = [
"thiserror",
"winapi",
"wl-clipboard-rs",
"x11rb",
"x11rb 0.12.0",
]
[[package]]
@ -248,6 +252,12 @@ dependencies = [
"serde",
]
[[package]]
name = "as-raw-xcb-connection"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b"
[[package]]
name = "ash"
version = "0.37.3+1.3.251"
@ -283,9 +293,9 @@ dependencies = [
[[package]]
name = "async-io"
version = "2.2.2"
version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6afaa937395a620e33dc6a742c593c01aced20aa376ffb0f628121198578ccc7"
checksum = "fb41eb19024a91746eba0773aa5e16036045bbf45733766661099e182ea6a744"
dependencies = [
"async-lock",
"cfg-if",
@ -481,21 +491,21 @@ dependencies = [
[[package]]
name = "block-sys"
version = "0.1.0-beta.1"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146"
checksum = "ae85a0696e7ea3b835a453750bf002770776609115e6d25c6d2ff28a8200f7e7"
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]]
@ -596,16 +606,28 @@ dependencies = [
[[package]]
name = "calloop"
version = "0.10.6"
version = "0.12.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52e0d00eb1ea24371a97d2da6201c6747a633dc6dc1988ef503403b4c59504a8"
checksum = "fba7adb4dd5aa98e5553510223000e7148f621165ec5f9acd7113f6ca4995298"
dependencies = [
"bitflags 1.3.2",
"bitflags 2.4.1",
"log",
"nix 0.25.1",
"slotmap",
"polling 3.3.2",
"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",
"wayland-client",
]
[[package]]
@ -893,6 +915,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"
@ -947,7 +982,7 @@ dependencies = [
"js-sys",
"libc",
"mach2",
"ndk",
"ndk 0.7.0",
"ndk-context",
"oboe",
"once_cell",
@ -1093,6 +1128,12 @@ dependencies = [
"windows-sys 0.48.0",
]
[[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"
@ -1366,9 +1407,8 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
[[package]]
name = "ecolor"
version = "0.24.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4b7637fc2e74d17e52931bac90ff4fc061ac776ada9c7fa272f24cdca5991972"
version = "0.25.0"
source = "git+https://github.com/ruffle-rs/egui?branch=consume_keys#bdecb2cbbc5b43e77e98b0524c3678a07a0b4e04"
dependencies = [
"bytemuck",
"serde",
@ -1376,9 +1416,8 @@ dependencies = [
[[package]]
name = "egui"
version = "0.24.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c55bcb864b764eb889515a38b8924757657a250738ad15126637ee2df291ee6b"
version = "0.25.0"
source = "git+https://github.com/ruffle-rs/egui?branch=consume_keys#bdecb2cbbc5b43e77e98b0524c3678a07a0b4e04"
dependencies = [
"accesskit",
"ahash",
@ -1390,9 +1429,8 @@ dependencies = [
[[package]]
name = "egui-wgpu"
version = "0.24.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2d8ea73b329649be625fac2c9b190a2a8f9a66f98610c4b09124b596c6695053"
version = "0.25.0"
source = "git+https://github.com/ruffle-rs/egui?branch=consume_keys#bdecb2cbbc5b43e77e98b0524c3678a07a0b4e04"
dependencies = [
"bytemuck",
"egui",
@ -1406,14 +1444,13 @@ dependencies = [
[[package]]
name = "egui-winit"
version = "0.24.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b673606b6606b12b95e3a3194d7882bf5cff302db36a520b8144c7c342e4e84"
version = "0.25.0"
source = "git+https://github.com/ruffle-rs/egui?branch=consume_keys#bdecb2cbbc5b43e77e98b0524c3678a07a0b4e04"
dependencies = [
"arboard",
"egui",
"log",
"raw-window-handle",
"raw-window-handle 0.5.2",
"smithay-clipboard",
"web-time",
"webbrowser",
@ -1422,9 +1459,8 @@ dependencies = [
[[package]]
name = "egui_extras"
version = "0.24.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "97624eaf17a16058265d3a3e712e167798655baf7c8f693de25be75cdd6c57b5"
version = "0.25.0"
source = "git+https://github.com/ruffle-rs/egui?branch=consume_keys#bdecb2cbbc5b43e77e98b0524c3678a07a0b4e04"
dependencies = [
"egui",
"enum-map",
@ -1442,9 +1478,8 @@ checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
[[package]]
name = "emath"
version = "0.24.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a045c6c0b44b35e98513fc1e9d183ab42881ac27caccb9fa345465601f56cce4"
version = "0.25.0"
source = "git+https://github.com/ruffle-rs/egui?branch=consume_keys#bdecb2cbbc5b43e77e98b0524c3678a07a0b4e04"
dependencies = [
"bytemuck",
"serde",
@ -1547,9 +1582,8 @@ dependencies = [
[[package]]
name = "epaint"
version = "0.24.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d1b9e000d21bab9b535ce78f9f7745be28b3f777f6c7223936561c5c7fefab8"
version = "0.25.0"
source = "git+https://github.com/ruffle-rs/egui?branch=consume_keys#bdecb2cbbc5b43e77e98b0524c3678a07a0b4e04"
dependencies = [
"ab_glyph",
"ahash",
@ -1866,7 +1900,7 @@ checksum = "98b88c54a38407f7352dd2c4238830115a6377741098ffd1f997c813d0e088a6"
dependencies = [
"fontconfig-parser",
"log",
"memmap2 0.9.3",
"memmap2",
"slotmap",
"tinyvec",
"ttf-parser",
@ -2135,6 +2169,16 @@ dependencies = [
"winapi",
]
[[package]]
name = "gethostname"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818"
dependencies = [
"libc",
"windows-targets 0.48.5",
]
[[package]]
name = "getrandom"
version = "0.2.12"
@ -2495,6 +2539,17 @@ dependencies = [
"cc",
]
[[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 = "ident_case"
version = "1.0.1"
@ -2589,9 +2644,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
dependencies = [
"cfg-if",
"js-sys",
"wasm-bindgen",
"web-sys",
]
[[package]]
@ -3076,15 +3128,6 @@ version = "2.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
[[package]]
name = "memmap2"
version = "0.5.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327"
dependencies = [
"libc",
]
[[package]]
name = "memmap2"
version = "0.9.3"
@ -3094,15 +3137,6 @@ dependencies = [
"libc",
]
[[package]]
name = "memoffset"
version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
dependencies = [
"autocfg",
]
[[package]]
name = "memoffset"
version = "0.7.1"
@ -3159,18 +3193,6 @@ dependencies = [
"simd-adler32",
]
[[package]]
name = "mio"
version = "0.8.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09"
dependencies = [
"libc",
"log",
"wasi",
"windows-sys 0.48.0",
]
[[package]]
name = "mocket"
version = "0.1.0"
@ -3263,9 +3285,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.2",
"raw-window-handle 0.5.2",
"raw-window-handle 0.6.0",
"thiserror",
]
@ -3284,6 +3322,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 = "nellymoser-rs"
version = "0.1.2"
@ -3325,20 +3372,6 @@ dependencies = [
"bitflags 1.3.2",
"cfg-if",
"libc",
"memoffset 0.6.5",
]
[[package]]
name = "nix"
version = "0.25.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4"
dependencies = [
"autocfg",
"bitflags 1.3.2",
"cfg-if",
"libc",
"memoffset 0.6.5",
]
[[package]]
@ -3350,7 +3383,7 @@ dependencies = [
"bitflags 1.3.2",
"cfg-if",
"libc",
"memoffset 0.7.1",
"memoffset",
"pin-utils",
]
@ -3463,11 +3496,11 @@ dependencies = [
[[package]]
name = "num_enum"
version = "0.6.1"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1"
checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845"
dependencies = [
"num_enum_derive 0.6.1",
"num_enum_derive 0.7.2",
]
[[package]]
@ -3476,7 +3509,7 @@ version = "0.5.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
dependencies = [
"proc-macro-crate",
"proc-macro-crate 1.3.1",
"proc-macro2",
"quote",
"syn 1.0.109",
@ -3484,11 +3517,11 @@ dependencies = [
[[package]]
name = "num_enum_derive"
version = "0.6.1"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6"
checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b"
dependencies = [
"proc-macro-crate",
"proc-macro-crate 3.0.0",
"proc-macro2",
"quote",
"syn 2.0.48",
@ -3532,29 +3565,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"
@ -3590,7 +3619,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 0.3.3",
"num-traits",
@ -3944,6 +3973,15 @@ dependencies = [
"toml_edit 0.19.15",
]
[[package]]
name = "proc-macro-crate"
version = "3.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6b2685dd208a3771337d8d386a89840f0f43cd68be8dae90a5f8c2384effc9cd"
dependencies = [
"toml_edit 0.21.0",
]
[[package]]
name = "proc-macro-hack"
version = "0.5.20+deprecated"
@ -4070,6 +4108,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"
@ -4225,7 +4269,7 @@ dependencies = [
"objc",
"objc-foundation",
"objc_id",
"raw-window-handle",
"raw-window-handle 0.5.2",
"wasm-bindgen",
"wasm-bindgen-futures",
"web-sys",
@ -4471,7 +4515,7 @@ dependencies = [
"naga_oil",
"ouroboros",
"profiling",
"raw-window-handle",
"raw-window-handle 0.5.2",
"ruffle_render",
"swf",
"tracing",
@ -4727,13 +4771,13 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "sctk-adwaita"
version = "0.5.4"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cda4e97be1fd174ccc2aae81c8b694e803fa99b34e8fd0f057a9d70698e3ed09"
checksum = "82b2eaf3a5b264a521b988b2e73042e742df700c4f962cde845d1541adb46550"
dependencies = [
"ab_glyph",
"log",
"memmap2 0.5.10",
"memmap2",
"smithay-client-toolkit",
"tiny-skia",
]
@ -4913,31 +4957,47 @@ checksum = "2593d31f82ead8df961d8bd23a64c2ccf2eb5dd34b0a34bfb4dd54011c72009e"
[[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",
"rustix",
"thiserror",
"wayland-backend",
"wayland-client",
"wayland-csd-frame",
"wayland-cursor",
"wayland-protocols 0.29.5",
"wayland-protocols",
"wayland-protocols-wlr",
"wayland-scanner",
"xkeysym",
]
[[package]]
name = "smithay-clipboard"
version = "0.6.6"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a345c870a1fae0b1b779085e81b51e614767c239e93503588e54c5b17f4b0e8"
checksum = "0bb62b280ce5a5cba847669933a0948d00904cf83845c944eae96a4738cea1a6"
dependencies = [
"libc",
"smithay-client-toolkit",
"wayland-client 0.29.5",
"wayland-backend",
]
[[package]]
name = "smol_str"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6845563ada680337a52d43bb0b29f396f2d911616f6573012645b9e3d048a49"
dependencies = [
"serde",
]
[[package]]
@ -5276,23 +5336,23 @@ dependencies = [
[[package]]
name = "tiny-skia"
version = "0.8.4"
version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df8493a203431061e901613751931f047d1971337153f96d0e5e363d6dbf6a67"
checksum = "b6a067b809476893fce6a254cf285850ff69c847e6cfbade6a20b655b6c7e80d"
dependencies = [
"arrayref",
"arrayvec",
"bytemuck",
"cfg-if",
"png",
"log",
"tiny-skia-path",
]
[[package]]
name = "tiny-skia-path"
version = "0.8.4"
version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "adbfb5d3f3dd57a0e11d12f4f13d4ebbbc1b5c15b7ab0a156d030b21da5f677c"
checksum = "5de35e8a90052baaaf61f171680ac2f8e925a1e43ea9d2e3a00514772250e541"
dependencies = [
"arrayref",
"bytemuck",
@ -5662,20 +5722,15 @@ 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 = "vergen"
version = "8.2.10"
version = "8.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a78365c3f8ca9dc5428a9f5c6349558c3f9f3eeb65e3fc00b6a981379462947"
checksum = "ec0d895592fa7710eba03fe072e614e3dc6a61ab76ae7ae10d2eb4a7ed5b00ca"
dependencies = [
"anyhow",
"cargo_metadata",
"cfg-if",
"regex",
"rustversion",
"time",
@ -5818,23 +5873,7 @@ dependencies = [
"nix 0.26.4",
"scoped-tls",
"smallvec",
"wayland-sys 0.31.1",
]
[[package]]
name = "wayland-client"
version = "0.29.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f3b068c05a039c9f755f881dc50f01732214f5685e379829759088967c46715"
dependencies = [
"bitflags 1.3.2",
"downcast-rs",
"libc",
"nix 0.24.3",
"scoped-tls",
"wayland-commons",
"wayland-scanner 0.29.5",
"wayland-sys 0.29.5",
"wayland-sys",
]
[[package]]
@ -5846,44 +5885,31 @@ dependencies = [
"bitflags 2.4.1",
"nix 0.26.4",
"wayland-backend",
"wayland-scanner 0.31.0",
"wayland-scanner",
]
[[package]]
name = "wayland-commons"
version = "0.29.5"
name = "wayland-csd-frame"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902"
checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e"
dependencies = [
"nix 0.24.3",
"once_cell",
"smallvec",
"wayland-sys 0.29.5",
"bitflags 2.4.1",
"cursor-icon",
"wayland-backend",
]
[[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",
"xcursor",
]
[[package]]
name = "wayland-protocols"
version = "0.29.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b950621f9354b322ee817a23474e479b34be96c2e909c14f7bc0100e9a970bc6"
dependencies = [
"bitflags 1.3.2",
"wayland-client 0.29.5",
"wayland-commons",
"wayland-scanner 0.29.5",
]
[[package]]
name = "wayland-protocols"
version = "0.31.0"
@ -5892,8 +5918,21 @@ checksum = "e253d7107ba913923dc253967f35e8561a3c65f914543e46843c88ddd729e21c"
dependencies = [
"bitflags 2.4.1",
"wayland-backend",
"wayland-client 0.31.1",
"wayland-scanner 0.31.0",
"wayland-client",
"wayland-scanner",
]
[[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",
"wayland-client",
"wayland-protocols",
"wayland-scanner",
]
[[package]]
@ -5904,20 +5943,9 @@ checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6"
dependencies = [
"bitflags 2.4.1",
"wayland-backend",
"wayland-client 0.31.1",
"wayland-protocols 0.31.0",
"wayland-scanner 0.31.0",
]
[[package]]
name = "wayland-scanner"
version = "0.29.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53"
dependencies = [
"proc-macro2",
"quote",
"xml-rs",
"wayland-client",
"wayland-protocols",
"wayland-scanner",
]
[[package]]
@ -5931,17 +5959,6 @@ dependencies = [
"quote",
]
[[package]]
name = "wayland-sys"
version = "0.29.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "be12ce1a3c39ec7dba25594b97b42cb3195d54953ddb9d3d95a7c3902bc6e9d4"
dependencies = [
"dlib",
"lazy_static",
"pkg-config",
]
[[package]]
name = "wayland-sys"
version = "0.31.1"
@ -5950,6 +5967,7 @@ checksum = "15a0c8eaff5216d07f226cb7a549159267f3467b289d9a2e52fd3ef5aae2b7af"
dependencies = [
"dlib",
"log",
"once_cell",
"pkg-config",
]
@ -5991,7 +6009,7 @@ dependencies = [
"log",
"ndk-context",
"objc",
"raw-window-handle",
"raw-window-handle 0.5.2",
"url",
"web-sys",
]
@ -6015,7 +6033,7 @@ dependencies = [
"naga",
"parking_lot",
"profiling",
"raw-window-handle",
"raw-window-handle 0.5.2",
"serde",
"smallvec",
"static_assertions",
@ -6040,7 +6058,7 @@ dependencies = [
"naga",
"parking_lot",
"profiling",
"raw-window-handle",
"raw-window-handle 0.5.2",
"ron",
"rustc-hash",
"serde",
@ -6082,7 +6100,7 @@ dependencies = [
"parking_lot",
"profiling",
"range-alloc",
"raw-window-handle",
"raw-window-handle 0.5.2",
"renderdoc-sys",
"rustc-hash",
"smallvec",
@ -6418,37 +6436,51 @@ checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
[[package]]
name = "winit"
version = "0.28.7"
version = "0.29.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9596d90b45384f5281384ab204224876e8e8bf7d58366d9b795ad99aa9894b94"
checksum = "4c824f11941eeae66ec71111cc2674373c772f482b58939bb4066b642aa2ffcf"
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",
"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",
"wayland-protocols 0.29.5",
"wayland-scanner 0.29.5",
"wasm-bindgen-futures",
"wayland-backend",
"wayland-client",
"wayland-protocols",
"wayland-protocols-plasma",
"web-sys",
"windows-sys 0.45.0",
"web-time",
"windows-sys 0.48.0",
"x11-dl",
"x11rb 0.13.0",
"xkbcommon-dl",
]
[[package]]
@ -6494,8 +6526,8 @@ dependencies = [
"thiserror",
"tree_magic_mini",
"wayland-backend",
"wayland-client 0.31.1",
"wayland-protocols 0.31.0",
"wayland-client",
"wayland-protocols",
"wayland-protocols-wlr",
]
@ -6516,11 +6548,26 @@ version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1641b26d4dec61337c35a1b1aaf9e3cba8f46f0b43636c609ab0291a648040a"
dependencies = [
"gethostname",
"gethostname 0.3.0",
"nix 0.26.4",
"winapi",
"winapi-wsapoll",
"x11rb-protocol",
"x11rb-protocol 0.12.0",
]
[[package]]
name = "x11rb"
version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8f25ead8c7e4cba123243a6367da5d3990e0d3affa708ea19dce96356bd9f1a"
dependencies = [
"as-raw-xcb-connection",
"gethostname 0.4.3",
"libc",
"libloading 0.8.1",
"once_cell",
"rustix",
"x11rb-protocol 0.13.0",
]
[[package]]
@ -6532,12 +6579,37 @@ dependencies = [
"nix 0.26.4",
]
[[package]]
name = "x11rb-protocol"
version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e63e71c4b8bd9ffec2c963173a4dc4cbde9ee96961d4fcb4429db9929b606c34"
[[package]]
name = "xcursor"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a0ccd7b4a5345edfcd0c3535718a4e9ff7798ffc536bb5b5a0e26ff84732911"
[[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"

View File

@ -46,7 +46,7 @@ tracing-subscriber = { version = "0.3.18", features = ["env-filter"] }
naga = { version = "0.14.2", features = ["validate", "wgsl-out"] }
naga_oil = "0.11.0"
wgpu = "0.18.0"
egui = "0.24.1"
egui = "0.25.0"
[workspace.lints.rust]
# Clippy nightly often adds new/buggy lints that we want to ignore.
@ -99,3 +99,9 @@ inherits = "release"
# is not yet in the latest wgpu release. TODO: Remove when it is.
wgpu = { git = "https://github.com/gfx-rs/wgpu", branch = "v0.18" }
naga = { git = "https://github.com/gfx-rs/wgpu", branch = "v0.18" }
# https://github.com/emilk/egui/pull/3812
egui = { git = "https://github.com/ruffle-rs/egui", branch = "consume_keys"}
egui_extras = { git = "https://github.com/ruffle-rs/egui", branch = "consume_keys"}
egui-winit = { git = "https://github.com/ruffle-rs/egui", branch = "consume_keys"}
egui-wgpu = { git = "https://github.com/ruffle-rs/egui", branch = "consume_keys"}

View File

@ -55,7 +55,7 @@ hashbrown = { version = "0.14.3", features = ["raw"] }
scopeguard = "1.2.0"
fluent-templates = "0.8.0"
egui = { workspace = true, optional = true }
egui_extras = { version = "0.24.2", optional = true }
egui_extras = { version = "0.25.0", optional = true }
png = { version = "0.17.11", optional = true }
flv-rs = { path = "../flv" }
async-channel = "2.1.1"

View File

@ -14,10 +14,10 @@ workspace = true
clap = { version = "4.4.17", features = ["derive"] }
cpal = "0.15.2"
egui = { workspace = true }
egui_extras = { version = "0.24.2", features = ["image"] }
egui-wgpu = { version = "0.24.1", features = ["winit"] }
egui_extras = { version = "0.25.0", features = ["image"] }
egui-wgpu = { version = "0.25.0", features = ["winit"] }
image = { version = "0.24", features = ["png"] }
egui-winit = "0.24.1"
egui-winit = "0.25.0"
fontdb = "0.16"
ruffle_core = { path = "../core", features = ["audio", "clap", "mp3", "nellymoser", "default_compatibility_rules", "egui"] }
ruffle_render = { path = "../render", features = ["clap"] }
@ -26,7 +26,7 @@ ruffle_video_software = { path = "../video/software", optional = true }
tracing = { workspace = true}
tracing-subscriber = { workspace = true }
generational-arena = "0.2.9"
winit = "0.28.7"
winit = "0.29.10"
webbrowser = "0.8.12"
url = "2.5.0"
arboard = { version = "3.3.0", features = ["wayland-data-control"] }

View File

@ -3,8 +3,8 @@ use crate::custom_event::RuffleEvent;
use crate::gui::{GuiController, MENU_HEIGHT};
use crate::player::{PlayerController, PlayerOptions};
use crate::util::{
get_screen_size, parse_url, pick_file, plot_stats_in_tracy, winit_key_to_char,
winit_to_ruffle_key_code, winit_to_ruffle_text_control,
get_screen_size, parse_url, pick_file, plot_stats_in_tracy, winit_to_ruffle_key_code,
winit_to_ruffle_text_control,
};
use anyhow::{Context, Error};
use ruffle_core::{PlayerEvent, StageDisplayState};
@ -14,8 +14,9 @@ use std::rc::Rc;
use std::time::{Duration, Instant};
use url::Url;
use winit::dpi::{LogicalSize, PhysicalPosition, PhysicalSize, Size};
use winit::event::{ElementState, KeyboardInput, ModifiersState, VirtualKeyCode, WindowEvent};
use winit::event::{ElementState, KeyEvent, Modifiers, WindowEvent};
use winit::event_loop::{ControlFlow, EventLoop, EventLoopBuilder};
use winit::keyboard::{Key, NamedKey};
use winit::window::{Fullscreen, Icon, Window, WindowBuilder};
pub struct App {
@ -35,7 +36,7 @@ impl App {
let icon =
Icon::from_rgba(icon_bytes.to_vec(), 32, 32).context("Couldn't load app icon")?;
let event_loop = EventLoopBuilder::with_user_event().build();
let event_loop = EventLoopBuilder::with_user_event().build()?;
let min_window_size = (16, if opt.no_gui { 16 } else { MENU_HEIGHT + 16 }).into();
let max_window_size = get_screen_size(&event_loop);
@ -78,7 +79,7 @@ impl App {
})
}
pub fn run(mut self) -> ! {
pub fn run(mut self) -> Result<(), Error> {
enum LoadingState {
Loading,
WaitingForResize,
@ -89,7 +90,7 @@ impl App {
let mut time = Instant::now();
let mut next_frame_time = None;
let mut minimized = false;
let mut modifiers = ModifiersState::empty();
let mut modifiers = Modifiers::default();
let mut fullscreen_down = false;
if self.opt.movie_url.is_none() {
@ -100,10 +101,10 @@ impl App {
// Poll UI events.
let event_loop = self.event_loop.take().expect("App already running");
event_loop.run(move |event, _window_target, control_flow| {
event_loop.run(move |event, elwt| {
let mut check_redraw = false;
match event {
winit::event::Event::LoopDestroyed => {
winit::event::Event::LoopExiting => {
if let Some(mut player) = self.player.get() {
player.flush_shared_objects();
}
@ -112,9 +113,9 @@ impl App {
}
// Core loop
winit::event::Event::MainEventsCleared
if matches!(loaded, LoadingState::Loaded) =>
{
// [NA] This used to be called `MainEventsCleared`, but I think the behaviour is different now.
// We should look at changing our tick to happen somewhere else if we see any behavioural problems.
winit::event::Event::AboutToWait if matches!(loaded, LoadingState::Loaded) => {
let new_time = Instant::now();
let dt = new_time.duration_since(time).as_micros();
if dt > 0 {
@ -130,7 +131,10 @@ impl App {
}
// Render
winit::event::Event::RedrawRequested(_) => {
winit::event::Event::WindowEvent {
event: WindowEvent::RedrawRequested,
..
} => {
// Don't render when minimized to avoid potential swap chain errors in `wgpu`.
if !minimized {
if let Some(mut player) = self.player.get() {
@ -156,7 +160,7 @@ impl App {
};
match event {
WindowEvent::CloseRequested => {
*control_flow = ControlFlow::Exit;
elwt.exit();
return;
}
WindowEvent::Resized(size) => {
@ -211,7 +215,7 @@ impl App {
MouseButton::Left => RuffleMouseButton::Left,
MouseButton::Right => RuffleMouseButton::Right,
MouseButton::Middle => RuffleMouseButton::Middle,
MouseButton::Other(_) => RuffleMouseButton::Unknown,
_ => RuffleMouseButton::Unknown,
};
let event = match state {
ElementState::Pressed => PlayerEvent::MouseDown { x, y, button },
@ -260,14 +264,14 @@ impl App {
WindowEvent::ModifiersChanged(new_modifiers) => {
modifiers = new_modifiers;
}
WindowEvent::KeyboardInput { input, .. } => {
WindowEvent::KeyboardInput { event, .. } => {
// Handle fullscreen keyboard shortcuts: Alt+Return, Escape.
match input {
KeyboardInput {
match event {
KeyEvent {
state: ElementState::Pressed,
virtual_keycode: Some(VirtualKeyCode::Return),
logical_key: Key::Named(NamedKey::Enter),
..
} if modifiers.alt() => {
} if modifiers.state().alt_key() => {
if !fullscreen_down {
if let Some(mut player) = self.player.get() {
player.update(|uc| {
@ -278,16 +282,16 @@ impl App {
fullscreen_down = true;
return;
}
KeyboardInput {
KeyEvent {
state: ElementState::Released,
virtual_keycode: Some(VirtualKeyCode::Return),
logical_key: Key::Named(NamedKey::Enter),
..
} if fullscreen_down => {
fullscreen_down = false;
}
KeyboardInput {
KeyEvent {
state: ElementState::Pressed,
virtual_keycode: Some(VirtualKeyCode::Escape),
logical_key: Key::Named(NamedKey::Escape),
..
} => {
if let Some(mut player) = self.player.get() {
@ -304,37 +308,41 @@ impl App {
_ => (),
}
if let Some(key) = input.virtual_keycode {
let key_code = winit_to_ruffle_key_code(key);
let key_char = winit_key_to_char(key, modifiers.shift());
match input.state {
ElementState::Pressed => {
self.player.handle_event(PlayerEvent::KeyDown {
key_code,
key_char,
let key_code = winit_to_ruffle_key_code(&event);
// [NA] TODO: This event used to give a single char. `last()` is functionally the same,
// but we may want to be better at this in the future.
let key_char = event.text.clone().and_then(|text| text.chars().last());
let mut allow_text = true;
match &event.state {
ElementState::Pressed => {
self.player
.handle_event(PlayerEvent::KeyDown { key_code, key_char });
if let Some(control_code) =
winit_to_ruffle_text_control(&event, &modifiers)
{
self.player.handle_event(PlayerEvent::TextControl {
code: control_code,
});
if let Some(control_code) =
winit_to_ruffle_text_control(key, modifiers)
{
self.player.handle_event(PlayerEvent::TextControl {
code: control_code,
});
}
allow_text = false;
}
ElementState::Released => {
self.player.handle_event(PlayerEvent::KeyUp {
key_code,
key_char,
});
}
};
check_redraw = true;
}
}
WindowEvent::ReceivedCharacter(codepoint) => {
let event = PlayerEvent::TextInput { codepoint };
self.player.handle_event(event);
}
ElementState::Released => {
self.player
.handle_event(PlayerEvent::KeyUp { key_code, key_char });
}
};
check_redraw = true;
if allow_text {
if let Some(text) = event.text {
for codepoint in text.chars() {
self.player
.handle_event(PlayerEvent::TextInput { codepoint });
}
check_redraw = true;
}
}
}
_ => (),
}
@ -385,7 +393,7 @@ impl App {
self.window.scale_factor(),
);
self.window.set_inner_size(window_size);
let _ = self.window.request_inner_size(window_size);
self.window.set_fullscreen(if self.opt.fullscreen {
Some(Fullscreen::Borderless(None))
} else {
@ -441,7 +449,7 @@ impl App {
}
winit::event::Event::UserEvent(RuffleEvent::ExitRequested) => {
*control_flow = ControlFlow::Exit;
elwt.exit();
return;
}
@ -458,7 +466,7 @@ impl App {
}
// After polling events, sleep the event loop until the next event or the next frame.
*control_flow = if matches!(loaded, LoadingState::Loaded) {
elwt.set_control_flow(if matches!(loaded, LoadingState::Loaded) {
if let Some(next_frame_time) = next_frame_time {
ControlFlow::WaitUntil(next_frame_time)
} else {
@ -468,7 +476,8 @@ impl App {
}
} else {
ControlFlow::Wait
};
});
});
})?;
Ok(())
}
}

View File

@ -23,7 +23,6 @@ use winit::window::{Theme, Window};
/// Integration layer connecting wgpu+winit to egui.
pub struct GuiController {
descriptors: Arc<Descriptors>,
egui_ctx: egui::Context,
egui_winit: egui_winit::State,
egui_renderer: egui_wgpu::renderer::Renderer,
gui: RuffleGui,
@ -92,7 +91,8 @@ impl GuiController {
egui_ctx.set_visuals(egui::Visuals::light());
}
let mut egui_winit = egui_winit::State::new(ViewportId::ROOT, window.as_ref(), None, None);
let mut egui_winit =
egui_winit::State::new(egui_ctx, ViewportId::ROOT, window.as_ref(), None, None);
egui_winit.set_max_texture_side(descriptors.limits.max_texture_dimension_2d as usize);
let movie_view_renderer = Arc::new(MovieViewRenderer::new(
@ -107,13 +107,12 @@ impl GuiController {
let gui = RuffleGui::new(event_loop, opt.movie_url.clone(), PlayerOptions::from(opt));
let system_fonts =
load_system_fonts(font_database, gui.locale.to_owned()).unwrap_or_default();
egui_ctx.set_fonts(system_fonts);
egui_winit.egui_ctx().set_fonts(system_fonts);
egui_extras::install_image_loaders(&egui_ctx);
egui_extras::install_image_loaders(egui_winit.egui_ctx());
Ok(Self {
descriptors: Arc::new(descriptors),
egui_ctx,
egui_winit,
egui_renderer,
gui,
@ -163,10 +162,10 @@ impl GuiController {
Theme::Dark => egui::Visuals::dark(),
Theme::Light => egui::Visuals::light(),
};
self.egui_ctx.set_visuals(visuals);
self.egui_winit.egui_ctx().set_visuals(visuals);
}
let response = self.egui_winit.on_window_event(&self.egui_ctx, event);
let response = self.egui_winit.on_window_event(&self.window, event);
if response.repaint {
self.window.request_redraw();
}
@ -203,7 +202,7 @@ impl GuiController {
let raw_input = self.egui_winit.take_egui_input(&self.window);
let show_menu = self.window.fullscreen().is_none() && !self.no_gui;
let mut full_output = self.egui_ctx.run(raw_input, |context| {
let mut full_output = self.egui_winit.egui_ctx().run(raw_input, |context| {
self.gui.update(
context,
show_menu,
@ -222,7 +221,7 @@ impl GuiController {
.repaint_delay;
// If we're not in a UI, tell egui which cursor we prefer to use instead
if !self.egui_ctx.wants_pointer_input() {
if !self.egui_winit.egui_ctx().wants_pointer_input() {
if let Some(player) = player.as_deref() {
full_output.platform_output.cursor_icon = player
.ui()
@ -231,14 +230,12 @@ impl GuiController {
.cursor();
}
}
self.egui_winit.handle_platform_output(
&self.window,
&self.egui_ctx,
full_output.platform_output,
);
self.egui_winit
.handle_platform_output(&self.window, full_output.platform_output);
let clipped_primitives = self
.egui_ctx
.egui_winit
.egui_ctx()
.tessellate(full_output.shapes, full_output.pixels_per_point);
let scale_factor = self.window.scale_factor() as f32;

View File

@ -159,7 +159,7 @@ fn main() -> Result<(), Error> {
let result = if opt.timedemo {
time_demo::run_timedemo(opt)
} else {
App::new(opt).map(|app| app.run())
App::new(opt).and_then(|app| app.run())
};
#[cfg(windows)]
if let Err(error) = &result {

View File

@ -5,39 +5,40 @@ use ruffle_core::events::{KeyCode, TextControlCode};
use std::path::{Path, PathBuf};
use url::Url;
use winit::dpi::PhysicalSize;
use winit::event::{ModifiersState, VirtualKeyCode};
use winit::event::{KeyEvent, Modifiers};
use winit::event_loop::EventLoop;
use winit::keyboard::{Key, KeyLocation, NamedKey};
/// Converts a `VirtualKeyCode` and `ModifiersState` to a Ruffle `TextControlCode`.
/// Converts a winit event to a Ruffle `TextControlCode`.
/// Returns `None` if there is no match.
/// TODO: Handle Ctrl+Arrows and Home/End keys
pub fn winit_to_ruffle_text_control(
key: VirtualKeyCode,
modifiers: ModifiersState,
event: &KeyEvent,
modifiers: &Modifiers,
) -> Option<TextControlCode> {
let shift = modifiers.contains(ModifiersState::SHIFT);
let ctrl_cmd = modifiers.contains(ModifiersState::CTRL)
|| (modifiers.contains(ModifiersState::LOGO) && cfg!(target_os = "macos"));
let shift = modifiers.state().shift_key();
let ctrl_cmd = modifiers.state().control_key()
|| (modifiers.state().super_key() && cfg!(target_os = "macos"));
if ctrl_cmd {
match key {
VirtualKeyCode::A => Some(TextControlCode::SelectAll),
VirtualKeyCode::C => Some(TextControlCode::Copy),
VirtualKeyCode::V => Some(TextControlCode::Paste),
VirtualKeyCode::X => Some(TextControlCode::Cut),
match event.logical_key.as_ref() {
Key::Character("a") => Some(TextControlCode::SelectAll),
Key::Character("c") => Some(TextControlCode::Copy),
Key::Character("v") => Some(TextControlCode::Paste),
Key::Character("x") => Some(TextControlCode::Cut),
_ => None,
}
} else {
match key {
VirtualKeyCode::Back => Some(TextControlCode::Backspace),
VirtualKeyCode::Delete => Some(TextControlCode::Delete),
VirtualKeyCode::Left => {
match event.logical_key.as_ref() {
Key::Named(NamedKey::Backspace) => Some(TextControlCode::Backspace),
Key::Named(NamedKey::Delete) => Some(TextControlCode::Delete),
Key::Named(NamedKey::ArrowLeft) => {
if shift {
Some(TextControlCode::SelectLeft)
} else {
Some(TextControlCode::MoveLeft)
}
}
VirtualKeyCode::Right => {
Key::Named(NamedKey::ArrowRight) => {
if shift {
Some(TextControlCode::SelectRight)
} else {
@ -49,241 +50,121 @@ pub fn winit_to_ruffle_text_control(
}
}
/// Convert a winit `VirtualKeyCode` into a Ruffle `KeyCode`.
/// Convert a winit event into a Ruffle `KeyCode`.
/// Return `KeyCode::Unknown` if there is no matching Flash key code.
pub fn winit_to_ruffle_key_code(key_code: VirtualKeyCode) -> KeyCode {
match key_code {
VirtualKeyCode::Back => KeyCode::Backspace,
VirtualKeyCode::Tab => KeyCode::Tab,
VirtualKeyCode::Return => KeyCode::Return,
VirtualKeyCode::LShift | VirtualKeyCode::RShift => KeyCode::Shift,
VirtualKeyCode::LControl | VirtualKeyCode::RControl => KeyCode::Control,
VirtualKeyCode::LAlt | VirtualKeyCode::RAlt => KeyCode::Alt,
VirtualKeyCode::Capital => KeyCode::CapsLock,
VirtualKeyCode::Escape => KeyCode::Escape,
VirtualKeyCode::Space => KeyCode::Space,
VirtualKeyCode::Key0 => KeyCode::Key0,
VirtualKeyCode::Key1 => KeyCode::Key1,
VirtualKeyCode::Key2 => KeyCode::Key2,
VirtualKeyCode::Key3 => KeyCode::Key3,
VirtualKeyCode::Key4 => KeyCode::Key4,
VirtualKeyCode::Key5 => KeyCode::Key5,
VirtualKeyCode::Key6 => KeyCode::Key6,
VirtualKeyCode::Key7 => KeyCode::Key7,
VirtualKeyCode::Key8 => KeyCode::Key8,
VirtualKeyCode::Key9 => KeyCode::Key9,
VirtualKeyCode::A => KeyCode::A,
VirtualKeyCode::B => KeyCode::B,
VirtualKeyCode::C => KeyCode::C,
VirtualKeyCode::D => KeyCode::D,
VirtualKeyCode::E => KeyCode::E,
VirtualKeyCode::F => KeyCode::F,
VirtualKeyCode::G => KeyCode::G,
VirtualKeyCode::H => KeyCode::H,
VirtualKeyCode::I => KeyCode::I,
VirtualKeyCode::J => KeyCode::J,
VirtualKeyCode::K => KeyCode::K,
VirtualKeyCode::L => KeyCode::L,
VirtualKeyCode::M => KeyCode::M,
VirtualKeyCode::N => KeyCode::N,
VirtualKeyCode::O => KeyCode::O,
VirtualKeyCode::P => KeyCode::P,
VirtualKeyCode::Q => KeyCode::Q,
VirtualKeyCode::R => KeyCode::R,
VirtualKeyCode::S => KeyCode::S,
VirtualKeyCode::T => KeyCode::T,
VirtualKeyCode::U => KeyCode::U,
VirtualKeyCode::V => KeyCode::V,
VirtualKeyCode::W => KeyCode::W,
VirtualKeyCode::X => KeyCode::X,
VirtualKeyCode::Y => KeyCode::Y,
VirtualKeyCode::Z => KeyCode::Z,
VirtualKeyCode::Semicolon => KeyCode::Semicolon,
VirtualKeyCode::Equals => KeyCode::Equals,
VirtualKeyCode::Comma => KeyCode::Comma,
VirtualKeyCode::Minus => KeyCode::Minus,
VirtualKeyCode::Period => KeyCode::Period,
VirtualKeyCode::Slash => KeyCode::Slash,
VirtualKeyCode::Grave => KeyCode::Grave,
VirtualKeyCode::LBracket => KeyCode::LBracket,
VirtualKeyCode::Backslash => KeyCode::Backslash,
VirtualKeyCode::RBracket => KeyCode::RBracket,
VirtualKeyCode::Apostrophe => KeyCode::Apostrophe,
VirtualKeyCode::Numpad0 => KeyCode::Numpad0,
VirtualKeyCode::Numpad1 => KeyCode::Numpad1,
VirtualKeyCode::Numpad2 => KeyCode::Numpad2,
VirtualKeyCode::Numpad3 => KeyCode::Numpad3,
VirtualKeyCode::Numpad4 => KeyCode::Numpad4,
VirtualKeyCode::Numpad5 => KeyCode::Numpad5,
VirtualKeyCode::Numpad6 => KeyCode::Numpad6,
VirtualKeyCode::Numpad7 => KeyCode::Numpad7,
VirtualKeyCode::Numpad8 => KeyCode::Numpad8,
VirtualKeyCode::Numpad9 => KeyCode::Numpad9,
VirtualKeyCode::NumpadMultiply => KeyCode::Multiply,
VirtualKeyCode::NumpadAdd => KeyCode::Plus,
VirtualKeyCode::NumpadSubtract => KeyCode::NumpadMinus,
VirtualKeyCode::NumpadDecimal => KeyCode::NumpadPeriod,
VirtualKeyCode::NumpadDivide => KeyCode::NumpadSlash,
VirtualKeyCode::PageUp => KeyCode::PgUp,
VirtualKeyCode::PageDown => KeyCode::PgDown,
VirtualKeyCode::End => KeyCode::End,
VirtualKeyCode::Home => KeyCode::Home,
VirtualKeyCode::Left => KeyCode::Left,
VirtualKeyCode::Up => KeyCode::Up,
VirtualKeyCode::Right => KeyCode::Right,
VirtualKeyCode::Down => KeyCode::Down,
VirtualKeyCode::Insert => KeyCode::Insert,
VirtualKeyCode::Delete => KeyCode::Delete,
VirtualKeyCode::Pause => KeyCode::Pause,
VirtualKeyCode::Scroll => KeyCode::ScrollLock,
VirtualKeyCode::F1 => KeyCode::F1,
VirtualKeyCode::F2 => KeyCode::F2,
VirtualKeyCode::F3 => KeyCode::F3,
VirtualKeyCode::F4 => KeyCode::F4,
VirtualKeyCode::F5 => KeyCode::F5,
VirtualKeyCode::F6 => KeyCode::F6,
VirtualKeyCode::F7 => KeyCode::F7,
VirtualKeyCode::F8 => KeyCode::F8,
VirtualKeyCode::F9 => KeyCode::F9,
VirtualKeyCode::F10 => KeyCode::F10,
VirtualKeyCode::F11 => KeyCode::F11,
VirtualKeyCode::F12 => KeyCode::F12,
VirtualKeyCode::F13 => KeyCode::F13,
VirtualKeyCode::F14 => KeyCode::F14,
VirtualKeyCode::F15 => KeyCode::F15,
VirtualKeyCode::F16 => KeyCode::F16,
VirtualKeyCode::F17 => KeyCode::F17,
VirtualKeyCode::F18 => KeyCode::F18,
VirtualKeyCode::F19 => KeyCode::F19,
VirtualKeyCode::F20 => KeyCode::F20,
VirtualKeyCode::F21 => KeyCode::F21,
VirtualKeyCode::F22 => KeyCode::F22,
VirtualKeyCode::F23 => KeyCode::F23,
VirtualKeyCode::F24 => KeyCode::F24,
pub fn winit_to_ruffle_key_code(event: &KeyEvent) -> KeyCode {
match event.logical_key.as_ref() {
Key::Named(NamedKey::Backspace) => KeyCode::Backspace,
Key::Named(NamedKey::Tab) => KeyCode::Tab,
Key::Named(NamedKey::Enter) => KeyCode::Return,
Key::Named(NamedKey::Shift) => KeyCode::Shift,
Key::Named(NamedKey::Control) => KeyCode::Control,
Key::Named(NamedKey::Alt) => KeyCode::Alt,
Key::Named(NamedKey::CapsLock) => KeyCode::CapsLock,
Key::Named(NamedKey::Escape) => KeyCode::Escape,
Key::Named(NamedKey::Space) => KeyCode::Space,
Key::Character("0") if event.location == KeyLocation::Numpad => KeyCode::Numpad0,
Key::Character("1") if event.location == KeyLocation::Numpad => KeyCode::Numpad1,
Key::Character("2") if event.location == KeyLocation::Numpad => KeyCode::Numpad2,
Key::Character("3") if event.location == KeyLocation::Numpad => KeyCode::Numpad3,
Key::Character("4") if event.location == KeyLocation::Numpad => KeyCode::Numpad4,
Key::Character("5") if event.location == KeyLocation::Numpad => KeyCode::Numpad5,
Key::Character("6") if event.location == KeyLocation::Numpad => KeyCode::Numpad6,
Key::Character("7") if event.location == KeyLocation::Numpad => KeyCode::Numpad7,
Key::Character("8") if event.location == KeyLocation::Numpad => KeyCode::Numpad8,
Key::Character("9") if event.location == KeyLocation::Numpad => KeyCode::Numpad9,
Key::Character("0") => KeyCode::Key0,
Key::Character("1") => KeyCode::Key1,
Key::Character("2") => KeyCode::Key2,
Key::Character("3") => KeyCode::Key3,
Key::Character("4") => KeyCode::Key4,
Key::Character("5") => KeyCode::Key5,
Key::Character("6") => KeyCode::Key6,
Key::Character("7") => KeyCode::Key7,
Key::Character("8") => KeyCode::Key8,
Key::Character("9") => KeyCode::Key9,
Key::Character("a") => KeyCode::A,
Key::Character("b") => KeyCode::B,
Key::Character("c") => KeyCode::C,
Key::Character("d") => KeyCode::D,
Key::Character("e") => KeyCode::E,
Key::Character("f") => KeyCode::F,
Key::Character("g") => KeyCode::G,
Key::Character("h") => KeyCode::H,
Key::Character("i") => KeyCode::I,
Key::Character("j") => KeyCode::J,
Key::Character("k") => KeyCode::K,
Key::Character("l") => KeyCode::L,
Key::Character("m") => KeyCode::M,
Key::Character("n") => KeyCode::N,
Key::Character("o") => KeyCode::O,
Key::Character("p") => KeyCode::P,
Key::Character("q") => KeyCode::Q,
Key::Character("r") => KeyCode::R,
Key::Character("s") => KeyCode::S,
Key::Character("t") => KeyCode::T,
Key::Character("u") => KeyCode::U,
Key::Character("v") => KeyCode::V,
Key::Character("w") => KeyCode::W,
Key::Character("x") => KeyCode::X,
Key::Character("y") => KeyCode::Y,
Key::Character("z") => KeyCode::Z,
Key::Character(";") => KeyCode::Semicolon,
Key::Character("=") => KeyCode::Equals,
Key::Character(",") => KeyCode::Comma,
Key::Character("-") if event.location == KeyLocation::Numpad => KeyCode::NumpadMinus,
Key::Character("-") => KeyCode::Minus,
Key::Character(".") if event.location == KeyLocation::Numpad => KeyCode::NumpadPeriod,
Key::Character(".") => KeyCode::Period,
Key::Character("/") if event.location == KeyLocation::Numpad => KeyCode::NumpadSlash,
Key::Character("/") => KeyCode::Slash,
Key::Character("`") => KeyCode::Grave,
Key::Character("[") => KeyCode::LBracket,
Key::Character("\\") => KeyCode::Backslash,
Key::Character("]") => KeyCode::RBracket,
Key::Character("'") => KeyCode::Apostrophe,
Key::Character("*") => KeyCode::Multiply,
Key::Character("+") => KeyCode::Plus,
Key::Named(NamedKey::PageUp) => KeyCode::PgUp,
Key::Named(NamedKey::PageDown) => KeyCode::PgDown,
Key::Named(NamedKey::End) => KeyCode::End,
Key::Named(NamedKey::Home) => KeyCode::Home,
Key::Named(NamedKey::ArrowLeft) => KeyCode::Left,
Key::Named(NamedKey::ArrowUp) => KeyCode::Up,
Key::Named(NamedKey::ArrowRight) => KeyCode::Right,
Key::Named(NamedKey::ArrowDown) => KeyCode::Down,
Key::Named(NamedKey::Insert) => KeyCode::Insert,
Key::Named(NamedKey::Delete) => KeyCode::Delete,
Key::Named(NamedKey::Pause) => KeyCode::Pause,
Key::Named(NamedKey::ScrollLock) => KeyCode::ScrollLock,
Key::Named(NamedKey::F1) => KeyCode::F1,
Key::Named(NamedKey::F2) => KeyCode::F2,
Key::Named(NamedKey::F3) => KeyCode::F3,
Key::Named(NamedKey::F4) => KeyCode::F4,
Key::Named(NamedKey::F5) => KeyCode::F5,
Key::Named(NamedKey::F6) => KeyCode::F6,
Key::Named(NamedKey::F7) => KeyCode::F7,
Key::Named(NamedKey::F8) => KeyCode::F8,
Key::Named(NamedKey::F9) => KeyCode::F9,
Key::Named(NamedKey::F10) => KeyCode::F10,
Key::Named(NamedKey::F11) => KeyCode::F11,
Key::Named(NamedKey::F12) => KeyCode::F12,
Key::Named(NamedKey::F13) => KeyCode::F13,
Key::Named(NamedKey::F14) => KeyCode::F14,
Key::Named(NamedKey::F15) => KeyCode::F15,
Key::Named(NamedKey::F16) => KeyCode::F16,
Key::Named(NamedKey::F17) => KeyCode::F17,
Key::Named(NamedKey::F18) => KeyCode::F18,
Key::Named(NamedKey::F19) => KeyCode::F19,
Key::Named(NamedKey::F20) => KeyCode::F20,
Key::Named(NamedKey::F21) => KeyCode::F21,
Key::Named(NamedKey::F22) => KeyCode::F22,
Key::Named(NamedKey::F23) => KeyCode::F23,
Key::Named(NamedKey::F24) => KeyCode::F24,
_ => KeyCode::Unknown,
}
}
/// Return a character for the given key code and shift state.
pub fn winit_key_to_char(key_code: VirtualKeyCode, is_shift_down: bool) -> Option<char> {
// We need to know the character that a keypress outputs for both key down and key up events,
// but the winit keyboard API does not provide a way to do this (winit/#753).
// CharacterReceived events are insufficent because they only fire on key down, not on key up.
// This is a half-measure to map from keyboard keys back to a character, but does will not work fully
// for international layouts.
Some(match (key_code, is_shift_down) {
(VirtualKeyCode::Space, _) => ' ',
(VirtualKeyCode::Key0, _) => '0',
(VirtualKeyCode::Key1, _) => '1',
(VirtualKeyCode::Key2, _) => '2',
(VirtualKeyCode::Key3, _) => '3',
(VirtualKeyCode::Key4, _) => '4',
(VirtualKeyCode::Key5, _) => '5',
(VirtualKeyCode::Key6, _) => '6',
(VirtualKeyCode::Key7, _) => '7',
(VirtualKeyCode::Key8, _) => '8',
(VirtualKeyCode::Key9, _) => '9',
(VirtualKeyCode::A, false) => 'a',
(VirtualKeyCode::A, true) => 'A',
(VirtualKeyCode::B, false) => 'b',
(VirtualKeyCode::B, true) => 'B',
(VirtualKeyCode::C, false) => 'c',
(VirtualKeyCode::C, true) => 'C',
(VirtualKeyCode::D, false) => 'd',
(VirtualKeyCode::D, true) => 'D',
(VirtualKeyCode::E, false) => 'e',
(VirtualKeyCode::E, true) => 'E',
(VirtualKeyCode::F, false) => 'f',
(VirtualKeyCode::F, true) => 'F',
(VirtualKeyCode::G, false) => 'g',
(VirtualKeyCode::G, true) => 'G',
(VirtualKeyCode::H, false) => 'h',
(VirtualKeyCode::H, true) => 'H',
(VirtualKeyCode::I, false) => 'i',
(VirtualKeyCode::I, true) => 'I',
(VirtualKeyCode::J, false) => 'j',
(VirtualKeyCode::J, true) => 'J',
(VirtualKeyCode::K, false) => 'k',
(VirtualKeyCode::K, true) => 'K',
(VirtualKeyCode::L, false) => 'l',
(VirtualKeyCode::L, true) => 'L',
(VirtualKeyCode::M, false) => 'm',
(VirtualKeyCode::M, true) => 'M',
(VirtualKeyCode::N, false) => 'n',
(VirtualKeyCode::N, true) => 'N',
(VirtualKeyCode::O, false) => 'o',
(VirtualKeyCode::O, true) => 'O',
(VirtualKeyCode::P, false) => 'p',
(VirtualKeyCode::P, true) => 'P',
(VirtualKeyCode::Q, false) => 'q',
(VirtualKeyCode::Q, true) => 'Q',
(VirtualKeyCode::R, false) => 'r',
(VirtualKeyCode::R, true) => 'R',
(VirtualKeyCode::S, false) => 's',
(VirtualKeyCode::S, true) => 'S',
(VirtualKeyCode::T, false) => 't',
(VirtualKeyCode::T, true) => 'T',
(VirtualKeyCode::U, false) => 'u',
(VirtualKeyCode::U, true) => 'U',
(VirtualKeyCode::V, false) => 'v',
(VirtualKeyCode::V, true) => 'V',
(VirtualKeyCode::W, false) => 'w',
(VirtualKeyCode::W, true) => 'W',
(VirtualKeyCode::X, false) => 'x',
(VirtualKeyCode::X, true) => 'X',
(VirtualKeyCode::Y, false) => 'y',
(VirtualKeyCode::Y, true) => 'Y',
(VirtualKeyCode::Z, false) => 'z',
(VirtualKeyCode::Z, true) => 'Z',
(VirtualKeyCode::Semicolon, false) => ';',
(VirtualKeyCode::Semicolon, true) => ':',
(VirtualKeyCode::Equals, false) => '=',
(VirtualKeyCode::Equals, true) => '+',
(VirtualKeyCode::Comma, false) => ',',
(VirtualKeyCode::Comma, true) => '<',
(VirtualKeyCode::Minus, false) => '-',
(VirtualKeyCode::Minus, true) => '_',
(VirtualKeyCode::Period, false) => '.',
(VirtualKeyCode::Period, true) => '>',
(VirtualKeyCode::Slash, false) => '/',
(VirtualKeyCode::Slash, true) => '?',
(VirtualKeyCode::Grave, false) => '`',
(VirtualKeyCode::Grave, true) => '~',
(VirtualKeyCode::LBracket, false) => '[',
(VirtualKeyCode::LBracket, true) => '{',
(VirtualKeyCode::Backslash, false) => '\\',
(VirtualKeyCode::Backslash, true) => '|',
(VirtualKeyCode::RBracket, false) => ']',
(VirtualKeyCode::RBracket, true) => '}',
(VirtualKeyCode::Apostrophe, false) => '\'',
(VirtualKeyCode::Apostrophe, true) => '"',
(VirtualKeyCode::NumpadMultiply, _) => '*',
(VirtualKeyCode::NumpadAdd, _) => '+',
(VirtualKeyCode::NumpadSubtract, _) => '-',
(VirtualKeyCode::NumpadDecimal, _) => '.',
(VirtualKeyCode::NumpadDivide, _) => '/',
(VirtualKeyCode::Numpad0, false) => '0',
(VirtualKeyCode::Numpad1, false) => '1',
(VirtualKeyCode::Numpad2, false) => '2',
(VirtualKeyCode::Numpad3, false) => '3',
(VirtualKeyCode::Numpad4, false) => '4',
(VirtualKeyCode::Numpad5, false) => '5',
(VirtualKeyCode::Numpad6, false) => '6',
(VirtualKeyCode::Numpad7, false) => '7',
(VirtualKeyCode::Numpad8, false) => '8',
(VirtualKeyCode::Numpad9, false) => '9',
(VirtualKeyCode::NumpadEnter, _) => '\r',
(VirtualKeyCode::Tab, _) => '\t',
(VirtualKeyCode::Return, _) => '\r',
(VirtualKeyCode::Back, _) => '\u{0008}',
_ => return None,
})
}
pub fn get_screen_size(event_loop: &EventLoop<RuffleEvent>) -> PhysicalSize<u32> {
let mut min_x = 0;
let mut min_y = 0;