Update egui/wgpu another major version

This commit is contained in:
Simon Gellis 2025-08-03 17:29:42 -04:00
parent 43288fc71f
commit 110a31870f
7 changed files with 144 additions and 123 deletions

151
Cargo.lock generated
View File

@ -20,9 +20,9 @@ checksum = "b2187590a23ab1e3df8681afdf0987c48504d80291f002fcdb651f0ef5e25169"
[[package]]
name = "accesskit"
version = "0.17.1"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3d3b8f9bae46a948369bc4a03e815d4ed6d616bd00de4051133a5019dc31c5a"
checksum = "e25ae84c0260bdf5df07796d7cc4882460de26a2b406ec0e6c42461a723b271b"
dependencies = [
"enumn",
"serde",
@ -702,10 +702,11 @@ dependencies = [
[[package]]
name = "codespan-reporting"
version = "0.11.1"
version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81"
dependencies = [
"serde",
"termcolor",
"unicode-width",
]
@ -948,9 +949,9 @@ dependencies = [
[[package]]
name = "ecolor"
version = "0.31.1"
version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bc4feb366740ded31a004a0e4452fbf84e80ef432ecf8314c485210229672fd1"
checksum = "4a631732d995184114016fab22fc7e3faf73d6841c2d7650395fe251fbcd9285"
dependencies = [
"bytemuck",
"emath",
@ -959,9 +960,9 @@ dependencies = [
[[package]]
name = "egui"
version = "0.31.1"
version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "25dd34cec49ab55d85ebf70139cb1ccd29c977ef6b6ba4fe85489d6877ee9ef3"
checksum = "8470210c95a42cc985d9ffebfd5067eea55bdb1c3f7611484907db9639675e28"
dependencies = [
"accesskit",
"ahash",
@ -972,22 +973,24 @@ dependencies = [
"nohash-hasher",
"profiling",
"serde",
"smallvec",
"unicode-segmentation",
]
[[package]]
name = "egui-toast"
version = "0.17.0"
name = "egui-notify"
version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "366a31eb8c905835c85a36baff26d7a003a9fd6631a04b1f15f42d9cb20d11ad"
checksum = "3cd148c4c3fe05be0d9facf90add19a1531c1d7bfb9c7e4dbc179cfb31844d49"
dependencies = [
"egui",
]
[[package]]
name = "egui-wgpu"
version = "0.31.1"
version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d319dfef570f699b6e9114e235e862a2ddcf75f0d1a061de9e1328d92146d820"
checksum = "14de9942d8b9e99e2d830403c208ab1a6e052e925a7456a4f6f66d567d90de1d"
dependencies = [
"ahash",
"bytemuck",
@ -1005,9 +1008,9 @@ dependencies = [
[[package]]
name = "egui-winit"
version = "0.31.1"
version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d9dfbb78fe4eb9c3a39ad528b90ee5915c252e77bbab9d4ebc576541ab67e13"
checksum = "c490804a035cec9c826082894a3e1ecf4198accd3817deb10f7919108ebafab0"
dependencies = [
"ahash",
"arboard",
@ -1024,9 +1027,9 @@ dependencies = [
[[package]]
name = "egui_extras"
version = "0.31.1"
version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "624659a2e972a46f4d5f646557906c55f1cd5a0836eddbe610fdf1afba1b4226"
checksum = "0f791a5937f518249016b276b3639ad2aa3824048b6f2161ec2b431ab325880a"
dependencies = [
"ahash",
"egui",
@ -1045,9 +1048,9 @@ checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
[[package]]
name = "emath"
version = "0.31.1"
version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e4cadcff7a5353ba72b7fea76bf2122b5ebdbc68e8155aa56dfdea90083fe1b"
checksum = "45f057b141e7e46340c321400be74b793543b1b213036f0f989c35d35957c32e"
dependencies = [
"bytemuck",
"serde",
@ -1066,7 +1069,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6866f3bfdf8207509a033af1a75a7b08abda06bbaaeae6669323fd5a097df2e9"
dependencies = [
"enum-map-derive",
"serde",
]
[[package]]
@ -1114,9 +1116,9 @@ dependencies = [
[[package]]
name = "epaint"
version = "0.31.1"
version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41fcc0f5a7c613afd2dee5e4b30c3e6acafb8ad6f0edb06068811f708a67c562"
checksum = "94cca02195f0552c17cabdc02f39aa9ab6fbd815dac60ab1cd3d5b0aa6f9551c"
dependencies = [
"ab_glyph",
"ahash",
@ -1133,9 +1135,9 @@ dependencies = [
[[package]]
name = "epaint_default_fonts"
version = "0.31.1"
version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc7e7a64c02cf7a5b51e745a9e45f60660a286f151c238b9d397b3e923f5082f"
checksum = "e8495e11ed527dff39663b8c36b6c2b2799d7e4287fb90556e455d72eca0b4d3"
[[package]]
name = "equivalent"
@ -1505,6 +1507,7 @@ checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9"
dependencies = [
"cfg-if",
"crunchy",
"num-traits",
]
[[package]]
@ -1826,7 +1829,7 @@ dependencies = [
"cpal",
"directories",
"egui",
"egui-toast",
"egui-notify",
"egui-wgpu",
"egui-winit",
"egui_extras",
@ -1870,6 +1873,12 @@ dependencies = [
"windows-targets 0.53.3",
]
[[package]]
name = "libm"
version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de"
[[package]]
name = "libredox"
version = "0.1.9"
@ -2044,24 +2053,27 @@ dependencies = [
[[package]]
name = "naga"
version = "24.0.0"
version = "25.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e380993072e52eef724eddfcde0ed013b0c023c3f0417336ed041aa9f076994e"
checksum = "2b977c445f26e49757f9aca3631c3b8b836942cb278d69a92e7b80d3b24da632"
dependencies = [
"arrayvec",
"bit-set",
"bitflags 2.9.1",
"cfg_aliases",
"codespan-reporting",
"half",
"hashbrown",
"hexf-parse",
"indexmap",
"log",
"num-traits",
"once_cell",
"rustc-hash 1.1.0",
"spirv",
"strum",
"termcolor",
"thiserror 2.0.12",
"unicode-xid",
"unicode-ident",
]
[[package]]
@ -2204,6 +2216,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
dependencies = [
"autocfg",
"libm",
]
[[package]]
@ -2774,6 +2787,12 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3"
[[package]]
name = "portable-atomic"
version = "1.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483"
[[package]]
name = "potential_utf"
version = "0.1.2"
@ -3214,9 +3233,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
[[package]]
name = "signal-hook-registry"
version = "1.4.5"
version = "1.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410"
checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b"
dependencies = [
"libc",
]
@ -3716,15 +3735,9 @@ checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
[[package]]
name = "unicode-width"
version = "0.1.14"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"
[[package]]
name = "unicode-xid"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c"
[[package]]
name = "url"
@ -4033,18 +4046,20 @@ checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3"
[[package]]
name = "wgpu"
version = "24.0.5"
version = "25.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6b0b3436f0729f6cdf2e6e9201f3d39dc95813fad61d826c1ed07918b4539353"
checksum = "ec8fb398f119472be4d80bc3647339f56eb63b2a331f6a3d16e25d8144197dd9"
dependencies = [
"arrayvec",
"bitflags 2.9.1",
"cfg_aliases",
"document-features",
"hashbrown",
"js-sys",
"log",
"naga",
"parking_lot",
"portable-atomic",
"profiling",
"raw-window-handle",
"smallvec",
@ -4059,34 +4074,67 @@ dependencies = [
[[package]]
name = "wgpu-core"
version = "24.0.5"
version = "25.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f0aa306497a238d169b9dc70659105b4a096859a34894544ca81719242e1499"
checksum = "f7b882196f8368511d613c6aeec80655160db6646aebddf8328879a88d54e500"
dependencies = [
"arrayvec",
"bit-set",
"bit-vec",
"bitflags 2.9.1",
"cfg_aliases",
"document-features",
"hashbrown",
"indexmap",
"log",
"naga",
"once_cell",
"parking_lot",
"portable-atomic",
"profiling",
"raw-window-handle",
"rustc-hash 1.1.0",
"smallvec",
"thiserror 2.0.12",
"wgpu-core-deps-apple",
"wgpu-core-deps-emscripten",
"wgpu-core-deps-windows-linux-android",
"wgpu-hal",
"wgpu-types",
]
[[package]]
name = "wgpu-hal"
version = "24.0.4"
name = "wgpu-core-deps-apple"
version = "25.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f112f464674ca69f3533248508ee30cb84c67cf06c25ff6800685f5e0294e259"
checksum = "cfd488b3239b6b7b185c3b045c39ca6bf8af34467a4c5de4e0b1a564135d093d"
dependencies = [
"wgpu-hal",
]
[[package]]
name = "wgpu-core-deps-emscripten"
version = "25.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f09ad7aceb3818e52539acc679f049d3475775586f3f4e311c30165cf2c00445"
dependencies = [
"wgpu-hal",
]
[[package]]
name = "wgpu-core-deps-windows-linux-android"
version = "25.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cba5fb5f7f9c98baa7c889d444f63ace25574833df56f5b817985f641af58e46"
dependencies = [
"wgpu-hal",
]
[[package]]
name = "wgpu-hal"
version = "25.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f968767fe4d3d33747bbd1473ccd55bf0f6451f55d733b5597e67b5deab4ad17"
dependencies = [
"android_system_properties",
"arrayvec",
@ -4095,6 +4143,7 @@ dependencies = [
"bitflags 2.9.1",
"block",
"bytemuck",
"cfg-if",
"cfg_aliases",
"core-graphics-types",
"glow",
@ -4102,6 +4151,7 @@ dependencies = [
"gpu-alloc",
"gpu-allocator",
"gpu-descriptor",
"hashbrown",
"js-sys",
"khronos-egl",
"libc",
@ -4111,14 +4161,13 @@ dependencies = [
"naga",
"ndk-sys 0.5.0+25.2.9519653",
"objc",
"once_cell",
"ordered-float",
"parking_lot",
"portable-atomic",
"profiling",
"range-alloc",
"raw-window-handle",
"renderdoc-sys",
"rustc-hash 1.1.0",
"smallvec",
"thiserror 2.0.12",
"wasm-bindgen",
@ -4130,13 +4179,15 @@ dependencies = [
[[package]]
name = "wgpu-types"
version = "24.0.0"
version = "25.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50ac044c0e76c03a0378e7786ac505d010a873665e2d51383dcff8dd227dc69c"
checksum = "2aa49460c2a8ee8edba3fca54325540d904dd85b2e086ada762767e17d06e8bc"
dependencies = [
"bitflags 2.9.1",
"bytemuck",
"js-sys",
"log",
"thiserror 2.0.12",
"web-sys",
]

View File

@ -16,11 +16,11 @@ bytemuck = { version = "1", features = ["derive"] }
clap = { version = "4", features = ["derive"] }
cpal = { git = "https://github.com/sidit77/cpal.git", rev = "66ed6be" }
directories = "6"
egui = { version = "0.31", features = ["serde"] }
egui_extras = { version = "0.31", features = ["image"] }
egui-toast = "0.17"
egui-winit = "0.31"
egui-wgpu = { version = "0.31", features = ["winit"] }
egui = { version = "0.32", features = ["serde"] }
egui_extras = { version = "0.32", features = ["image"] }
egui-notify = "0.20"
egui-winit = "0.32"
egui-wgpu = { version = "0.32", features = ["winit"] }
fixed = { version = "1.28", features = ["num-traits"] }
gilrs = { version = "0.11", features = ["serde-serialize"] }
hex = "0.4"
@ -39,7 +39,7 @@ thread-priority = "1"
tokio = { version = "1", features = ["io-util", "macros", "net", "rt", "sync", "time"] }
tracing = { version = "0.1", features = ["release_max_level_info"] }
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
wgpu = "24"
wgpu = "25"
winit = { version = "0.30", features = ["serde"] }
[target.'cfg(windows)'.dependencies]
@ -57,3 +57,6 @@ name = "Lemur"
identifier = "com.virtual-boy.Lemur"
icon = ["assets/lemur-256x256.png"]
category = "games"
#[patch.crates-io]
#egui = "0.32"

View File

@ -334,12 +334,9 @@ impl WgpuState {
}))
.expect("could not create adapter");
let trace_path = std::env::var("WGPU_TRACE");
let (device, queue) = pollster::block_on(adapter.request_device(
&(*device_descriptor)(&adapter),
trace_path.ok().as_ref().map(std::path::Path::new),
))
.expect("could not request device");
let (device, queue) =
pollster::block_on(adapter.request_device(&(*device_descriptor)(&adapter)))
.expect("could not request device");
Self {
instance,
adapter,

View File

@ -9,12 +9,13 @@ use std::{
atomic::{AtomicBool, Ordering},
mpsc::{self, RecvError, TryRecvError},
},
time::Duration,
};
use anyhow::Result;
use atomic::Atomic;
use bytemuck::NoUninit;
use egui_toast::{Toast, ToastKind, ToastOptions};
use egui_notify::Toast;
use tracing::{error, warn};
use crate::{
@ -726,10 +727,8 @@ impl Emulator {
.get(&sim_id)
.or_else(|| self.messages.get(&SimId::Player1));
if let Some(msg) = messages {
let toast = Toast::new()
.kind(ToastKind::Error)
.options(ToastOptions::default().duration_in_seconds(5.0))
.text(&message);
let mut toast = Toast::error(&message);
toast.duration(Some(Duration::from_secs(5)));
if msg.send(toast).is_ok() {
return;
}

View File

@ -193,8 +193,8 @@ struct ImageState {
impl ImageState {
fn new(size: [usize; 2]) -> Self {
let buffers = [
Arc::new(ColorImage::new(size, Color32::BLACK)),
Arc::new(ColorImage::new(size, Color32::BLACK)),
Arc::new(ColorImage::filled(size, Color32::BLACK)),
Arc::new(ColorImage::filled(size, Color32::BLACK)),
];
let sink = buffers[0].clone();
Self {

View File

@ -1,4 +1,4 @@
use std::sync::mpsc;
use std::{sync::mpsc, time::Duration};
use crate::{
app::UserEvent,
@ -8,10 +8,10 @@ use crate::{
};
use anyhow::Context as _;
use egui::{
Align2, Button, CentralPanel, Color32, Context, Direction, Frame, TopBottomPanel, Ui, Vec2,
ViewportBuilder, ViewportCommand, ViewportId, Window, menu,
Align2, Button, CentralPanel, Color32, Context, Frame, MenuBar, TopBottomPanel, Ui, Vec2,
ViewportBuilder, ViewportCommand, ViewportId, Window,
};
use egui_toast::{Toast, ToastKind, ToastOptions, Toasts};
use egui_notify::{Anchor, Toast, Toasts};
use serde::{Deserialize, Serialize};
use winit::event_loop::EventLoopProxy;
@ -43,6 +43,7 @@ pub struct GameWindow {
shortcuts: ShortcutProvider,
sim_id: SimId,
config: GameConfig,
toasts: Toasts,
screen: Option<GameScreen>,
messages: Option<mpsc::Receiver<Toast>>,
color_picker: Option<ColorPickerState>,
@ -57,6 +58,10 @@ impl GameWindow {
sim_id: SimId,
) -> Self {
let config = load_config(&persistence, sim_id);
let toasts = Toasts::new()
.with_anchor(Anchor::BottomLeft)
.with_margin((10.0, 10.0).into())
.reverse(true);
Self {
client,
proxy,
@ -64,13 +69,14 @@ impl GameWindow {
shortcuts,
sim_id,
config,
toasts,
screen: None,
messages: None,
color_picker: None,
}
}
fn show_menu(&mut self, ctx: &Context, ui: &mut Ui, toasts: &mut Toasts) {
fn show_menu(&mut self, ctx: &Context, ui: &mut Ui) {
let state = self.client.emulator_state();
let is_ready = self.client.sim_state(self.sim_id) == SimState::Ready;
let can_pause = is_ready && state == EmulatorState::Running;
@ -119,7 +125,7 @@ impl GameWindow {
if autopause {
self.client.send_command(EmulatorCommand::Pause);
}
pollster::block_on(self.take_screenshot(toasts));
pollster::block_on(self.take_screenshot());
if autopause {
self.client.send_command(EmulatorCommand::Resume);
}
@ -139,7 +145,6 @@ impl GameWindow {
self.client
.send_command(EmulatorCommand::LoadGame(self.sim_id, path));
}
ui.close_menu();
}
if ui
.add(self.button_for(ui.ctx(), "Quit", Command::Quit))
@ -158,7 +163,6 @@ impl GameWindow {
.clicked()
{
self.client.send_command(EmulatorCommand::Pause);
ui.close_menu();
}
} else if ui
.add_enabled(
@ -168,7 +172,6 @@ impl GameWindow {
.clicked()
{
self.client.send_command(EmulatorCommand::Resume);
ui.close_menu();
}
if ui
.add_enabled(is_ready, self.button_for(ui.ctx(), "Reset", Command::Reset))
@ -176,7 +179,6 @@ impl GameWindow {
{
self.client
.send_command(EmulatorCommand::Reset(self.sim_id));
ui.close_menu();
}
ui.separator();
if ui
@ -187,7 +189,6 @@ impl GameWindow {
.clicked()
{
self.client.send_command(EmulatorCommand::FrameAdvance);
ui.close_menu();
}
ui.separator();
if ui
@ -197,8 +198,7 @@ impl GameWindow {
)
.clicked()
{
pollster::block_on(self.take_screenshot(toasts));
ui.close_menu();
pollster::block_on(self.take_screenshot());
}
});
ui.menu_button("Options", |ui| self.show_options_menu(ctx, ui));
@ -211,17 +211,14 @@ impl GameWindow {
self.client
.send_command(EmulatorCommand::StartSecondSim(None));
self.proxy.send_event(UserEvent::OpenPlayer2).unwrap();
ui.close_menu();
}
if has_player_2 {
let linked = self.client.are_sims_linked();
if linked && ui.button("Unlink").clicked() {
self.client.send_command(EmulatorCommand::Unlink);
ui.close_menu();
}
if !linked && ui.button("Link").clicked() {
self.client.send_command(EmulatorCommand::Link);
ui.close_menu();
}
}
});
@ -230,78 +227,63 @@ impl GameWindow {
self.proxy
.send_event(UserEvent::OpenTerminal(self.sim_id))
.unwrap();
ui.close_menu();
}
if ui.button("GDB Server").clicked() {
self.proxy
.send_event(UserEvent::OpenDebugger(self.sim_id))
.unwrap();
ui.close_menu();
}
ui.separator();
if ui.button("Character Data").clicked() {
self.proxy
.send_event(UserEvent::OpenCharacterData(self.sim_id))
.unwrap();
ui.close_menu();
}
if ui.button("Background Maps").clicked() {
self.proxy
.send_event(UserEvent::OpenBgMap(self.sim_id))
.unwrap();
ui.close_menu();
}
if ui.button("Objects").clicked() {
self.proxy
.send_event(UserEvent::OpenObjects(self.sim_id))
.unwrap();
ui.close_menu();
}
if ui.button("Worlds").clicked() {
self.proxy
.send_event(UserEvent::OpenWorlds(self.sim_id))
.unwrap();
ui.close_menu();
}
if ui.button("Frame Buffers").clicked() {
self.proxy
.send_event(UserEvent::OpenFrameBuffers(self.sim_id))
.unwrap();
ui.close_menu();
}
if ui.button("Registers").clicked() {
self.proxy
.send_event(UserEvent::OpenRegisters(self.sim_id))
.unwrap();
ui.close_menu();
}
});
ui.menu_button("Help", |ui| {
if ui.button("About").clicked() {
self.proxy.send_event(UserEvent::OpenAbout).unwrap();
ui.close_menu();
}
});
}
async fn take_screenshot(&self, toasts: &mut Toasts) {
async fn take_screenshot(&mut self) {
match self.try_take_screenshot().await {
Ok(Some(path)) => {
toasts.add(
Toast::new()
.kind(ToastKind::Info)
.options(ToastOptions::default().duration_in_seconds(5.0))
.text(format!("Saved to {path}")),
);
let mut toast = Toast::info(format!("Saved to {path}"));
toast.duration(Some(Duration::from_secs(5)));
self.toasts.add(toast);
}
Ok(None) => {}
Err(error) => {
toasts.add(
Toast::new()
.kind(ToastKind::Error)
.options(ToastOptions::default().duration_in_seconds(5.0))
.text(format!("{error:#}")),
);
let mut toast = Toast::error(format!("{error:#}"));
toast.duration(Some(Duration::from_secs(5)));
self.toasts.add(toast);
}
}
}
@ -348,7 +330,6 @@ impl GameWindow {
.clicked()
{
ctx.send_viewport_cmd(ViewportCommand::InnerSize(dims));
ui.close_menu();
}
}
});
@ -385,13 +366,11 @@ impl GameWindow {
c.display_mode = display_mode;
c.dimensions = current_dims * scale;
});
ui.close_menu();
});
ui.menu_button("Colors", |ui| {
for preset in COLOR_PRESETS {
if ui.color_pair_button(preset[0], preset[1]).clicked() {
self.update_config(|c| c.colors = preset);
ui.close_menu();
}
}
ui.with_layout(ui.layout().with_cross_align(egui::Align::Center), |ui| {
@ -412,7 +391,6 @@ impl GameWindow {
just_opened: true,
unpause_on_close: is_running,
});
ui.close_menu();
}
});
});
@ -423,23 +401,19 @@ impl GameWindow {
if ui.selectable_button(p1_enabled, "Player 1").clicked() {
self.client
.send_command(EmulatorCommand::SetAudioEnabled(!p1_enabled, p2_enabled));
ui.close_menu();
}
if ui.selectable_button(p2_enabled, "Player 2").clicked() {
self.client
.send_command(EmulatorCommand::SetAudioEnabled(p1_enabled, !p2_enabled));
ui.close_menu();
}
});
ui.menu_button("Input", |ui| {
if ui.button("Bind Inputs").clicked() {
self.proxy.send_event(UserEvent::OpenInput).unwrap();
ui.close_menu();
}
});
if ui.button("Hotkeys").clicked() {
self.proxy.send_event(UserEvent::OpenHotkeys).unwrap();
ui.close_menu();
}
}
@ -535,19 +509,16 @@ impl AppWindow for GameWindow {
};
self.update_config(|c| c.dimensions = dimensions);
let mut toasts = Toasts::new()
.anchor(Align2::LEFT_BOTTOM, (10.0, 10.0))
.direction(Direction::BottomUp);
if let Some(messages) = self.messages.as_mut() {
while let Ok(toast) = messages.try_recv() {
toasts.add(toast);
self.toasts.add(toast);
}
}
TopBottomPanel::top("menubar")
.exact_height(22.0)
.show(ctx, |ui| {
menu::bar(ui, |ui| {
self.show_menu(ctx, ui, &mut toasts);
MenuBar::new().ui(ui, |ui| {
self.show_menu(ctx, ui);
});
});
if self.color_picker.is_some() {
@ -566,7 +537,7 @@ impl AppWindow for GameWindow {
ui.add(screen);
}
});
toasts.show(ctx);
self.toasts.show(ctx);
}
fn on_init(&mut self, _ctx: &Context, render_state: &egui_wgpu::RenderState) {

View File

@ -49,7 +49,7 @@ impl UiExt for Ui {
let old_rect = res.response.rect;
let mut text_rect = old_rect;
text_rect.min.x += 6.0;
self.allocate_new_ui(UiBuilder::new().max_rect(text_rect), |ui| ui.label(text));
self.scope_builder(UiBuilder::new().max_rect(text_rect), |ui| ui.label(text));
if old_rect.width() > 0.0 {
self.advance_cursor_after_rect(old_rect);
}