Fixed crashes

This commit is contained in:
Robin Quint 2022-03-01 14:40:26 +01:00
parent 0e9f39c942
commit e68ea5fe3b
2 changed files with 29 additions and 22 deletions

View File

@ -11,6 +11,7 @@ fn main() {
let mut open = true; let mut open = true;
system.main_loop(move |_, ui| { system.main_loop(move |_, ui| {
if open {
ui.window("Hello world") ui.window("Hello world")
.opened(&mut open) .opened(&mut open)
.size([300.0, 110.0], Condition::FirstUseEver) .size([300.0, 110.0], Condition::FirstUseEver)
@ -30,5 +31,6 @@ fn main() {
mouse_pos[0], mouse_pos[1] mouse_pos[0], mouse_pos[1]
)); ));
}); });
}
}); });
} }

View File

@ -639,7 +639,7 @@ impl WinitPlatform {
pub fn update_viewports<T>(&mut self, imgui: &mut Context, window_target: &winit::event_loop::EventLoopWindowTarget<T>) { pub fn update_viewports<T>(&mut self, imgui: &mut Context, window_target: &winit::event_loop::EventLoopWindowTarget<T>) {
// remove destroyed windows // remove destroyed windows
self.windows.retain(|id, _| { self.windows.retain(|id, _| {
imgui.viewport_by_id(*id).is_some() imgui.viewports().any(|vp| vp.id == *id)
}); });
// handle new viewports // handle new viewports
@ -1051,12 +1051,17 @@ impl WinitPlatform {
Event::WindowEvent { window_id, ref event } => { Event::WindowEvent { window_id, ref event } => {
let viewport = { let viewport = {
if window_id == main_window.id() { if window_id == main_window.id() {
imgui.main_viewport_mut() Some(imgui.main_viewport_mut())
} else { } else {
let imgui_id = self.windows.iter().find(|(_, wnd)| wnd.id() == window_id).map(|(id, _)| *id).unwrap(); self.windows.iter().find(|(_, wnd)| wnd.id() == window_id).map(|(id, _)| *id).and_then(|id| imgui.viewport_by_id_mut(id))
imgui.viewport_by_id_mut(imgui_id).unwrap()
} }
}; };
let viewport = if let Some(viewport) = viewport {
viewport
} else {
return;
};
let state = unsafe{&mut *(viewport.platform_user_data as *mut ViewportState)}; let state = unsafe{&mut *(viewport.platform_user_data as *mut ViewportState)};
match *event { match *event {