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

MAIN -> ROOT

This commit is contained in:
Emil Ernerfeldt
2023-11-06 19:19:37 +01:00
parent 6a371e59cb
commit a52d38312c
10 changed files with 89 additions and 85 deletions

View File

@@ -87,7 +87,7 @@ pub fn window_builder<E>(
.. ..
} = native_options; } = native_options;
let mut window_builder = egui::ViewportBuilder::new(ViewportId::MAIN) let mut window_builder = egui::ViewportBuilder::new(ViewportId::ROOT)
.with_title(title) .with_title(title)
.with_close_button(true) // The default for all other viewports is `false`! .with_close_button(true) // The default for all other viewports is `false`!
.with_decorations(*decorated) .with_decorations(*decorated)
@@ -425,7 +425,7 @@ impl EpiIntegration {
let saved_memory: egui::Memory = self.egui_ctx.memory(|mem| mem.clone()); let saved_memory: egui::Memory = self.egui_ctx.memory(|mem| mem.clone());
self.egui_ctx self.egui_ctx
.memory_mut(|mem| mem.set_everything_is_visible(true)); .memory_mut(|mem| mem.set_everything_is_visible(true));
let full_output = self.update(app, window, egui_winit, &None, ViewportIdPair::MAIN); let full_output = self.update(app, window, egui_winit, &None, ViewportIdPair::ROOT);
self.pending_full_output.append(full_output); // Handle it next frame self.pending_full_output.append(full_output); // Handle it next frame
self.egui_ctx.memory_mut(|mem| *mem = saved_memory); // We don't want to remember that windows were huge. self.egui_ctx.memory_mut(|mem| *mem = saved_memory); // We don't want to remember that windows were huge.
self.egui_ctx.clear_animations(); self.egui_ctx.clear_animations();
@@ -450,7 +450,7 @@ impl EpiIntegration {
match event { match event {
WindowEvent::CloseRequested => { WindowEvent::CloseRequested => {
log::debug!("Received WindowEvent::CloseRequested"); log::debug!("Received WindowEvent::CloseRequested");
self.close = app.on_close_event() && viewport_id == ViewportId::MAIN; self.close = app.on_close_event() && viewport_id == ViewportId::ROOT;
log::debug!("App::on_close_event returned {}", self.close); log::debug!("App::on_close_event returned {}", self.close);
} }
WindowEvent::Destroyed => { WindowEvent::Destroyed => {

View File

@@ -441,7 +441,7 @@ fn run_and_exit(event_loop: EventLoop<UserEvent>, mut winit_app: impl WinitApp +
// WaitUntil seems to not work on iOS // WaitUntil seems to not work on iOS
#[cfg(target_os = "ios")] #[cfg(target_os = "ios")]
winit_app winit_app
.get_window_winit_id(ViewportId::MAIN) .get_window_winit_id(ViewportId::ROOT)
.map(|window_id| { .map(|window_id| {
winit_app winit_app
.window(window_id) .window(window_id)
@@ -662,24 +662,24 @@ mod glow_integration {
let mut viewport_maps = HashMap::default(); let mut viewport_maps = HashMap::default();
let mut window_maps = ViewportMap::default(); let mut window_maps = ViewportMap::default();
if let Some(window) = &window { if let Some(window) = &window {
viewport_maps.insert(window.id(), ViewportId::MAIN); viewport_maps.insert(window.id(), ViewportId::ROOT);
window_maps.insert(ViewportId::MAIN, window.id()); window_maps.insert(ViewportId::ROOT, window.id());
} }
let mut windows = ViewportMap::default(); let mut windows = ViewportMap::default();
windows.insert( windows.insert(
ViewportId::MAIN, ViewportId::ROOT,
Rc::new(RefCell::new(Viewport { Rc::new(RefCell::new(Viewport {
gl_surface: None, gl_surface: None,
window: window.map(|w| Rc::new(RefCell::new(w))), window: window.map(|w| Rc::new(RefCell::new(w))),
egui_winit: None, egui_winit: None,
viewport_ui_cb: None, viewport_ui_cb: None,
id_pair: ViewportIdPair::MAIN, id_pair: ViewportIdPair::ROOT,
})), })),
); );
let mut builders = ViewportMap::default(); let mut builders = ViewportMap::default();
builders.insert(ViewportId::MAIN, window_builder); builders.insert(ViewportId::ROOT, window_builder);
// the fun part with opengl gl is that we never know whether there is an error. the context creation might have failed, but // the fun part with opengl gl is that we never know whether there is an error. the context creation might have failed, but
// it could keep working until we try to make surface current or swap buffers or something else. future glutin improvements might // it could keep working until we try to make surface current or swap buffers or something else. future glutin improvements might
@@ -892,7 +892,7 @@ mod glow_integration {
native_options, native_options,
running: Rc::new(RefCell::new(None)), running: Rc::new(RefCell::new(None)),
app_creator: Some(app_creator), app_creator: Some(app_creator),
is_focused: Rc::new(RefCell::new(Some(ViewportId::MAIN))), is_focused: Rc::new(RefCell::new(Some(ViewportId::ROOT))),
} }
} }
@@ -914,7 +914,7 @@ mod glow_integration {
}; };
glutin_window_context.on_resume(event_loop)?; glutin_window_context.on_resume(event_loop)?;
if let Some(window) = &glutin_window_context.viewports.get(&ViewportId::MAIN) { if let Some(window) = &glutin_window_context.viewports.get(&ViewportId::ROOT) {
let window = window.borrow(); let window = window.borrow();
if let Some(window) = &window.window { if let Some(window) = &window.window {
epi_integration::apply_native_options_to_window( epi_integration::apply_native_options_to_window(
@@ -960,7 +960,7 @@ mod glow_integration {
.unwrap_or_else(|err| panic!("An OpenGL error occurred: {err}\n")); .unwrap_or_else(|err| panic!("An OpenGL error occurred: {err}\n"));
glutin_ctx.max_texture_side = painter.max_texture_side(); glutin_ctx.max_texture_side = painter.max_texture_side();
glutin_ctx.viewports[&ViewportId::MAIN] glutin_ctx.viewports[&ViewportId::ROOT]
.borrow_mut() .borrow_mut()
.egui_winit .egui_winit
.as_mut() .as_mut()
@@ -969,7 +969,7 @@ mod glow_integration {
let system_theme = system_theme( let system_theme = system_theme(
&glutin_ctx &glutin_ctx
.window(ViewportId::MAIN) .window(ViewportId::ROOT)
.borrow() .borrow()
.window .window
.as_ref() .as_ref()
@@ -979,7 +979,7 @@ mod glow_integration {
); );
let mut integration = epi_integration::EpiIntegration::new( let mut integration = epi_integration::EpiIntegration::new(
&glutin_ctx &glutin_ctx
.window(ViewportId::MAIN) .window(ViewportId::ROOT)
.borrow() .borrow()
.window .window
.as_ref() .as_ref()
@@ -1017,7 +1017,7 @@ mod glow_integration {
#[cfg(feature = "accesskit")] #[cfg(feature = "accesskit")]
{ {
let event_loop_proxy = self.repaint_proxy.lock().clone(); let event_loop_proxy = self.repaint_proxy.lock().clone();
let window = &glutin_ctx.viewports[&ViewportId::MAIN]; let window = &glutin_ctx.viewports[&ViewportId::ROOT];
let window = &mut *window.borrow_mut(); let window = &mut *window.borrow_mut();
integration.init_accesskit( integration.init_accesskit(
window.egui_winit.as_mut().unwrap(), window.egui_winit.as_mut().unwrap(),
@@ -1030,7 +1030,7 @@ mod glow_integration {
if self.native_options.mouse_passthrough { if self.native_options.mouse_passthrough {
glutin_ctx glutin_ctx
.window(ViewportId::MAIN) .window(ViewportId::ROOT)
.borrow() .borrow()
.window .window
.as_ref() .as_ref()
@@ -1044,7 +1044,7 @@ mod glow_integration {
.expect("Single-use AppCreator has unexpectedly already been taken"); .expect("Single-use AppCreator has unexpectedly already been taken");
let mut app; let mut app;
{ {
let window = glutin_ctx.window(ViewportId::MAIN); let window = glutin_ctx.window(ViewportId::ROOT);
let window = &mut *window.borrow_mut(); let window = &mut *window.borrow_mut();
app = app_creator(&epi::CreationContext { app = app_creator(&epi::CreationContext {
egui_ctx: integration.egui_ctx.clone(), egui_ctx: integration.egui_ctx.clone(),
@@ -1259,7 +1259,7 @@ mod glow_integration {
glutin_ctx: &Rc<RefCell<GlutinWindowContext>>, glutin_ctx: &Rc<RefCell<GlutinWindowContext>>,
mut viewports: Vec<ViewportOutput>, mut viewports: Vec<ViewportOutput>,
) { ) {
let mut active_viewports_ids = vec![ViewportId::MAIN]; let mut active_viewports_ids = vec![ViewportId::ROOT];
viewports.retain_mut( viewports.retain_mut(
|ViewportOutput { |ViewportOutput {
@@ -1405,7 +1405,7 @@ mod glow_integration {
running running
.glutin_ctx .glutin_ctx
.borrow() .borrow()
.window(ViewportId::MAIN) .window(ViewportId::ROOT)
.borrow() .borrow()
.window .window
.as_ref() .as_ref()
@@ -1443,7 +1443,7 @@ mod glow_integration {
{ {
let glutin = glutin.borrow(); let glutin = glutin.borrow();
let viewport = &glutin.viewports[&viewport_id].clone(); let viewport = &glutin.viewports[&viewport_id].clone();
if viewport.borrow().viewport_ui_cb.is_none() && viewport_id != ViewportId::MAIN if viewport.borrow().viewport_ui_cb.is_none() && viewport_id != ViewportId::ROOT
{ {
if let Some(parent_viewport) = if let Some(parent_viewport) =
glutin.viewports.get(&viewport.borrow().id_pair.parent) glutin.viewports.get(&viewport.borrow().id_pair.parent)
@@ -1699,7 +1699,7 @@ mod glow_integration {
.glutin_ctx .glutin_ctx
.borrow() .borrow()
.window_maps .window_maps
.get(&ViewportId::MAIN) .get(&ViewportId::ROOT)
.copied() .copied()
.unwrap(), .unwrap(),
) )
@@ -1784,7 +1784,7 @@ mod glow_integration {
.borrow() .borrow()
.viewport_maps .viewport_maps
.get(window_id) .get(window_id)
.map_or(false, |id| *id == ViewportId::MAIN) .map_or(false, |id| *id == ViewportId::ROOT)
&& running.integration.borrow().should_close() => && running.integration.borrow().should_close() =>
{ {
log::debug!("Received WindowEvent::CloseRequested"); log::debug!("Received WindowEvent::CloseRequested");
@@ -1967,7 +1967,7 @@ mod wgpu_integration {
native_options, native_options,
running: None, running: None,
app_creator: Some(app_creator), app_creator: Some(app_creator),
is_focused: Rc::new(RefCell::new(Some(ViewportId::MAIN))), is_focused: Rc::new(RefCell::new(Some(ViewportId::ROOT))),
} }
} }
@@ -2065,12 +2065,12 @@ mod wgpu_integration {
#[cfg(target_os = "android")] #[cfg(target_os = "android")]
fn drop_window(&mut self) -> std::result::Result<(), egui_wgpu::WgpuError> { fn drop_window(&mut self) -> std::result::Result<(), egui_wgpu::WgpuError> {
if let Some(running) = &mut self.running { if let Some(running) = &mut self.running {
running.viewports.borrow_mut().remove(&ViewportId::MAIN); running.viewports.borrow_mut().remove(&ViewportId::ROOT);
pollster::block_on( pollster::block_on(
running running
.painter .painter
.borrow_mut() .borrow_mut()
.set_window(ViewportId::MAIN, None), .set_window(ViewportId::ROOT, None),
)?; )?;
} }
Ok(()) Ok(())
@@ -2095,7 +2095,7 @@ mod wgpu_integration {
), ),
self.native_options.transparent, self.native_options.transparent,
); );
pollster::block_on(painter.set_window(ViewportId::MAIN, Some(&window)))?; pollster::block_on(painter.set_window(ViewportId::ROOT, Some(&window)))?;
let wgpu_render_state = painter.render_state(); let wgpu_render_state = painter.render_state();
@@ -2164,22 +2164,22 @@ mod wgpu_integration {
} }
let mut viewport_maps = HashMap::default(); let mut viewport_maps = HashMap::default();
viewport_maps.insert(window.id(), ViewportId::MAIN); viewport_maps.insert(window.id(), ViewportId::ROOT);
let viewport_maps = Rc::new(RefCell::new(viewport_maps)); let viewport_maps = Rc::new(RefCell::new(viewport_maps));
let viewports = Rc::new(RefCell::new(Viewports::default())); let viewports = Rc::new(RefCell::new(Viewports::default()));
viewports.borrow_mut().insert( viewports.borrow_mut().insert(
ViewportId::MAIN, ViewportId::ROOT,
Viewport { Viewport {
window: Some(Rc::new(RefCell::new(window))), window: Some(Rc::new(RefCell::new(window))),
state: Rc::new(RefCell::new(Some(state))), state: Rc::new(RefCell::new(Some(state))),
viewport_ui_cb: None, viewport_ui_cb: None,
parent_id: ViewportId::MAIN, parent_id: ViewportId::ROOT,
}, },
); );
let builders = Rc::new(RefCell::new(ViewportMap::default())); let builders = Rc::new(RefCell::new(ViewportMap::default()));
builders.borrow_mut().insert(ViewportId::MAIN, builder); builders.borrow_mut().insert(ViewportId::ROOT, builder);
let painter = Rc::new(RefCell::new(painter)); let painter = Rc::new(RefCell::new(painter));
@@ -2385,7 +2385,7 @@ mod wgpu_integration {
if let Some(mut running) = self.running.take() { if let Some(mut running) = self.running.take() {
crate::profile_function!(); crate::profile_function!();
if let Some(Viewport { window, .. }) = if let Some(Viewport { window, .. }) =
running.viewports.borrow().get(&ViewportId::MAIN) running.viewports.borrow().get(&ViewportId::ROOT)
{ {
running.integration.borrow_mut().save( running.integration.borrow_mut().save(
running.app.as_mut(), running.app.as_mut(),
@@ -2443,7 +2443,7 @@ mod wgpu_integration {
return EventResult::Wait; return EventResult::Wait;
}; };
// This is used to not render a viewport if is sync // This is used to not render a viewport if is sync
if viewport_id != ViewportId::MAIN && viewport_ui_cb.is_none() { if viewport_id != ViewportId::ROOT && viewport_ui_cb.is_none() {
if let Some(viewport) = running.viewports.borrow().get(&parent_id) { if let Some(viewport) = running.viewports.borrow().get(&parent_id) {
if let Some(window) = viewport.window.as_ref() { if let Some(window) = viewport.window.as_ref() {
return EventResult::RepaintNext(window.borrow().id()); return EventResult::RepaintNext(window.borrow().id());
@@ -2512,7 +2512,7 @@ mod wgpu_integration {
integration.post_present(&window.borrow()); integration.post_present(&window.borrow());
} }
let mut active_viewports_ids = vec![ViewportId::MAIN]; let mut active_viewports_ids = vec![ViewportId::ROOT];
out_viewports.retain_mut( out_viewports.retain_mut(
|ViewportOutput { |ViewportOutput {
@@ -2624,14 +2624,14 @@ mod wgpu_integration {
Ok(match event { Ok(match event {
winit::event::Event::Resumed => { winit::event::Event::Resumed => {
if let Some(running) = &self.running { if let Some(running) = &self.running {
if running.viewports.borrow().get(&ViewportId::MAIN).is_none() { if running.viewports.borrow().get(&ViewportId::ROOT).is_none() {
let _ = Self::create_window( let _ = Self::create_window(
event_loop, event_loop,
running.integration.borrow().frame.storage(), running.integration.borrow().frame.storage(),
&self.app_name, &self.app_name,
&mut self.native_options, &mut self.native_options,
)?; )?;
self.set_window(ViewportId::MAIN)?; self.set_window(ViewportId::ROOT)?;
} }
} else { } else {
let storage = epi_integration::create_storage( let storage = epi_integration::create_storage(
@@ -2654,7 +2654,7 @@ mod wgpu_integration {
.unwrap() .unwrap()
.viewports .viewports
.borrow() .borrow()
.get(&ViewportId::MAIN) .get(&ViewportId::ROOT)
.unwrap() .unwrap()
.window .window
.as_ref() .as_ref()

View File

@@ -183,7 +183,7 @@ impl AppRunner {
let full_output = self let full_output = self
.egui_ctx .egui_ctx
.run(raw_input, ViewportIdPair::MAIN, |egui_ctx| { .run(raw_input, ViewportIdPair::ROOT, |egui_ctx| {
self.app.update(egui_ctx, &mut self.frame); self.app.update(egui_ctx, &mut self.frame);
}); });
let egui::FullOutput { let egui::FullOutput {
@@ -195,7 +195,7 @@ impl AppRunner {
self.handle_platform_output(platform_output); self.handle_platform_output(platform_output);
self.textures_delta.append(textures_delta); self.textures_delta.append(textures_delta);
let clipped_primitives = self.egui_ctx.tessellate(shapes, ViewportId::MAIN); let clipped_primitives = self.egui_ctx.tessellate(shapes, ViewportId::ROOT);
{ {
let app_output = self.frame.take_app_output(); let app_output = self.frame.take_app_output();

View File

@@ -349,16 +349,16 @@ impl ContextImpl {
} }
impl ContextImpl { impl ContextImpl {
/// Return the `ViewportId` of the current viewport /// Return the `ViewportId` of the current viewport.
/// ///
/// In the case of this viewport is the main viewport will be `ViewportId::MAIN` /// For the root viewport this will return [`ViewportId::ROOT`].
pub(crate) fn viewport_id(&self) -> ViewportId { pub(crate) fn viewport_id(&self) -> ViewportId {
self.viewport_stack.last().copied().unwrap_or_default().this self.viewport_stack.last().copied().unwrap_or_default().this
} }
/// Return the `ViewportId` of his parent /// Return the `ViewportId` of his parent.
/// ///
/// In the case of this viewport is the main viewport will be `ViewportId::MAIN` /// For the root viewport this will return [`ViewportId::ROOT`].
pub(crate) fn parent_viewport_id(&self) -> ViewportId { pub(crate) fn parent_viewport_id(&self) -> ViewportId {
self.viewport_stack self.viewport_stack
.last() .last()
@@ -407,7 +407,7 @@ impl ContextImpl {
/// // Game loop: /// // Game loop:
/// loop { /// loop {
/// let raw_input = egui::RawInput::default(); /// let raw_input = egui::RawInput::default();
/// let full_output = ctx.run(raw_input, egui::ViewportIdPair::MAIN, |ctx| { /// let full_output = ctx.run(raw_input, egui::ViewportIdPair::ROOT, |ctx| {
/// egui::CentralPanel::default().show(&ctx, |ui| { /// egui::CentralPanel::default().show(&ctx, |ui| {
/// ui.label("Hello world!"); /// ui.label("Hello world!");
/// if ui.button("Click me").clicked() { /// if ui.button("Click me").clicked() {
@@ -416,7 +416,7 @@ impl ContextImpl {
/// }); /// });
/// }); /// });
/// handle_platform_output(full_output.platform_output); /// handle_platform_output(full_output.platform_output);
/// let clipped_primitives = ctx.tessellate(full_output.shapes, egui::ViewportId::MAIN); // create triangles to paint /// let clipped_primitives = ctx.tessellate(full_output.shapes, egui::ViewportId::ROOT); // create triangles to paint
/// paint(full_output.textures_delta, clipped_primitives); /// paint(full_output.textures_delta, clipped_primitives);
/// } /// }
/// ``` /// ```
@@ -473,7 +473,7 @@ impl Context {
/// ///
/// // Each frame: /// // Each frame:
/// let input = egui::RawInput::default(); /// let input = egui::RawInput::default();
/// let full_output = ctx.run(input, egui::ViewportIdPair::MAIN, |ctx| { /// let full_output = ctx.run(input, egui::ViewportIdPair::ROOT, |ctx| {
/// egui::CentralPanel::default().show(&ctx, |ui| { /// egui::CentralPanel::default().show(&ctx, |ui| {
/// ui.label("Hello egui!"); /// ui.label("Hello egui!");
/// }); /// });
@@ -502,7 +502,7 @@ impl Context {
/// ///
/// // Each frame: /// // Each frame:
/// let input = egui::RawInput::default(); /// let input = egui::RawInput::default();
/// ctx.begin_frame(input, egui::ViewportIdPair::MAIN); /// ctx.begin_frame(input, egui::ViewportIdPair::ROOT);
/// ///
/// egui::CentralPanel::default().show(&ctx, |ui| { /// egui::CentralPanel::default().show(&ctx, |ui| {
/// ui.label("Hello egui!"); /// ui.label("Hello egui!");
@@ -1341,7 +1341,7 @@ impl Context {
for viewport in ctx.viewports.values() { for viewport in ctx.viewports.values() {
ctx.repaint.request_repaint_settle(viewport.id_pair.this); ctx.repaint.request_repaint_settle(viewport.id_pair.this);
} }
ctx.repaint.request_repaint_settle(ViewportId::MAIN); ctx.repaint.request_repaint_settle(ViewportId::ROOT);
ctx.memory.override_pixels_per_point = Some(pixels_per_point); ctx.memory.override_pixels_per_point = Some(pixels_per_point);
}); });
} }
@@ -1492,7 +1492,7 @@ impl Context {
); );
ctx.viewports.values().map(|vp| vp.id_pair.this).collect() ctx.viewports.values().map(|vp| vp.id_pair.this).collect()
}); });
viewports.push(ViewportId::MAIN); viewports.push(ViewportId::ROOT);
if self.input(|i| i.wants_repaint()) { if self.input(|i| i.wants_repaint()) {
self.request_repaint(); self.request_repaint();
@@ -1556,7 +1556,7 @@ impl Context {
// If there are no viewport that contains the current viewport that viewport needs to be destroyed! // If there are no viewport that contains the current viewport that viewport needs to be destroyed!
let available_viewports = self.read(|ctx| { let available_viewports = self.read(|ctx| {
let mut available_viewports = vec![ViewportId::MAIN]; let mut available_viewports = vec![ViewportId::ROOT];
for vp in ctx.viewports.values() { for vp in ctx.viewports.values() {
available_viewports.push(vp.id_pair.this); available_viewports.push(vp.id_pair.this);
} }
@@ -2500,16 +2500,20 @@ impl Context {
/// ## Viewports /// ## Viewports
impl Context { impl Context {
/// Return the `ViewportId` of the current viewport /// Return the `ViewportId` of the current viewport.
/// In the case of this viewport is the main viewport will be `ViewportId::MAIN` ///
/// Don't use this outside of `Self::run`, or after `Self::end_frame` /// If this is the root viewport, this will return [`ViewportId::ROOT`].
///
/// Don't use this outside of `Self::run`, or after `Self::end_frame`.
pub fn viewport_id(&self) -> ViewportId { pub fn viewport_id(&self) -> ViewportId {
self.read(|ctx| ctx.viewport_id()) self.read(|ctx| ctx.viewport_id())
} }
/// Return the `ViewportId` of his parent /// Return the `ViewportId` of his parent.
/// In the case of this viewport is the main viewport will be `ViewportId::MAIN` ///
/// Don't use this outside of `Self::run`, or after `Self::end_frame` /// If this is the root viewport, this will return [`ViewportId::ROOT`].
///
/// Don't use this outside of `Self::run`, or after `Self::end_frame`.
pub fn parent_viewport_id(&self) -> ViewportId { pub fn parent_viewport_id(&self) -> ViewportId {
self.read(|ctx| ctx.parent_viewport_id()) self.read(|ctx| ctx.parent_viewport_id())
} }

View File

@@ -125,7 +125,7 @@
//! loop { //! loop {
//! let raw_input: egui::RawInput = gather_input(); //! let raw_input: egui::RawInput = gather_input();
//! //!
//! let full_output = ctx.run(raw_input, egui::ViewportIdPair::MAIN, |ctx| { //! let full_output = ctx.run(raw_input, egui::ViewportIdPair::ROOT, |ctx| {
//! egui::CentralPanel::default().show(&ctx, |ui| { //! egui::CentralPanel::default().show(&ctx, |ui| {
//! ui.label("Hello world!"); //! ui.label("Hello world!");
//! if ui.button("Click me").clicked() { //! if ui.button("Click me").clicked() {
@@ -134,7 +134,7 @@
//! }); //! });
//! }); //! });
//! handle_platform_output(full_output.platform_output); //! handle_platform_output(full_output.platform_output);
//! let clipped_primitives = ctx.tessellate(full_output.shapes, egui::ViewportId::MAIN); // create triangles to paint //! let clipped_primitives = ctx.tessellate(full_output.shapes, egui::ViewportId::ROOT); // create triangles to paint
//! paint(full_output.textures_delta, clipped_primitives); //! paint(full_output.textures_delta, clipped_primitives);
//! } //! }
//! ``` //! ```
@@ -606,7 +606,7 @@ pub enum WidgetType {
pub fn __run_test_ctx(mut run_ui: impl FnMut(&Context)) { pub fn __run_test_ctx(mut run_ui: impl FnMut(&Context)) {
let ctx = Context::default(); let ctx = Context::default();
ctx.set_fonts(FontDefinitions::empty()); // prevent fonts from being loaded (save CPU time) ctx.set_fonts(FontDefinitions::empty()); // prevent fonts from being loaded (save CPU time)
let _ = ctx.run(Default::default(), ViewportIdPair::MAIN, |ctx| { let _ = ctx.run(Default::default(), ViewportIdPair::ROOT, |ctx| {
run_ui(ctx); run_ui(ctx);
}); });
} }
@@ -615,7 +615,7 @@ pub fn __run_test_ctx(mut run_ui: impl FnMut(&Context)) {
pub fn __run_test_ui(mut add_contents: impl FnMut(&mut Ui)) { pub fn __run_test_ui(mut add_contents: impl FnMut(&mut Ui)) {
let ctx = Context::default(); let ctx = Context::default();
ctx.set_fonts(FontDefinitions::empty()); // prevent fonts from being loaded (save CPU time) ctx.set_fonts(FontDefinitions::empty()); // prevent fonts from being loaded (save CPU time)
let _ = ctx.run(Default::default(), ViewportIdPair::MAIN, |ctx| { let _ = ctx.run(Default::default(), ViewportIdPair::ROOT, |ctx| {
crate::CentralPanel::default().show(ctx, |ui| { crate::CentralPanel::default().show(ctx, |ui| {
add_contents(ui); add_contents(ui);
}); });

View File

@@ -23,7 +23,7 @@ pub struct ViewportId(pub Id);
impl Default for ViewportId { impl Default for ViewportId {
fn default() -> Self { fn default() -> Self {
Self::MAIN Self::ROOT
} }
} }
@@ -34,8 +34,8 @@ impl std::fmt::Debug for ViewportId {
} }
impl ViewportId { impl ViewportId {
/// This will return the `ViewportId` of the main viewport /// The `ViewportId` of the root viewport.
pub const MAIN: Self = Self(Id::null()); pub const ROOT: Self = Self(Id::null());
pub fn from_hash_of(source: impl std::hash::Hash) -> Self { pub fn from_hash_of(source: impl std::hash::Hash) -> Self {
Self(Id::new(source)) Self(Id::new(source))
@@ -66,17 +66,17 @@ pub struct ViewportIdPair {
impl Default for ViewportIdPair { impl Default for ViewportIdPair {
fn default() -> Self { fn default() -> Self {
Self { Self {
this: ViewportId::MAIN, this: ViewportId::ROOT,
parent: ViewportId::MAIN, parent: ViewportId::ROOT,
} }
} }
} }
impl ViewportIdPair { impl ViewportIdPair {
/// This will return the `ViewportIdPair` of the main viewport /// The `ViewportIdPair` of the root viewport, which is its own parent.
pub const MAIN: Self = Self { pub const ROOT: Self = Self {
this: ViewportId::MAIN, this: ViewportId::ROOT,
parent: ViewportId::MAIN, parent: ViewportId::ROOT,
}; };
} }

View File

@@ -13,26 +13,26 @@ pub fn criterion_benchmark(c: &mut Criterion) {
// The most end-to-end benchmark. // The most end-to-end benchmark.
c.bench_function("demo_with_tessellate__realistic", |b| { c.bench_function("demo_with_tessellate__realistic", |b| {
b.iter(|| { b.iter(|| {
let full_output = ctx.run(RawInput::default(), ViewportIdPair::MAIN, |ctx| { let full_output = ctx.run(RawInput::default(), ViewportIdPair::ROOT, |ctx| {
demo_windows.ui(ctx); demo_windows.ui(ctx);
}); });
ctx.tessellate(full_output.shapes, ViewportId::MAIN) ctx.tessellate(full_output.shapes, ViewportId::ROOT)
}); });
}); });
c.bench_function("demo_no_tessellate", |b| { c.bench_function("demo_no_tessellate", |b| {
b.iter(|| { b.iter(|| {
ctx.run(RawInput::default(), ViewportIdPair::MAIN, |ctx| { ctx.run(RawInput::default(), ViewportIdPair::ROOT, |ctx| {
demo_windows.ui(ctx); demo_windows.ui(ctx);
}) })
}); });
}); });
let full_output = ctx.run(RawInput::default(), ViewportIdPair::MAIN, |ctx| { let full_output = ctx.run(RawInput::default(), ViewportIdPair::ROOT, |ctx| {
demo_windows.ui(ctx); demo_windows.ui(ctx);
}); });
c.bench_function("demo_only_tessellate", |b| { c.bench_function("demo_only_tessellate", |b| {
b.iter(|| ctx.tessellate(full_output.shapes.clone(), ViewportId::MAIN)); b.iter(|| ctx.tessellate(full_output.shapes.clone(), ViewportId::ROOT));
}); });
} }
@@ -42,7 +42,7 @@ pub fn criterion_benchmark(c: &mut Criterion) {
let mut demo_windows = egui_demo_lib::DemoWindows::default(); let mut demo_windows = egui_demo_lib::DemoWindows::default();
c.bench_function("demo_full_no_tessellate", |b| { c.bench_function("demo_full_no_tessellate", |b| {
b.iter(|| { b.iter(|| {
ctx.run(RawInput::default(), ViewportIdPair::MAIN, |ctx| { ctx.run(RawInput::default(), ViewportIdPair::ROOT, |ctx| {
demo_windows.ui(ctx); demo_windows.ui(ctx);
}) })
}); });
@@ -51,7 +51,7 @@ pub fn criterion_benchmark(c: &mut Criterion) {
{ {
let ctx = egui::Context::default(); let ctx = egui::Context::default();
let _ = ctx.run(RawInput::default(), ViewportIdPair::MAIN, |ctx| { let _ = ctx.run(RawInput::default(), ViewportIdPair::ROOT, |ctx| {
egui::CentralPanel::default().show(ctx, |ui| { egui::CentralPanel::default().show(ctx, |ui| {
c.bench_function("label &str", |b| { c.bench_function("label &str", |b| {
b.iter(|| { b.iter(|| {
@@ -69,7 +69,7 @@ pub fn criterion_benchmark(c: &mut Criterion) {
{ {
let ctx = egui::Context::default(); let ctx = egui::Context::default();
ctx.begin_frame(RawInput::default(), ViewportIdPair::MAIN); ctx.begin_frame(RawInput::default(), ViewportIdPair::ROOT);
egui::CentralPanel::default().show(&ctx, |ui| { egui::CentralPanel::default().show(&ctx, |ui| {
c.bench_function("Painter::rect", |b| { c.bench_function("Painter::rect", |b| {

View File

@@ -76,10 +76,10 @@ fn test_egui_e2e() {
const NUM_FRAMES: usize = 5; const NUM_FRAMES: usize = 5;
for _ in 0..NUM_FRAMES { for _ in 0..NUM_FRAMES {
let full_output = ctx.run(raw_input.clone(), ViewportIdPair::MAIN, |ctx| { let full_output = ctx.run(raw_input.clone(), ViewportIdPair::ROOT, |ctx| {
demo_windows.ui(ctx); demo_windows.ui(ctx);
}); });
let clipped_primitives = ctx.tessellate(full_output.shapes, ViewportId::MAIN); let clipped_primitives = ctx.tessellate(full_output.shapes, ViewportId::ROOT);
assert!(!clipped_primitives.is_empty()); assert!(!clipped_primitives.is_empty());
} }
} }
@@ -95,10 +95,10 @@ fn test_egui_zero_window_size() {
const NUM_FRAMES: usize = 5; const NUM_FRAMES: usize = 5;
for _ in 0..NUM_FRAMES { for _ in 0..NUM_FRAMES {
let full_output = ctx.run(raw_input.clone(), ViewportIdPair::MAIN, |ctx| { let full_output = ctx.run(raw_input.clone(), ViewportIdPair::ROOT, |ctx| {
demo_windows.ui(ctx); demo_windows.ui(ctx);
}); });
let clipped_primitives = ctx.tessellate(full_output.shapes, ViewportId::MAIN); let clipped_primitives = ctx.tessellate(full_output.shapes, ViewportId::ROOT);
assert!( assert!(
clipped_primitives.is_empty(), clipped_primitives.is_empty(),
"There should be nothing to show, has at least one primitive with clip_rect: {:?}", "There should be nothing to show, has at least one primitive with clip_rect: {:?}",

View File

@@ -50,11 +50,11 @@ impl EguiGlow {
textures_delta, textures_delta,
shapes, shapes,
.. ..
} = self.egui_ctx.run(raw_input, ViewportIdPair::MAIN, run_ui); } = self.egui_ctx.run(raw_input, ViewportIdPair::ROOT, run_ui);
self.egui_winit.handle_platform_output( self.egui_winit.handle_platform_output(
window, window,
ViewportId::MAIN, ViewportId::ROOT,
&self.egui_ctx, &self.egui_ctx,
platform_output, platform_output,
); );
@@ -72,7 +72,7 @@ impl EguiGlow {
self.painter.set_texture(id, &image_delta); self.painter.set_texture(id, &image_delta);
} }
let clipped_primitives = self.egui_ctx.tessellate(shapes, ViewportId::MAIN); let clipped_primitives = self.egui_ctx.tessellate(shapes, ViewportId::ROOT);
let dimensions: [u32; 2] = window.inner_size().into(); let dimensions: [u32; 2] = window.inner_size().into();
self.painter.paint_primitives( self.painter.paint_primitives(
dimensions, dimensions,

View File

@@ -58,8 +58,8 @@ impl Default for App {
impl eframe::App for App { impl eframe::App for App {
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
egui::CentralPanel::default().show(ctx, |ui| { egui::CentralPanel::default().show(ctx, |ui| {
ui.heading("Main viewport"); ui.heading("Root viewport");
generic_ui(ui, Id::new("main_viewport")); generic_ui(ui, Id::new("root_viewport"));
{ {
let mut force_embedding = ctx.force_embedding(); let mut force_embedding = ctx.force_embedding();
ui.checkbox(&mut force_embedding, "Force embedding of new viewprts"); ui.checkbox(&mut force_embedding, "Force embedding of new viewprts");