From a84610ee03b8ba4c9661eaa4b53de99312cd2529 Mon Sep 17 00:00:00 2001 From: Robin Quint Date: Sat, 21 Jan 2023 20:04:59 +0100 Subject: [PATCH] Fixed renderer on wayland --- .../examples/basic.rs | 3 + .../src/lib.rs | 65 ++++++++----------- 2 files changed, 31 insertions(+), 37 deletions(-) diff --git a/imgui-winit-glow-renderer-viewports/examples/basic.rs b/imgui-winit-glow-renderer-viewports/examples/basic.rs index 5d0f8c4..11dfd99 100644 --- a/imgui-winit-glow-renderer-viewports/examples/basic.rs +++ b/imgui-winit-glow-renderer-viewports/examples/basic.rs @@ -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(); }, diff --git a/imgui-winit-glow-renderer-viewports/src/lib.rs b/imgui-winit-glow-renderer-viewports/src/lib.rs index 202ea7c..a46195d 100644 --- a/imgui-winit-glow-renderer-viewports/src/lib.rs +++ b/imgui-winit-glow-renderer-viewports/src/lib.rs @@ -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::(); + let main_pos = main_window.inner_position().unwrap_or_default().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(); + 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::(); + let window_pos = window.inner_position().unwrap_or_default().cast::(); imgui.io_mut().mouse_pos = [ position.x as f32 + window_pos.x, position.y as f32 + window_pos.y,