1
0
mirror of https://github.com/emilk/egui.git synced 2026-09-01 22:30:03 -04:00

egui and eframe now uses more ViewportIdPair

This commit is contained in:
Konkitoman
2023-09-26 00:05:04 +03:00
parent 28f7b863fe
commit e453d667e5
7 changed files with 110 additions and 175 deletions

View File

@@ -7,7 +7,9 @@ use winit::platform::macos::WindowBuilderExtMacOS as _;
use raw_window_handle::{HasRawDisplayHandle as _, HasRawWindowHandle as _}; use raw_window_handle::{HasRawDisplayHandle as _, HasRawWindowHandle as _};
use egui::{mutex::RwLock, NumExt as _, ViewportBuilder, ViewportId, ViewportRender}; use egui::{
mutex::RwLock, NumExt as _, ViewportBuilder, ViewportId, ViewportIdPair, ViewportRender,
};
#[cfg(feature = "accesskit")] #[cfg(feature = "accesskit")]
use egui_winit::accesskit_winit; use egui_winit::accesskit_winit;
use egui_winit::{native_pixels_per_point, EventResponse, WindowSettings}; use egui_winit::{native_pixels_per_point, EventResponse, WindowSettings};
@@ -419,14 +421,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( let full_output = self.update(app, window, egui_winit, &None, ViewportIdPair::MAIN);
app,
window,
egui_winit,
&None,
ViewportId::MAIN,
ViewportId::MAIN,
);
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();
@@ -483,8 +478,7 @@ impl EpiIntegration {
window: &winit::window::Window, window: &winit::window::Window,
egui_winit: &mut egui_winit::State, egui_winit: &mut egui_winit::State,
render: &Option<Arc<Box<ViewportRender>>>, render: &Option<Arc<Box<ViewportRender>>>,
viewport_id: egui::ViewportId, pair: ViewportIdPair,
parent_id: egui::ViewportId,
) -> egui::FullOutput { ) -> egui::FullOutput {
let frame_start = std::time::Instant::now(); let frame_start = std::time::Instant::now();
@@ -496,16 +490,14 @@ impl EpiIntegration {
raw_input.time = Some(self.beginning.elapsed().as_secs_f64()); raw_input.time = Some(self.beginning.elapsed().as_secs_f64());
// Run user code: // Run user code:
let full_output = self let full_output = self.egui_ctx.run(raw_input, pair, |egui_ctx| {
.egui_ctx crate::profile_scope!("App::update");
.run(raw_input, viewport_id, parent_id, |egui_ctx| { if let Some(render) = render {
crate::profile_scope!("App::update"); render(egui_ctx);
if let Some(render) = render { } else {
render(egui_ctx); app.update(egui_ctx, &mut self.frame);
} else { }
app.update(egui_ctx, &mut self.frame); });
}
});
self.pending_full_output.append(full_output); self.pending_full_output.append(full_output);
let full_output = std::mem::take(&mut self.pending_full_output); let full_output = std::mem::take(&mut self.pending_full_output);

View File

@@ -506,8 +506,7 @@ mod glow_integration {
struct Window { struct Window {
gl_surface: Option<glutin::surface::Surface<glutin::surface::WindowSurface>>, gl_surface: Option<glutin::surface::Surface<glutin::surface::WindowSurface>>,
window: Option<Arc<RwLock<winit::window::Window>>>, window: Option<Arc<RwLock<winit::window::Window>>>,
viewport_id: ViewportId, pair: ViewportIdPair,
parent_id: ViewportId,
render: Option<Arc<Box<ViewportRender>>>, render: Option<Arc<Box<ViewportRender>>>,
egui_winit: Option<egui_winit::State>, egui_winit: Option<egui_winit::State>,
} }
@@ -672,10 +671,9 @@ mod glow_integration {
Arc::new(RwLock::new(Window { Arc::new(RwLock::new(Window {
gl_surface: None, gl_surface: None,
window: window.map(|w| Arc::new(RwLock::new(w))), window: window.map(|w| Arc::new(RwLock::new(w))),
viewport_id: ViewportId::MAIN,
egui_winit: None, egui_winit: None,
render: None, render: None,
parent_id: ViewportId::MAIN, pair: ViewportIdPair::MAIN
})), })),
); );
@@ -728,7 +726,7 @@ mod glow_integration {
win: &Arc<RwLock<Window>>, win: &Arc<RwLock<Window>>,
event_loop: &EventLoopWindowTarget<UserEvent>, event_loop: &EventLoopWindowTarget<UserEvent>,
) -> Result<()> { ) -> Result<()> {
let builder = &self.builders[&win.read().viewport_id]; let builder = &self.builders[&win.read().pair.this];
let mut win = win.write(); let mut win = win.write();
// make sure we have a window or create one. // make sure we have a window or create one.
let window = win.window.take().unwrap_or_else(|| { let window = win.window.take().unwrap_or_else(|| {
@@ -796,7 +794,7 @@ mod glow_integration {
win.gl_surface = Some(gl_surface); win.gl_surface = Some(gl_surface);
self.current_gl_context = Some(current_gl_context); self.current_gl_context = Some(current_gl_context);
self.viewports_maps.insert(window.id(), win.viewport_id); self.viewports_maps.insert(window.id(), win.pair.this);
} }
win.window = Some(window); win.window = Some(window);
Ok(()) Ok(())
@@ -1065,21 +1063,21 @@ mod glow_integration {
// ## Sync Rendering // ## Sync Rendering
integration.egui_ctx.set_render_sync_callback( integration.egui_ctx.set_render_sync_callback(
move |egui_ctx, mut viewport_builder, ViewportIdPair{ this: viewport_id, parent: parent_id }, render| { move |egui_ctx, mut viewport_builder, pair, render| {
let has_window = c_glutin.read().viewports.get(&viewport_id).is_some(); let has_window = c_glutin.read().viewports.get(&pair).is_some();
if !has_window{ if !has_window{
if viewport_builder.icon.is_none(){ if viewport_builder.icon.is_none(){
viewport_builder.icon = c_glutin.read().builders.get(&parent_id).and_then(|b|b.icon.clone()); viewport_builder.icon = c_glutin.read().builders.get(&pair.parent).and_then(|b|b.icon.clone());
} }
{ {
let mut glutin = c_glutin.write(); let mut glutin = c_glutin.write();
glutin.viewports.entry(viewport_id).or_insert(Arc::new(RwLock::new(Window{ gl_surface: None, window: None, viewport_id, parent_id, render: None, egui_winit: None }))); glutin.viewports.entry(pair.this).or_insert(Arc::new(RwLock::new(Window{ gl_surface: None, window: None, pair, render: None, egui_winit: None })));
glutin.builders.entry(viewport_id).or_insert(viewport_builder); glutin.builders.entry(pair.this).or_insert(viewport_builder);
} }
let win = c_glutin.read().viewports[&viewport_id].clone(); let win = c_glutin.read().viewports[&pair].clone();
let event_loop; let event_loop;
#[allow(unsafe_code)] #[allow(unsafe_code)]
unsafe{ unsafe{
@@ -1089,7 +1087,7 @@ mod glow_integration {
} }
'try_render: { 'try_render: {
let window = c_glutin.read().viewports.get(&viewport_id).cloned(); let window = c_glutin.read().viewports.get(&pair).cloned();
if let Some(window) = window { if let Some(window) = window {
let output; let output;
{ {
@@ -1101,8 +1099,7 @@ mod glow_integration {
input.time = Some(c_time.elapsed().as_secs_f64()); input.time = Some(c_time.elapsed().as_secs_f64());
output = egui_ctx.run( output = egui_ctx.run(
input, input,
viewport_id, pair,
parent_id,
|ctx| { |ctx| {
render(ctx); render(ctx);
}, },
@@ -1131,7 +1128,7 @@ mod glow_integration {
.unwrap() .unwrap()
.is_current(glutin.current_gl_context.as_ref().unwrap()) .is_current(glutin.current_gl_context.as_ref().unwrap())
{ {
let builder = &&glutin.builders[&window.viewport_id]; let builder = &&glutin.builders[&window.pair];
log::error!("egui::create_viewport_sync with title: `{}` is not created in main thread, try to use wgpu!", builder.title); log::error!("egui::create_viewport_sync with title: `{}` is not created in main thread, try to use wgpu!", builder.title);
} }
@@ -1207,7 +1204,7 @@ mod glow_integration {
w.window = None; w.window = None;
w.gl_surface = None; w.gl_surface = None;
w.render = render.clone(); w.render = render.clone();
w.parent_id = *id; w.pair.parent = *id;
} }
if let Some(w) = w.window.clone() { if let Some(w) = w.window.clone() {
process_viewport_commands(commands, *id, None, &w); process_viewport_commands(commands, *id, None, &w);
@@ -1222,18 +1219,14 @@ mod glow_integration {
for ViewportOutput { for ViewportOutput {
mut builder, mut builder,
pair: pair,
ViewportIdPair {
this: id,
parent: parent_id,
},
render, render,
} in viewports } in viewports
{ {
let default_icon = glutin_ctx let default_icon = glutin_ctx
.read() .read()
.builders .builders
.get(&parent_id) .get(&pair.parent)
.and_then(|b| b.icon.clone()); .and_then(|b| b.icon.clone());
if builder.icon.is_none() { if builder.icon.is_none() {
@@ -1242,19 +1235,18 @@ mod glow_integration {
{ {
let mut glutin = glutin_ctx.write(); let mut glutin = glutin_ctx.write();
glutin.viewports.insert( glutin.viewports.insert(
id, pair.this,
Arc::new(RwLock::new(Window { Arc::new(RwLock::new(Window {
gl_surface: None, gl_surface: None,
window: None, window: None,
viewport_id: id,
egui_winit: None, egui_winit: None,
render, render,
parent_id, pair
})), })),
); );
glutin.builders.insert(id, builder); glutin.builders.insert(pair.this, builder);
} }
active_viewports_ids.push(id); active_viewports_ids.push(pair.this);
} }
let mut gl_window = glutin_ctx.write(); let mut gl_window = glutin_ctx.write();
@@ -1369,7 +1361,7 @@ mod glow_integration {
{ {
let win = &glutin.read().viewports[&viewport_id].clone(); let win = &glutin.read().viewports[&viewport_id].clone();
if win.read().render.is_none() && viewport_id != ViewportId::MAIN { if win.read().render.is_none() && viewport_id != ViewportId::MAIN {
if let Some(win) = glutin.read().viewports.get(&win.read().parent_id) { if let Some(win) = glutin.read().viewports.get(&win.read().pair.parent) {
if let Some(w) = win.read().window.as_ref() { if let Some(w) = win.read().window.as_ref() {
return vec![EventResult::RepaintNow(w.read().id())]; return vec![EventResult::RepaintNow(w.read().id())];
} }
@@ -1423,8 +1415,7 @@ mod glow_integration {
&win.window.as_ref().unwrap().read(), &win.window.as_ref().unwrap().read(),
win.egui_winit.as_mut().unwrap(), win.egui_winit.as_mut().unwrap(),
&win.render.clone(), &win.render.clone(),
win.viewport_id, win.pair,
win.parent_id,
); );
integration.write().handle_platform_output( integration.write().handle_platform_output(
@@ -1707,7 +1698,7 @@ mod glow_integration {
if let Some(win) = window.read().window.as_ref() { if let Some(win) = window.read().window.as_ref() {
let win = win.read(); let win = win.read();
if win.id() == *window_id { if win.id() == *window_id {
Some(window.read().viewport_id) Some(window.read().pair.this)
} else { } else {
None None
} }
@@ -1746,7 +1737,7 @@ mod glow_integration {
running.app.write().as_mut(), running.app.write().as_mut(),
event, event,
viewport.egui_winit.as_mut().unwrap(), viewport.egui_winit.as_mut().unwrap(),
viewport.viewport_id, viewport.pair.this,
); );
} }
} }
@@ -2164,8 +2155,7 @@ mod wgpu_integration {
input.time = Some(c_time.elapsed().as_secs_f64()); input.time = Some(c_time.elapsed().as_secs_f64());
output = egui_ctx.run( output = egui_ctx.run(
input, input,
viewport_id, ViewportIdPair::new(viewport_id, parent_id),
parent_id,
|ctx| { |ctx| {
render(ctx); render(ctx);
}, },
@@ -2334,8 +2324,7 @@ mod wgpu_integration {
&window.read(), &window.read(),
state.write().as_mut().unwrap(), state.write().as_mut().unwrap(),
&render.clone(), &render.clone(),
viewport_id, ViewportIdPair::new(viewport_id, parent_id)
parent_id,
); );
integration.write().handle_platform_output( integration.write().handle_platform_output(

View File

@@ -227,12 +227,7 @@ struct ContextImpl {
} }
impl ContextImpl { impl ContextImpl {
fn begin_frame_mut( fn begin_frame_mut(&mut self, mut new_raw_input: RawInput, pair: ViewportIdPair) {
&mut self,
mut new_raw_input: RawInput,
viewport_id: ViewportId,
parent_viewport_id: ViewportId,
) {
// This is used to pause the last frame // This is used to pause the last frame
if !self.frame_stack.is_empty() { if !self.frame_stack.is_empty() {
let viewport_id = self.viewport_id(); let viewport_id = self.viewport_id();
@@ -248,10 +243,7 @@ impl ContextImpl {
); );
} }
self.frame_stack.push(ViewportIdPair { self.frame_stack.push(pair);
this: viewport_id,
parent: parent_viewport_id,
});
self.output.entry(self.viewport_id()).or_default(); self.output.entry(self.viewport_id()).or_default();
self.repaint.start_frame(self.viewport_id()); self.repaint.start_frame(self.viewport_id());
@@ -259,15 +251,15 @@ impl ContextImpl {
if self if self
.memory .memory
.new_pixels_per_viewport .new_pixels_per_viewport
.get(&viewport_id) .get(&pair)
.map_or(true, |pixels| *pixels != new_pixels_per_point) .map_or(true, |pixels| *pixels != new_pixels_per_point)
{ {
new_raw_input.pixels_per_point = Some(new_pixels_per_point); new_raw_input.pixels_per_point = Some(new_pixels_per_point);
self.memory self.memory
.new_pixels_per_viewport .new_pixels_per_viewport
.insert(viewport_id, new_pixels_per_point); .insert(pair.this, new_pixels_per_point);
let input = self.input.entry(viewport_id).or_default(); let input = self.input.entry(pair.this).or_default();
// This is a bit hacky, but is required to avoid jitter: // This is a bit hacky, but is required to avoid jitter:
let ratio = input.pixels_per_point / new_pixels_per_point; let ratio = input.pixels_per_point / new_pixels_per_point;
let mut rect = input.screen_rect; let mut rect = input.screen_rect;
@@ -279,31 +271,31 @@ impl ContextImpl {
self.layer_rects_prev_frame = self self.layer_rects_prev_frame = self
.layer_rects_prev_viewports .layer_rects_prev_viewports
.remove(&viewport_id) .remove(&pair)
.unwrap_or_default(); .unwrap_or_default();
self.memory.begin_frame( self.memory.begin_frame(
self.input.get(&viewport_id).unwrap_or(&Default::default()), self.input.get(&pair).unwrap_or(&Default::default()),
&new_raw_input, &new_raw_input,
viewport_id, pair.this,
); );
let input = self let input = self
.input .input
.remove(&viewport_id) .remove(&pair)
.unwrap_or_default() .unwrap_or_default()
.begin_frame(new_raw_input, self.repaint.requested_repaint_last_frame); .begin_frame(new_raw_input, self.repaint.requested_repaint_last_frame);
self.input.insert(viewport_id, input); self.input.insert(pair.this, input);
self.frame_state self.frame_state
.entry(viewport_id) .entry(pair.this)
.or_default() .or_default()
.begin_frame(&self.input[&viewport_id]); .begin_frame(&self.input[&pair]);
self.update_fonts_mut(); self.update_fonts_mut();
// Ensure we register the background area so panels and background ui can catch clicks: // Ensure we register the background area so panels and background ui can catch clicks:
let input = &self.input[&viewport_id]; let input = &self.input[&pair];
let screen_rect = input.screen_rect(); let screen_rect = input.screen_rect();
self.memory.areas.set_state( self.memory.areas.set_state(
LayerId::background(), LayerId::background(),
@@ -524,13 +516,12 @@ impl Context {
pub fn run( pub fn run(
&self, &self,
new_input: RawInput, new_input: RawInput,
viewport_id: ViewportId, pair: ViewportIdPair,
parent_viewport_id: ViewportId,
run_ui: impl FnOnce(&Context), run_ui: impl FnOnce(&Context),
) -> FullOutput { ) -> FullOutput {
crate::profile_function!(); crate::profile_function!();
self.begin_frame(new_input, viewport_id, parent_viewport_id); self.begin_frame(new_input, pair);
run_ui(self); run_ui(self);
self.end_frame() self.end_frame()
} }
@@ -552,15 +543,10 @@ impl Context {
/// let full_output = ctx.end_frame(); /// let full_output = ctx.end_frame();
/// // handle full_output /// // handle full_output
/// ``` /// ```
pub fn begin_frame( pub fn begin_frame(&self, new_input: RawInput, pair: ViewportIdPair) {
&self,
new_input: RawInput,
viewport_id: ViewportId,
parent_viewport_id: ViewportId,
) {
crate::profile_function!(); crate::profile_function!();
self.write(|ctx| ctx.begin_frame_mut(new_input, viewport_id, parent_viewport_id)); self.write(|ctx| ctx.begin_frame_mut(new_input, pair));
} }
/// Create a new Context and specify if is desktop /// Create a new Context and specify if is desktop

View File

@@ -620,30 +620,20 @@ 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( let _ = ctx.run(Default::default(), ViewportIdPair::MAIN, |ctx| {
Default::default(), run_ui(ctx);
ViewportId::MAIN, });
ViewportId::MAIN,
|ctx| {
run_ui(ctx);
},
);
} }
/// For use in tests; especially doctests. /// For use in tests; especially doctests.
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( let _ = ctx.run(Default::default(), ViewportIdPair::MAIN, |ctx| {
Default::default(), crate::CentralPanel::default().show(ctx, |ui| {
ViewportId::MAIN, add_contents(ui);
ViewportId::MAIN, });
|ctx| { });
crate::CentralPanel::default().show(ctx, |ui| {
add_contents(ui);
});
},
);
} }
#[cfg(feature = "accesskit")] #[cfg(feature = "accesskit")]

View File

@@ -21,6 +21,7 @@ impl ViewportId {
pub const MAIN: Self = Self(0); pub const MAIN: Self = Self(0);
} }
/// This will deref to `ViewportIdPair::this`
#[derive(Default, Debug, Hash, Clone, Copy, PartialEq, Eq)] #[derive(Default, Debug, Hash, Clone, Copy, PartialEq, Eq)]
pub struct ViewportIdPair { pub struct ViewportIdPair {
pub this: ViewportId, pub this: ViewportId,
@@ -33,6 +34,18 @@ impl ViewportIdPair {
this: ViewportId::MAIN, this: ViewportId::MAIN,
parent: ViewportId::MAIN, parent: ViewportId::MAIN,
}; };
pub fn new(this: ViewportId, parent: ViewportId) -> Self {
Self { this, parent }
}
}
impl std::ops::Deref for ViewportIdPair {
type Target = ViewportId;
fn deref(&self) -> &Self::Target {
&self.this
}
} }
/// This is used to render an async viewport /// This is used to render an async viewport

View File

@@ -1,6 +1,6 @@
use criterion::{criterion_group, criterion_main, Criterion}; use criterion::{criterion_group, criterion_main, Criterion};
use egui::{epaint::TextShape, ViewportId}; use egui::{epaint::TextShape, ViewportIdPair};
use egui_demo_lib::LOREM_IPSUM_LONG; use egui_demo_lib::LOREM_IPSUM_LONG;
pub fn criterion_benchmark(c: &mut Criterion) { pub fn criterion_benchmark(c: &mut Criterion) {
@@ -13,39 +13,24 @@ 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( let full_output = ctx.run(RawInput::default(), ViewportIdPair::MAIN, |ctx| {
RawInput::default(), demo_windows.ui(ctx);
ViewportId::MAIN, });
ViewportId::MAIN,
|ctx| {
demo_windows.ui(ctx);
},
);
ctx.tessellate(full_output.shapes) ctx.tessellate(full_output.shapes)
}); });
}); });
c.bench_function("demo_no_tessellate", |b| { c.bench_function("demo_no_tessellate", |b| {
b.iter(|| { b.iter(|| {
ctx.run( ctx.run(RawInput::default(), ViewportIdPair::MAIN, |ctx| {
RawInput::default(), demo_windows.ui(ctx);
ViewportId::MAIN, })
ViewportId::MAIN,
|ctx| {
demo_windows.ui(ctx);
},
)
}); });
}); });
let full_output = ctx.run( let full_output = ctx.run(RawInput::default(), ViewportIdPair::MAIN, |ctx| {
RawInput::default(), demo_windows.ui(ctx);
ViewportId::MAIN, });
ViewportId::MAIN,
|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())); b.iter(|| ctx.tessellate(full_output.shapes.clone()));
}); });
@@ -57,44 +42,34 @@ 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( ctx.run(RawInput::default(), ViewportIdPair::MAIN, |ctx| {
RawInput::default(), demo_windows.ui(ctx);
ViewportId::MAIN, })
ViewportId::MAIN,
|ctx| {
demo_windows.ui(ctx);
},
)
}); });
}); });
} }
{ {
let ctx = egui::Context::default(); let ctx = egui::Context::default();
let _ = ctx.run( let _ = ctx.run(RawInput::default(), ViewportIdPair::MAIN, |ctx| {
RawInput::default(), egui::CentralPanel::default().show(ctx, |ui| {
ViewportId::MAIN, c.bench_function("label &str", |b| {
ViewportId::MAIN, b.iter(|| {
|ctx| { ui.label("the quick brown fox jumps over the lazy dog");
egui::CentralPanel::default().show(ctx, |ui| {
c.bench_function("label &str", |b| {
b.iter(|| {
ui.label("the quick brown fox jumps over the lazy dog");
});
});
c.bench_function("label format!", |b| {
b.iter(|| {
ui.label("the quick brown fox jumps over the lazy dog".to_owned());
});
}); });
}); });
}, c.bench_function("label format!", |b| {
); b.iter(|| {
ui.label("the quick brown fox jumps over the lazy dog".to_owned());
});
});
});
});
} }
{ {
let ctx = egui::Context::default(); let ctx = egui::Context::default();
ctx.begin_frame(RawInput::default(), ViewportId::MAIN, ViewportId::MAIN); ctx.begin_frame(RawInput::default(), ViewportIdPair::MAIN);
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

@@ -19,7 +19,7 @@ pub mod easy_mark;
pub use color_test::ColorTest; pub use color_test::ColorTest;
pub use demo::DemoWindows; pub use demo::DemoWindows;
#[cfg(test)] #[cfg(test)]
use egui::ViewportId; use egui::ViewportIdPair;
/// View some Rust code with syntax highlighting and selection. /// View some Rust code with syntax highlighting and selection.
pub(crate) fn rust_view_ui(ui: &mut egui::Ui, code: &str) { pub(crate) fn rust_view_ui(ui: &mut egui::Ui, code: &str) {
@@ -76,14 +76,9 @@ 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( let full_output = ctx.run(raw_input.clone(), ViewportIdPair::MAIN, |ctx| {
raw_input.clone(), demo_windows.ui(ctx);
ViewportId::MAIN, });
ViewportId::MAIN,
|ctx| {
demo_windows.ui(ctx);
},
);
let clipped_primitives = ctx.tessellate(full_output.shapes); let clipped_primitives = ctx.tessellate(full_output.shapes);
assert!(!clipped_primitives.is_empty()); assert!(!clipped_primitives.is_empty());
} }
@@ -100,14 +95,9 @@ 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( let full_output = ctx.run(raw_input.clone(), ViewportIdPair::MAIN, |ctx| {
raw_input.clone(), demo_windows.ui(ctx);
ViewportId::MAIN, });
ViewportId::MAIN,
|ctx| {
demo_windows.ui(ctx);
},
);
let clipped_primitives = ctx.tessellate(full_output.shapes); let clipped_primitives = ctx.tessellate(full_output.shapes);
assert!( assert!(
clipped_primitives.is_empty(), clipped_primitives.is_empty(),