From 098d94e705e533a5d49f78bc567877f59afc50b7 Mon Sep 17 00:00:00 2001 From: Konkitoman Date: Sat, 5 Aug 2023 15:34:23 +0300 Subject: [PATCH] Fix viewports example --- crates/eframe/src/native/run.rs | 12 ++++++------ examples/viewports/src/main.rs | 28 +++++++++++++++++++++++----- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/crates/eframe/src/native/run.rs b/crates/eframe/src/native/run.rs index ccfbc3e93..b929c27c9 100644 --- a/crates/eframe/src/native/run.rs +++ b/crates/eframe/src/native/run.rs @@ -972,8 +972,9 @@ mod glow_integration { let _gl = gl.clone(); let painter = Arc::new(RwLock::new(painter)); let _painter = painter.clone(); - let time = integration.beagining.clone(); + let time = integration.beagining; + // Sync Rendering integration.egui_ctx.set_render_sync_callback( move |viewport_builder, viewport_id, parent_viewport_id, render| { let window = glutin.read().windows.get(&viewport_id).cloned(); @@ -986,7 +987,7 @@ mod glow_integration { input.time = Some(time.elapsed().as_secs_f64()); let output = egui_ctx.run(input, viewport_id, parent_viewport_id, |ctx| { - render(&egui_ctx, viewport_id, parent_viewport_id); + render(ctx, viewport_id, parent_viewport_id); }); let glutin = &mut *glutin.write(); @@ -1017,16 +1018,15 @@ mod glow_integration { &clipped_primitives, &output.textures_delta, ); - unsafe { - crate::profile_scope!("swap_buffers"); - let _ = window + crate::profile_scope!("swap_buffers"); + let _ = + window .gl_surface .as_ref() .expect("failed to get surface to swap buffers") .swap_buffers(glutin.current_gl_context.as_ref().expect( "failed to get current context to swap buffers", )); - } return; } } diff --git a/examples/viewports/src/main.rs b/examples/viewports/src/main.rs index 990fe53f2..90dfc14d4 100644 --- a/examples/viewports/src/main.rs +++ b/examples/viewports/src/main.rs @@ -99,6 +99,12 @@ fn main() { }); } } + + ui.add( + egui::widgets::DragValue::new(&mut value) + .clamp_range(-10..=10) + .speed(0.1), + ); }); }); egui::CollapsingHeader::new("Async Test2").show(ui, |ui| { @@ -126,10 +132,18 @@ fn main() { )); if ui.button("Drag").is_pointer_button_down_on() { - ctx.viewport_command( - ctx.get_viewport_id(), - egui::window::ViewportCommand::Drag, - ) + if ctx.get_viewport_id() != ctx.get_parent_viewport_id() { + ctx.viewport_command( + ctx.get_viewport_id(), + egui::window::ViewportCommand::Drag, + ) + } else { + ctx.memory_mut(|mem| { + mem.set_dragged_id( + egui::Id::new("Test2").with("frame_resize"), + ) + }); + } } }); }); @@ -154,11 +168,15 @@ fn main() { ctx.get_viewport_id() )); - if ui.button("Drag").is_pointer_button_down_on() { + if ctx.get_viewport_id() != ctx.get_parent_viewport_id() { ctx.viewport_command( ctx.get_viewport_id(), egui::window::ViewportCommand::Drag, ) + } else { + ctx.memory_mut(|mem| { + mem.set_dragged_id(egui::Id::new("Test3").with("frame_resize")) + }); } }); });