Fixed renderer on wayland

This commit is contained in:
Robin Quint 2023-01-21 20:04:59 +01:00
parent 5f4cbcdc16
commit a84610ee03
2 changed files with 31 additions and 37 deletions

View File

@ -94,6 +94,9 @@ fn main() {
winit::event::Event::WindowEvent { window_id, event: WindowEvent::CloseRequested } if window_id == window.id() => {
control_flow.set_exit();
},
winit::event::Event::WindowEvent { window_id, event: WindowEvent::Resized(new_size) } if window_id == window.id() => {
surface.resize(&context, NonZeroU32::new(new_size.width).unwrap(), NonZeroU32::new(new_size.height).unwrap());
},
winit::event::Event::MainEventsCleared => {
window.request_redraw();
},

View File

@ -271,42 +271,37 @@ impl Renderer {
io.display_size = [window_size.width, window_size.height];
io.display_framebuffer_scale = [1.0, 1.0];
if io
.backend_flags
.contains(BackendFlags::RENDERER_HAS_VIEWPORTS)
{
let viewport = imgui.main_viewport_mut();
let viewport = imgui.main_viewport_mut();
let main_pos = main_window.inner_position().unwrap().cast::<f32>();
let main_pos = main_window.inner_position().unwrap_or_default().cast::<f32>();
viewport.pos = [main_pos.x, main_pos.y];
viewport.work_pos = viewport.pos;
viewport.size = [window_size.width, window_size.height];
viewport.work_size = viewport.size;
viewport.dpi_scale = 1.0;
viewport.platform_user_data = Box::into_raw(Box::new(ViewportData {
pos: [main_pos.x, main_pos.y],
size: [window_size.width, window_size.height],
focus: true,
minimized: false,
}))
.cast();
viewport.pos = [main_pos.x, main_pos.y];
viewport.work_pos = viewport.pos;
viewport.size = [window_size.width, window_size.height];
viewport.work_size = viewport.size;
viewport.dpi_scale = 1.0;
viewport.platform_user_data = Box::into_raw(Box::new(ViewportData {
pos: [main_pos.x, main_pos.y],
size: [window_size.width, window_size.height],
focus: true,
minimized: false,
}))
.cast();
let mut monitors = Vec::new();
for monitor in main_window.available_monitors() {
monitors.push(imgui::PlatformMonitor {
main_pos: [monitor.position().x as f32, monitor.position().y as f32],
main_size: [monitor.size().width as f32, monitor.size().height as f32],
work_pos: [monitor.position().x as f32, monitor.position().y as f32],
work_size: [monitor.size().width as f32, monitor.size().height as f32],
dpi_scale: 1.0,
});
}
imgui
.platform_io_mut()
.monitors
.replace_from_slice(&monitors);
let mut monitors = Vec::new();
for monitor in main_window.available_monitors() {
monitors.push(imgui::PlatformMonitor {
main_pos: [monitor.position().x as f32, monitor.position().y as f32],
main_size: [monitor.size().width as f32, monitor.size().height as f32],
work_pos: [monitor.position().x as f32, monitor.position().y as f32],
work_size: [monitor.size().width as f32, monitor.size().height as f32],
dpi_scale: 1.0,
});
}
imgui
.platform_io_mut()
.monitors
.replace_from_slice(&monitors);
imgui.set_platform_name(Some(format!(
"imgui-winit-glow-renderer-viewports {}",
@ -419,12 +414,8 @@ impl Renderer {
.io()
.config_flags
.contains(ConfigFlags::VIEWPORTS_ENABLE)
&& imgui
.io()
.backend_flags
.contains(BackendFlags::RENDERER_HAS_VIEWPORTS)
{
let window_pos = window.inner_position().unwrap().cast::<f32>();
let window_pos = window.inner_position().unwrap_or_default().cast::<f32>();
imgui.io_mut().mouse_pos = [
position.x as f32 + window_pos.x,
position.y as f32 + window_pos.y,