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" checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"getrandom",
"once_cell", "once_cell",
"serde", "serde",
"version_check", "version_check",
@ -107,20 +108,23 @@ dependencies = [
[[package]] [[package]]
name = "android-activity" name = "android-activity"
version = "0.4.3" version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "64529721f27c2314ced0890ce45e469574a73e5e6fdd6e9da1860eb29285f5e0" checksum = "39b801912a977c3fd52d80511fe1c0c8480c6f957f21ae2ce1b92ffe970cf4b9"
dependencies = [ dependencies = [
"android-properties", "android-properties",
"bitflags 1.3.2", "bitflags 2.4.1",
"cc", "cc",
"cesu8",
"jni 0.21.1",
"jni-sys", "jni-sys",
"libc", "libc",
"log", "log",
"ndk", "ndk 0.8.0",
"ndk-context", "ndk-context",
"ndk-sys", "ndk-sys 0.5.0+25.2.9519653",
"num_enum 0.6.1", "num_enum 0.7.2",
"thiserror",
] ]
[[package]] [[package]]
@ -214,7 +218,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aafb29b107435aa276664c1db8954ac27a6e105cdad3c88287a199eb0e313c08" checksum = "aafb29b107435aa276664c1db8954ac27a6e105cdad3c88287a199eb0e313c08"
dependencies = [ dependencies = [
"clipboard-win", "clipboard-win",
"core-graphics", "core-graphics 0.22.3",
"image", "image",
"log", "log",
"objc", "objc",
@ -224,7 +228,7 @@ dependencies = [
"thiserror", "thiserror",
"winapi", "winapi",
"wl-clipboard-rs", "wl-clipboard-rs",
"x11rb", "x11rb 0.12.0",
] ]
[[package]] [[package]]
@ -248,6 +252,12 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "as-raw-xcb-connection"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b"
[[package]] [[package]]
name = "ash" name = "ash"
version = "0.37.3+1.3.251" version = "0.37.3+1.3.251"
@ -283,9 +293,9 @@ dependencies = [
[[package]] [[package]]
name = "async-io" name = "async-io"
version = "2.2.2" version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6afaa937395a620e33dc6a742c593c01aced20aa376ffb0f628121198578ccc7" checksum = "fb41eb19024a91746eba0773aa5e16036045bbf45733766661099e182ea6a744"
dependencies = [ dependencies = [
"async-lock", "async-lock",
"cfg-if", "cfg-if",
@ -481,21 +491,21 @@ dependencies = [
[[package]] [[package]]
name = "block-sys" name = "block-sys"
version = "0.1.0-beta.1" version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146" checksum = "ae85a0696e7ea3b835a453750bf002770776609115e6d25c6d2ff28a8200f7e7"
dependencies = [ dependencies = [
"objc-sys", "objc-sys",
] ]
[[package]] [[package]]
name = "block2" name = "block2"
version = "0.2.0-alpha.6" version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8dd9e63c1744f755c2f60332b88de39d341e5e86239014ad839bd71c106dec42" checksum = "15b55663a85f33501257357e6421bb33e769d5c9ffb5ba0921c975a123e35e68"
dependencies = [ dependencies = [
"block-sys", "block-sys",
"objc2-encode", "objc2",
] ]
[[package]] [[package]]
@ -596,16 +606,28 @@ dependencies = [
[[package]] [[package]]
name = "calloop" name = "calloop"
version = "0.10.6" version = "0.12.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52e0d00eb1ea24371a97d2da6201c6747a633dc6dc1988ef503403b4c59504a8" checksum = "fba7adb4dd5aa98e5553510223000e7148f621165ec5f9acd7113f6ca4995298"
dependencies = [ dependencies = [
"bitflags 1.3.2", "bitflags 2.4.1",
"log", "log",
"nix 0.25.1", "polling 3.3.2",
"slotmap", "rustix",
"slab",
"thiserror", "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]] [[package]]
@ -893,6 +915,19 @@ dependencies = [
"libc", "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]] [[package]]
name = "core-graphics-types" name = "core-graphics-types"
version = "0.1.3" version = "0.1.3"
@ -947,7 +982,7 @@ dependencies = [
"js-sys", "js-sys",
"libc", "libc",
"mach2", "mach2",
"ndk", "ndk 0.7.0",
"ndk-context", "ndk-context",
"oboe", "oboe",
"once_cell", "once_cell",
@ -1093,6 +1128,12 @@ dependencies = [
"windows-sys 0.48.0", "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]] [[package]]
name = "d3d12" name = "d3d12"
version = "0.7.0" version = "0.7.0"
@ -1366,9 +1407,8 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
[[package]] [[package]]
name = "ecolor" name = "ecolor"
version = "0.24.1" version = "0.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "git+https://github.com/ruffle-rs/egui?branch=consume_keys#bdecb2cbbc5b43e77e98b0524c3678a07a0b4e04"
checksum = "4b7637fc2e74d17e52931bac90ff4fc061ac776ada9c7fa272f24cdca5991972"
dependencies = [ dependencies = [
"bytemuck", "bytemuck",
"serde", "serde",
@ -1376,9 +1416,8 @@ dependencies = [
[[package]] [[package]]
name = "egui" name = "egui"
version = "0.24.1" version = "0.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "git+https://github.com/ruffle-rs/egui?branch=consume_keys#bdecb2cbbc5b43e77e98b0524c3678a07a0b4e04"
checksum = "c55bcb864b764eb889515a38b8924757657a250738ad15126637ee2df291ee6b"
dependencies = [ dependencies = [
"accesskit", "accesskit",
"ahash", "ahash",
@ -1390,9 +1429,8 @@ dependencies = [
[[package]] [[package]]
name = "egui-wgpu" name = "egui-wgpu"
version = "0.24.1" version = "0.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "git+https://github.com/ruffle-rs/egui?branch=consume_keys#bdecb2cbbc5b43e77e98b0524c3678a07a0b4e04"
checksum = "2d8ea73b329649be625fac2c9b190a2a8f9a66f98610c4b09124b596c6695053"
dependencies = [ dependencies = [
"bytemuck", "bytemuck",
"egui", "egui",
@ -1406,14 +1444,13 @@ dependencies = [
[[package]] [[package]]
name = "egui-winit" name = "egui-winit"
version = "0.24.1" version = "0.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "git+https://github.com/ruffle-rs/egui?branch=consume_keys#bdecb2cbbc5b43e77e98b0524c3678a07a0b4e04"
checksum = "3b673606b6606b12b95e3a3194d7882bf5cff302db36a520b8144c7c342e4e84"
dependencies = [ dependencies = [
"arboard", "arboard",
"egui", "egui",
"log", "log",
"raw-window-handle", "raw-window-handle 0.5.2",
"smithay-clipboard", "smithay-clipboard",
"web-time", "web-time",
"webbrowser", "webbrowser",
@ -1422,9 +1459,8 @@ dependencies = [
[[package]] [[package]]
name = "egui_extras" name = "egui_extras"
version = "0.24.2" version = "0.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "git+https://github.com/ruffle-rs/egui?branch=consume_keys#bdecb2cbbc5b43e77e98b0524c3678a07a0b4e04"
checksum = "97624eaf17a16058265d3a3e712e167798655baf7c8f693de25be75cdd6c57b5"
dependencies = [ dependencies = [
"egui", "egui",
"enum-map", "enum-map",
@ -1442,9 +1478,8 @@ checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
[[package]] [[package]]
name = "emath" name = "emath"
version = "0.24.1" version = "0.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "git+https://github.com/ruffle-rs/egui?branch=consume_keys#bdecb2cbbc5b43e77e98b0524c3678a07a0b4e04"
checksum = "a045c6c0b44b35e98513fc1e9d183ab42881ac27caccb9fa345465601f56cce4"
dependencies = [ dependencies = [
"bytemuck", "bytemuck",
"serde", "serde",
@ -1547,9 +1582,8 @@ dependencies = [
[[package]] [[package]]
name = "epaint" name = "epaint"
version = "0.24.1" version = "0.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "git+https://github.com/ruffle-rs/egui?branch=consume_keys#bdecb2cbbc5b43e77e98b0524c3678a07a0b4e04"
checksum = "7d1b9e000d21bab9b535ce78f9f7745be28b3f777f6c7223936561c5c7fefab8"
dependencies = [ dependencies = [
"ab_glyph", "ab_glyph",
"ahash", "ahash",
@ -1866,7 +1900,7 @@ checksum = "98b88c54a38407f7352dd2c4238830115a6377741098ffd1f997c813d0e088a6"
dependencies = [ dependencies = [
"fontconfig-parser", "fontconfig-parser",
"log", "log",
"memmap2 0.9.3", "memmap2",
"slotmap", "slotmap",
"tinyvec", "tinyvec",
"ttf-parser", "ttf-parser",
@ -2135,6 +2169,16 @@ dependencies = [
"winapi", "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]] [[package]]
name = "getrandom" name = "getrandom"
version = "0.2.12" version = "0.2.12"
@ -2495,6 +2539,17 @@ dependencies = [
"cc", "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]] [[package]]
name = "ident_case" name = "ident_case"
version = "1.0.1" version = "1.0.1"
@ -2589,9 +2644,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"js-sys",
"wasm-bindgen",
"web-sys",
] ]
[[package]] [[package]]
@ -3076,15 +3128,6 @@ version = "2.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
[[package]]
name = "memmap2"
version = "0.5.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327"
dependencies = [
"libc",
]
[[package]] [[package]]
name = "memmap2" name = "memmap2"
version = "0.9.3" version = "0.9.3"
@ -3094,15 +3137,6 @@ dependencies = [
"libc", "libc",
] ]
[[package]]
name = "memoffset"
version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
dependencies = [
"autocfg",
]
[[package]] [[package]]
name = "memoffset" name = "memoffset"
version = "0.7.1" version = "0.7.1"
@ -3159,18 +3193,6 @@ dependencies = [
"simd-adler32", "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]] [[package]]
name = "mocket" name = "mocket"
version = "0.1.0" version = "0.1.0"
@ -3263,9 +3285,25 @@ checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0"
dependencies = [ dependencies = [
"bitflags 1.3.2", "bitflags 1.3.2",
"jni-sys", "jni-sys",
"ndk-sys", "ndk-sys 0.4.1+23.1.7779620",
"num_enum 0.5.11", "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", "thiserror",
] ]
@ -3284,6 +3322,15 @@ dependencies = [
"jni-sys", "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]] [[package]]
name = "nellymoser-rs" name = "nellymoser-rs"
version = "0.1.2" version = "0.1.2"
@ -3325,20 +3372,6 @@ dependencies = [
"bitflags 1.3.2", "bitflags 1.3.2",
"cfg-if", "cfg-if",
"libc", "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]] [[package]]
@ -3350,7 +3383,7 @@ dependencies = [
"bitflags 1.3.2", "bitflags 1.3.2",
"cfg-if", "cfg-if",
"libc", "libc",
"memoffset 0.7.1", "memoffset",
"pin-utils", "pin-utils",
] ]
@ -3463,11 +3496,11 @@ dependencies = [
[[package]] [[package]]
name = "num_enum" name = "num_enum"
version = "0.6.1" version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845"
dependencies = [ dependencies = [
"num_enum_derive 0.6.1", "num_enum_derive 0.7.2",
] ]
[[package]] [[package]]
@ -3476,7 +3509,7 @@ version = "0.5.11"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
dependencies = [ dependencies = [
"proc-macro-crate", "proc-macro-crate 1.3.1",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 1.0.109", "syn 1.0.109",
@ -3484,11 +3517,11 @@ dependencies = [
[[package]] [[package]]
name = "num_enum_derive" name = "num_enum_derive"
version = "0.6.1" version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b"
dependencies = [ dependencies = [
"proc-macro-crate", "proc-macro-crate 3.0.0",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.48", "syn 2.0.48",
@ -3532,29 +3565,25 @@ dependencies = [
[[package]] [[package]]
name = "objc-sys" name = "objc-sys"
version = "0.2.0-beta.2" version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7" checksum = "c7c71324e4180d0899963fc83d9d241ac39e699609fc1025a850aadac8257459"
[[package]] [[package]]
name = "objc2" 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" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7e01640f9f2cb1220bbe80325e179e532cb3379ebcd1bf2279d703c19fe3a468" checksum = "559c5a40fdd30eb5e344fbceacf7595a81e242529fb4e21cf5f43fb4f11ff98d"
dependencies = [ dependencies = [
"block2",
"objc-sys", "objc-sys",
"objc2-encode", "objc2-encode",
] ]
[[package]] [[package]]
name = "objc2-encode" name = "objc2-encode"
version = "2.0.0-pre.2" version = "3.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "abfcac41015b00a120608fdaa6938c44cb983fee294351cc4bac7638b4e50512" checksum = "d079845b37af429bfe5dfa76e6d087d788031045b25cfc6fd898486fd9847666"
dependencies = [
"objc-sys",
]
[[package]] [[package]]
name = "objc_exception" name = "objc_exception"
@ -3590,7 +3619,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8868cc237ee02e2d9618539a23a8d228b9bb3fc2e7a5b11eed3831de77c395d0" checksum = "8868cc237ee02e2d9618539a23a8d228b9bb3fc2e7a5b11eed3831de77c395d0"
dependencies = [ dependencies = [
"jni 0.20.0", "jni 0.20.0",
"ndk", "ndk 0.7.0",
"ndk-context", "ndk-context",
"num-derive 0.3.3", "num-derive 0.3.3",
"num-traits", "num-traits",
@ -3944,6 +3973,15 @@ dependencies = [
"toml_edit 0.19.15", "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]] [[package]]
name = "proc-macro-hack" name = "proc-macro-hack"
version = "0.5.20+deprecated" version = "0.5.20+deprecated"
@ -4070,6 +4108,12 @@ version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
[[package]]
name = "raw-window-handle"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42a9830a0e1b9fb145ebb365b8bc4ccd75f290f98c0247deafbbe2c75cefb544"
[[package]] [[package]]
name = "rayon" name = "rayon"
version = "1.8.0" version = "1.8.0"
@ -4225,7 +4269,7 @@ dependencies = [
"objc", "objc",
"objc-foundation", "objc-foundation",
"objc_id", "objc_id",
"raw-window-handle", "raw-window-handle 0.5.2",
"wasm-bindgen", "wasm-bindgen",
"wasm-bindgen-futures", "wasm-bindgen-futures",
"web-sys", "web-sys",
@ -4471,7 +4515,7 @@ dependencies = [
"naga_oil", "naga_oil",
"ouroboros", "ouroboros",
"profiling", "profiling",
"raw-window-handle", "raw-window-handle 0.5.2",
"ruffle_render", "ruffle_render",
"swf", "swf",
"tracing", "tracing",
@ -4727,13 +4771,13 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]] [[package]]
name = "sctk-adwaita" name = "sctk-adwaita"
version = "0.5.4" version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cda4e97be1fd174ccc2aae81c8b694e803fa99b34e8fd0f057a9d70698e3ed09" checksum = "82b2eaf3a5b264a521b988b2e73042e742df700c4f962cde845d1541adb46550"
dependencies = [ dependencies = [
"ab_glyph", "ab_glyph",
"log", "log",
"memmap2 0.5.10", "memmap2",
"smithay-client-toolkit", "smithay-client-toolkit",
"tiny-skia", "tiny-skia",
] ]
@ -4913,31 +4957,47 @@ checksum = "2593d31f82ead8df961d8bd23a64c2ccf2eb5dd34b0a34bfb4dd54011c72009e"
[[package]] [[package]]
name = "smithay-client-toolkit" name = "smithay-client-toolkit"
version = "0.16.1" version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "870427e30b8f2cbe64bf43ec4b86e88fe39b0a84b3f15efd9c9c2d020bc86eb9" checksum = "60e3d9941fa3bacf7c2bf4b065304faa14164151254cd16ce1b1bc8fc381600f"
dependencies = [ dependencies = [
"bitflags 1.3.2", "bitflags 2.4.1",
"calloop", "calloop",
"dlib", "calloop-wayland-source",
"lazy_static", "cursor-icon",
"libc",
"log", "log",
"memmap2 0.5.10", "memmap2",
"nix 0.24.3", "rustix",
"pkg-config", "thiserror",
"wayland-client 0.29.5", "wayland-backend",
"wayland-client",
"wayland-csd-frame",
"wayland-cursor", "wayland-cursor",
"wayland-protocols 0.29.5", "wayland-protocols",
"wayland-protocols-wlr",
"wayland-scanner",
"xkeysym",
] ]
[[package]] [[package]]
name = "smithay-clipboard" name = "smithay-clipboard"
version = "0.6.6" version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a345c870a1fae0b1b779085e81b51e614767c239e93503588e54c5b17f4b0e8" checksum = "0bb62b280ce5a5cba847669933a0948d00904cf83845c944eae96a4738cea1a6"
dependencies = [ dependencies = [
"libc",
"smithay-client-toolkit", "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]] [[package]]
@ -5276,23 +5336,23 @@ dependencies = [
[[package]] [[package]]
name = "tiny-skia" name = "tiny-skia"
version = "0.8.4" version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df8493a203431061e901613751931f047d1971337153f96d0e5e363d6dbf6a67" checksum = "b6a067b809476893fce6a254cf285850ff69c847e6cfbade6a20b655b6c7e80d"
dependencies = [ dependencies = [
"arrayref", "arrayref",
"arrayvec", "arrayvec",
"bytemuck", "bytemuck",
"cfg-if", "cfg-if",
"png", "log",
"tiny-skia-path", "tiny-skia-path",
] ]
[[package]] [[package]]
name = "tiny-skia-path" name = "tiny-skia-path"
version = "0.8.4" version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "adbfb5d3f3dd57a0e11d12f4f13d4ebbbc1b5c15b7ab0a156d030b21da5f677c" checksum = "5de35e8a90052baaaf61f171680ac2f8e925a1e43ea9d2e3a00514772250e541"
dependencies = [ dependencies = [
"arrayref", "arrayref",
"bytemuck", "bytemuck",
@ -5662,20 +5722,15 @@ version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
[[package]]
name = "vec_map"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
[[package]] [[package]]
name = "vergen" name = "vergen"
version = "8.2.10" version = "8.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a78365c3f8ca9dc5428a9f5c6349558c3f9f3eeb65e3fc00b6a981379462947" checksum = "ec0d895592fa7710eba03fe072e614e3dc6a61ab76ae7ae10d2eb4a7ed5b00ca"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"cargo_metadata", "cargo_metadata",
"cfg-if",
"regex", "regex",
"rustversion", "rustversion",
"time", "time",
@ -5818,23 +5873,7 @@ dependencies = [
"nix 0.26.4", "nix 0.26.4",
"scoped-tls", "scoped-tls",
"smallvec", "smallvec",
"wayland-sys 0.31.1", "wayland-sys",
]
[[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",
] ]
[[package]] [[package]]
@ -5846,44 +5885,31 @@ dependencies = [
"bitflags 2.4.1", "bitflags 2.4.1",
"nix 0.26.4", "nix 0.26.4",
"wayland-backend", "wayland-backend",
"wayland-scanner 0.31.0", "wayland-scanner",
] ]
[[package]] [[package]]
name = "wayland-commons" name = "wayland-csd-frame"
version = "0.29.5" version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e"
dependencies = [ dependencies = [
"nix 0.24.3", "bitflags 2.4.1",
"once_cell", "cursor-icon",
"smallvec", "wayland-backend",
"wayland-sys 0.29.5",
] ]
[[package]] [[package]]
name = "wayland-cursor" name = "wayland-cursor"
version = "0.29.5" version = "0.31.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6865c6b66f13d6257bef1cd40cbfe8ef2f150fb8ebbdb1e8e873455931377661" checksum = "a44aa20ae986659d6c77d64d808a046996a932aa763913864dc40c359ef7ad5b"
dependencies = [ dependencies = [
"nix 0.24.3", "nix 0.26.4",
"wayland-client 0.29.5", "wayland-client",
"xcursor", "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]] [[package]]
name = "wayland-protocols" name = "wayland-protocols"
version = "0.31.0" version = "0.31.0"
@ -5892,8 +5918,21 @@ checksum = "e253d7107ba913923dc253967f35e8561a3c65f914543e46843c88ddd729e21c"
dependencies = [ dependencies = [
"bitflags 2.4.1", "bitflags 2.4.1",
"wayland-backend", "wayland-backend",
"wayland-client 0.31.1", "wayland-client",
"wayland-scanner 0.31.0", "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]] [[package]]
@ -5904,20 +5943,9 @@ checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6"
dependencies = [ dependencies = [
"bitflags 2.4.1", "bitflags 2.4.1",
"wayland-backend", "wayland-backend",
"wayland-client 0.31.1", "wayland-client",
"wayland-protocols 0.31.0", "wayland-protocols",
"wayland-scanner 0.31.0", "wayland-scanner",
]
[[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",
] ]
[[package]] [[package]]
@ -5931,17 +5959,6 @@ dependencies = [
"quote", "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]] [[package]]
name = "wayland-sys" name = "wayland-sys"
version = "0.31.1" version = "0.31.1"
@ -5950,6 +5967,7 @@ checksum = "15a0c8eaff5216d07f226cb7a549159267f3467b289d9a2e52fd3ef5aae2b7af"
dependencies = [ dependencies = [
"dlib", "dlib",
"log", "log",
"once_cell",
"pkg-config", "pkg-config",
] ]
@ -5991,7 +6009,7 @@ dependencies = [
"log", "log",
"ndk-context", "ndk-context",
"objc", "objc",
"raw-window-handle", "raw-window-handle 0.5.2",
"url", "url",
"web-sys", "web-sys",
] ]
@ -6015,7 +6033,7 @@ dependencies = [
"naga", "naga",
"parking_lot", "parking_lot",
"profiling", "profiling",
"raw-window-handle", "raw-window-handle 0.5.2",
"serde", "serde",
"smallvec", "smallvec",
"static_assertions", "static_assertions",
@ -6040,7 +6058,7 @@ dependencies = [
"naga", "naga",
"parking_lot", "parking_lot",
"profiling", "profiling",
"raw-window-handle", "raw-window-handle 0.5.2",
"ron", "ron",
"rustc-hash", "rustc-hash",
"serde", "serde",
@ -6082,7 +6100,7 @@ dependencies = [
"parking_lot", "parking_lot",
"profiling", "profiling",
"range-alloc", "range-alloc",
"raw-window-handle", "raw-window-handle 0.5.2",
"renderdoc-sys", "renderdoc-sys",
"rustc-hash", "rustc-hash",
"smallvec", "smallvec",
@ -6418,37 +6436,51 @@ checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
[[package]] [[package]]
name = "winit" name = "winit"
version = "0.28.7" version = "0.29.10"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9596d90b45384f5281384ab204224876e8e8bf7d58366d9b795ad99aa9894b94" checksum = "4c824f11941eeae66ec71111cc2674373c772f482b58939bb4066b642aa2ffcf"
dependencies = [ dependencies = [
"ahash",
"android-activity", "android-activity",
"bitflags 1.3.2", "atomic-waker",
"bitflags 2.4.1",
"bytemuck",
"calloop",
"cfg_aliases", "cfg_aliases",
"core-foundation", "core-foundation",
"core-graphics", "core-graphics 0.23.1",
"dispatch", "cursor-icon",
"instant", "icrate",
"js-sys",
"libc", "libc",
"log", "log",
"mio", "memmap2",
"ndk", "ndk 0.8.0",
"ndk-sys 0.5.0+25.2.9519653",
"objc2", "objc2",
"once_cell", "once_cell",
"orbclient", "orbclient",
"percent-encoding", "percent-encoding",
"raw-window-handle", "raw-window-handle 0.5.2",
"raw-window-handle 0.6.0",
"redox_syscall 0.3.5", "redox_syscall 0.3.5",
"rustix",
"sctk-adwaita", "sctk-adwaita",
"smithay-client-toolkit", "smithay-client-toolkit",
"smol_str",
"unicode-segmentation",
"wasm-bindgen", "wasm-bindgen",
"wayland-client 0.29.5", "wasm-bindgen-futures",
"wayland-commons", "wayland-backend",
"wayland-protocols 0.29.5", "wayland-client",
"wayland-scanner 0.29.5", "wayland-protocols",
"wayland-protocols-plasma",
"web-sys", "web-sys",
"windows-sys 0.45.0", "web-time",
"windows-sys 0.48.0",
"x11-dl", "x11-dl",
"x11rb 0.13.0",
"xkbcommon-dl",
] ]
[[package]] [[package]]
@ -6494,8 +6526,8 @@ dependencies = [
"thiserror", "thiserror",
"tree_magic_mini", "tree_magic_mini",
"wayland-backend", "wayland-backend",
"wayland-client 0.31.1", "wayland-client",
"wayland-protocols 0.31.0", "wayland-protocols",
"wayland-protocols-wlr", "wayland-protocols-wlr",
] ]
@ -6516,11 +6548,26 @@ version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1641b26d4dec61337c35a1b1aaf9e3cba8f46f0b43636c609ab0291a648040a" checksum = "b1641b26d4dec61337c35a1b1aaf9e3cba8f46f0b43636c609ab0291a648040a"
dependencies = [ dependencies = [
"gethostname", "gethostname 0.3.0",
"nix 0.26.4", "nix 0.26.4",
"winapi", "winapi",
"winapi-wsapoll", "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]] [[package]]
@ -6532,12 +6579,37 @@ dependencies = [
"nix 0.26.4", "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]] [[package]]
name = "xcursor" name = "xcursor"
version = "0.3.5" version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a0ccd7b4a5345edfcd0c3535718a4e9ff7798ffc536bb5b5a0e26ff84732911" 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]] [[package]]
name = "xml-rs" name = "xml-rs"
version = "0.8.19" 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 = { version = "0.14.2", features = ["validate", "wgsl-out"] }
naga_oil = "0.11.0" naga_oil = "0.11.0"
wgpu = "0.18.0" wgpu = "0.18.0"
egui = "0.24.1" egui = "0.25.0"
[workspace.lints.rust] [workspace.lints.rust]
# Clippy nightly often adds new/buggy lints that we want to ignore. # 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. # is not yet in the latest wgpu release. TODO: Remove when it is.
wgpu = { git = "https://github.com/gfx-rs/wgpu", branch = "v0.18" } wgpu = { git = "https://github.com/gfx-rs/wgpu", branch = "v0.18" }
naga = { 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" scopeguard = "1.2.0"
fluent-templates = "0.8.0" fluent-templates = "0.8.0"
egui = { workspace = true, optional = true } 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 } png = { version = "0.17.11", optional = true }
flv-rs = { path = "../flv" } flv-rs = { path = "../flv" }
async-channel = "2.1.1" async-channel = "2.1.1"

View File

@ -14,10 +14,10 @@ workspace = true
clap = { version = "4.4.17", features = ["derive"] } clap = { version = "4.4.17", features = ["derive"] }
cpal = "0.15.2" cpal = "0.15.2"
egui = { workspace = true } egui = { workspace = true }
egui_extras = { version = "0.24.2", features = ["image"] } egui_extras = { version = "0.25.0", features = ["image"] }
egui-wgpu = { version = "0.24.1", features = ["winit"] } egui-wgpu = { version = "0.25.0", features = ["winit"] }
image = { version = "0.24", features = ["png"] } image = { version = "0.24", features = ["png"] }
egui-winit = "0.24.1" egui-winit = "0.25.0"
fontdb = "0.16" fontdb = "0.16"
ruffle_core = { path = "../core", features = ["audio", "clap", "mp3", "nellymoser", "default_compatibility_rules", "egui"] } ruffle_core = { path = "../core", features = ["audio", "clap", "mp3", "nellymoser", "default_compatibility_rules", "egui"] }
ruffle_render = { path = "../render", features = ["clap"] } ruffle_render = { path = "../render", features = ["clap"] }
@ -26,7 +26,7 @@ ruffle_video_software = { path = "../video/software", optional = true }
tracing = { workspace = true} tracing = { workspace = true}
tracing-subscriber = { workspace = true } tracing-subscriber = { workspace = true }
generational-arena = "0.2.9" generational-arena = "0.2.9"
winit = "0.28.7" winit = "0.29.10"
webbrowser = "0.8.12" webbrowser = "0.8.12"
url = "2.5.0" url = "2.5.0"
arboard = { version = "3.3.0", features = ["wayland-data-control"] } 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::gui::{GuiController, MENU_HEIGHT};
use crate::player::{PlayerController, PlayerOptions}; use crate::player::{PlayerController, PlayerOptions};
use crate::util::{ use crate::util::{
get_screen_size, parse_url, pick_file, plot_stats_in_tracy, winit_key_to_char, get_screen_size, parse_url, pick_file, plot_stats_in_tracy, winit_to_ruffle_key_code,
winit_to_ruffle_key_code, winit_to_ruffle_text_control, winit_to_ruffle_text_control,
}; };
use anyhow::{Context, Error}; use anyhow::{Context, Error};
use ruffle_core::{PlayerEvent, StageDisplayState}; use ruffle_core::{PlayerEvent, StageDisplayState};
@ -14,8 +14,9 @@ use std::rc::Rc;
use std::time::{Duration, Instant}; use std::time::{Duration, Instant};
use url::Url; use url::Url;
use winit::dpi::{LogicalSize, PhysicalPosition, PhysicalSize, Size}; 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::event_loop::{ControlFlow, EventLoop, EventLoopBuilder};
use winit::keyboard::{Key, NamedKey};
use winit::window::{Fullscreen, Icon, Window, WindowBuilder}; use winit::window::{Fullscreen, Icon, Window, WindowBuilder};
pub struct App { pub struct App {
@ -35,7 +36,7 @@ impl App {
let icon = let icon =
Icon::from_rgba(icon_bytes.to_vec(), 32, 32).context("Couldn't load app 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 min_window_size = (16, if opt.no_gui { 16 } else { MENU_HEIGHT + 16 }).into();
let max_window_size = get_screen_size(&event_loop); 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 { enum LoadingState {
Loading, Loading,
WaitingForResize, WaitingForResize,
@ -89,7 +90,7 @@ impl App {
let mut time = Instant::now(); let mut time = Instant::now();
let mut next_frame_time = None; let mut next_frame_time = None;
let mut minimized = false; let mut minimized = false;
let mut modifiers = ModifiersState::empty(); let mut modifiers = Modifiers::default();
let mut fullscreen_down = false; let mut fullscreen_down = false;
if self.opt.movie_url.is_none() { if self.opt.movie_url.is_none() {
@ -100,10 +101,10 @@ impl App {
// Poll UI events. // Poll UI events.
let event_loop = self.event_loop.take().expect("App already running"); 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; let mut check_redraw = false;
match event { match event {
winit::event::Event::LoopDestroyed => { winit::event::Event::LoopExiting => {
if let Some(mut player) = self.player.get() { if let Some(mut player) = self.player.get() {
player.flush_shared_objects(); player.flush_shared_objects();
} }
@ -112,9 +113,9 @@ impl App {
} }
// Core loop // Core loop
winit::event::Event::MainEventsCleared // [NA] This used to be called `MainEventsCleared`, but I think the behaviour is different now.
if matches!(loaded, LoadingState::Loaded) => // 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 new_time = Instant::now();
let dt = new_time.duration_since(time).as_micros(); let dt = new_time.duration_since(time).as_micros();
if dt > 0 { if dt > 0 {
@ -130,7 +131,10 @@ impl App {
} }
// Render // 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`. // Don't render when minimized to avoid potential swap chain errors in `wgpu`.
if !minimized { if !minimized {
if let Some(mut player) = self.player.get() { if let Some(mut player) = self.player.get() {
@ -156,7 +160,7 @@ impl App {
}; };
match event { match event {
WindowEvent::CloseRequested => { WindowEvent::CloseRequested => {
*control_flow = ControlFlow::Exit; elwt.exit();
return; return;
} }
WindowEvent::Resized(size) => { WindowEvent::Resized(size) => {
@ -211,7 +215,7 @@ impl App {
MouseButton::Left => RuffleMouseButton::Left, MouseButton::Left => RuffleMouseButton::Left,
MouseButton::Right => RuffleMouseButton::Right, MouseButton::Right => RuffleMouseButton::Right,
MouseButton::Middle => RuffleMouseButton::Middle, MouseButton::Middle => RuffleMouseButton::Middle,
MouseButton::Other(_) => RuffleMouseButton::Unknown, _ => RuffleMouseButton::Unknown,
}; };
let event = match state { let event = match state {
ElementState::Pressed => PlayerEvent::MouseDown { x, y, button }, ElementState::Pressed => PlayerEvent::MouseDown { x, y, button },
@ -260,14 +264,14 @@ impl App {
WindowEvent::ModifiersChanged(new_modifiers) => { WindowEvent::ModifiersChanged(new_modifiers) => {
modifiers = new_modifiers; modifiers = new_modifiers;
} }
WindowEvent::KeyboardInput { input, .. } => { WindowEvent::KeyboardInput { event, .. } => {
// Handle fullscreen keyboard shortcuts: Alt+Return, Escape. // Handle fullscreen keyboard shortcuts: Alt+Return, Escape.
match input { match event {
KeyboardInput { KeyEvent {
state: ElementState::Pressed, 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 !fullscreen_down {
if let Some(mut player) = self.player.get() { if let Some(mut player) = self.player.get() {
player.update(|uc| { player.update(|uc| {
@ -278,16 +282,16 @@ impl App {
fullscreen_down = true; fullscreen_down = true;
return; return;
} }
KeyboardInput { KeyEvent {
state: ElementState::Released, state: ElementState::Released,
virtual_keycode: Some(VirtualKeyCode::Return), logical_key: Key::Named(NamedKey::Enter),
.. ..
} if fullscreen_down => { } if fullscreen_down => {
fullscreen_down = false; fullscreen_down = false;
} }
KeyboardInput { KeyEvent {
state: ElementState::Pressed, state: ElementState::Pressed,
virtual_keycode: Some(VirtualKeyCode::Escape), logical_key: Key::Named(NamedKey::Escape),
.. ..
} => { } => {
if let Some(mut player) = self.player.get() { 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(&event);
let key_code = winit_to_ruffle_key_code(key); // [NA] TODO: This event used to give a single char. `last()` is functionally the same,
let key_char = winit_key_to_char(key, modifiers.shift()); // but we may want to be better at this in the future.
match input.state { let key_char = event.text.clone().and_then(|text| text.chars().last());
ElementState::Pressed => { let mut allow_text = true;
self.player.handle_event(PlayerEvent::KeyDown {
key_code, match &event.state {
key_char, 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) = allow_text = false;
winit_to_ruffle_text_control(key, modifiers)
{
self.player.handle_event(PlayerEvent::TextControl {
code: control_code,
});
}
} }
ElementState::Released => { }
self.player.handle_event(PlayerEvent::KeyUp { ElementState::Released => {
key_code, self.player
key_char, .handle_event(PlayerEvent::KeyUp { key_code, key_char });
}); }
} };
};
check_redraw = true;
}
}
WindowEvent::ReceivedCharacter(codepoint) => {
let event = PlayerEvent::TextInput { codepoint };
self.player.handle_event(event);
check_redraw = true; 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.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 { self.window.set_fullscreen(if self.opt.fullscreen {
Some(Fullscreen::Borderless(None)) Some(Fullscreen::Borderless(None))
} else { } else {
@ -441,7 +449,7 @@ impl App {
} }
winit::event::Event::UserEvent(RuffleEvent::ExitRequested) => { winit::event::Event::UserEvent(RuffleEvent::ExitRequested) => {
*control_flow = ControlFlow::Exit; elwt.exit();
return; return;
} }
@ -458,7 +466,7 @@ impl App {
} }
// After polling events, sleep the event loop until the next event or the next frame. // 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 { if let Some(next_frame_time) = next_frame_time {
ControlFlow::WaitUntil(next_frame_time) ControlFlow::WaitUntil(next_frame_time)
} else { } else {
@ -468,7 +476,8 @@ impl App {
} }
} else { } else {
ControlFlow::Wait ControlFlow::Wait
}; });
}); })?;
Ok(())
} }
} }

View File

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

View File

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

View File

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