1
0
mirror of https://github.com/emilk/egui.git synced 2026-09-02 14:50:03 -04:00

Update example and now the viewport will always render if can create a native window will be embedded

This commit is contained in:
Konkitoman
2023-07-25 12:43:34 +03:00
parent 55a0f1f0c3
commit 2131f251fc
3 changed files with 36 additions and 14 deletions

View File

@@ -1065,11 +1065,7 @@ mod glow_integration {
let screen_size_in_pixels: [u32; 2] = let screen_size_in_pixels: [u32; 2] =
win.window.as_ref().unwrap().inner_size().into(); win.window.as_ref().unwrap().inner_size().into();
egui_glow::painter::clear( egui_glow::painter::clear(&gl, screen_size_in_pixels, [0.0, 0.0, 0.0, 0.0]);
&gl,
screen_size_in_pixels,
app.clear_color(&integration.egui_ctx.style().visuals),
);
integration.egui_ctx.set_current_viewport_id(win.window_id); integration.egui_ctx.set_current_viewport_id(win.window_id);
egui::FullOutput { egui::FullOutput {

View File

@@ -1987,13 +1987,12 @@ impl Context {
window_builder: ViewportBuilder, window_builder: ViewportBuilder,
func: impl Fn(&Context, u64, u64) + Send + Sync + 'static, func: impl Fn(&Context, u64, u64) + Send + Sync + 'static,
) { ) {
let id = self.write(|ctx| { if self.is_desktop() {
if ctx.is_desktop { self.write(|ctx| {
if let Some(window) = ctx.viewports.get_mut(&window_builder.title) { if let Some(window) = ctx.viewports.get_mut(&window_builder.title) {
window.2 = ctx.current_rendering_viewport; window.2 = ctx.current_rendering_viewport;
window.3 = true; window.3 = true;
window.4 = Arc::new(Box::new(func)); window.4 = Arc::new(Box::new(func));
window.1
} else { } else {
let id = ctx.viewport_counter + 1; let id = ctx.viewport_counter + 1;
ctx.viewport_counter = id; ctx.viewport_counter = id;
@@ -2007,12 +2006,11 @@ impl Context {
Arc::new(Box::new(func)), Arc::new(Box::new(func)),
), ),
); );
id
}
} else {
0
} }
}); });
} else {
func(self, 0, 0);
}
} }
} }

View File

@@ -2,7 +2,7 @@
use std::sync::{Arc, RwLock}; use std::sync::{Arc, RwLock};
use eframe::egui; use eframe::egui::{self, window::ViewportBuilder};
fn main() -> Result<(), eframe::Error> { fn main() -> Result<(), eframe::Error> {
env_logger::init(); // Log to stderr (if you run with `RUST_LOG=debug`). env_logger::init(); // Log to stderr (if you run with `RUST_LOG=debug`).
@@ -36,6 +36,34 @@ fn main() -> Result<(), eframe::Error> {
age += 1; age += 1;
} }
ui.label(format!("Hello '{name}', age {age}")); ui.label(format!("Hello '{name}', age {age}"));
let mut is_desktop = ctx.is_desktop();
ui.checkbox(&mut is_desktop, "Is Desktop");
ctx.set_desktop(is_desktop);
ctx.create_viewport(
ViewportBuilder::default()
.with_inner_size((50, 30))
.with_decorations(false)
.with_transparent(true)
.with_resizable(false),
|ctx, _, _| {
let size = egui::Rect::from_min_size(
egui::Pos2::new(0.0, 0.0),
egui::Vec2::new(50.0, 50.0),
);
let mut ui = egui::Ui::new(
ctx.clone(),
egui::LayerId::background(),
"Viewport Popup".into(),
size,
size,
);
egui::Frame::popup(&ctx.style()).show(&mut ui, |ui| {
ui.label("Popup");
});
},
);
let clone = window1_embedded.clone(); let clone = window1_embedded.clone();
let embedded = *window1_embedded.read().unwrap(); let embedded = *window1_embedded.read().unwrap();
egui::CollapsingHeader::new("Show Test1").show(ui, |ui| { egui::CollapsingHeader::new("Show Test1").show(ui, |ui| {