1
0
mirror of https://github.com/emilk/egui.git synced 2026-06-27 15:13:12 -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] =
win.window.as_ref().unwrap().inner_size().into();
egui_glow::painter::clear(
&gl,
screen_size_in_pixels,
app.clear_color(&integration.egui_ctx.style().visuals),
);
egui_glow::painter::clear(&gl, screen_size_in_pixels, [0.0, 0.0, 0.0, 0.0]);
integration.egui_ctx.set_current_viewport_id(win.window_id);
egui::FullOutput {

View File

@@ -1987,13 +1987,12 @@ impl Context {
window_builder: ViewportBuilder,
func: impl Fn(&Context, u64, u64) + Send + Sync + 'static,
) {
let id = self.write(|ctx| {
if ctx.is_desktop {
if self.is_desktop() {
self.write(|ctx| {
if let Some(window) = ctx.viewports.get_mut(&window_builder.title) {
window.2 = ctx.current_rendering_viewport;
window.3 = true;
window.4 = Arc::new(Box::new(func));
window.1
} else {
let id = ctx.viewport_counter + 1;
ctx.viewport_counter = id;
@@ -2007,12 +2006,11 @@ impl Context {
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 eframe::egui;
use eframe::egui::{self, window::ViewportBuilder};
fn main() -> Result<(), eframe::Error> {
env_logger::init(); // Log to stderr (if you run with `RUST_LOG=debug`).
@@ -36,6 +36,34 @@ fn main() -> Result<(), eframe::Error> {
age += 1;
}
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 embedded = *window1_embedded.read().unwrap();
egui::CollapsingHeader::new("Show Test1").show(ui, |ui| {