Make sure `native_pixels_per_point` is set during app creation (#7683)

Useful for things like analytics
This commit is contained in:
Emil Ernerfeldt 2025-11-05 10:35:57 +01:00
parent 9253acd7f3
commit 0b9bb5f494
3 changed files with 40 additions and 7 deletions

View File

@ -1041,11 +1041,23 @@ impl GlutinWindowContext {
let mut viewport_from_window = HashMap::default(); let mut viewport_from_window = HashMap::default();
let mut window_from_viewport = OrderedViewportIdMap::default(); let mut window_from_viewport = OrderedViewportIdMap::default();
let mut info = ViewportInfo::default(); let mut viewport_info = ViewportInfo::default();
if let Some(window) = &window { if let Some(window) = &window {
viewport_from_window.insert(window.id(), ViewportId::ROOT); viewport_from_window.insert(window.id(), ViewportId::ROOT);
window_from_viewport.insert(ViewportId::ROOT, window.id()); window_from_viewport.insert(ViewportId::ROOT, window.id());
egui_winit::update_viewport_info(&mut info, egui_ctx, window, true); egui_winit::update_viewport_info(&mut viewport_info, egui_ctx, window, true);
// Tell egui right away about native_pixels_per_point etc,
// so that the app knows about it during app creation:
let pixels_per_point = egui_winit::pixels_per_point(egui_ctx, window);
egui_ctx.input_mut(|i| {
i.raw
.viewports
.insert(ViewportId::ROOT, viewport_info.clone());
i.pixels_per_point = pixels_per_point;
});
} }
let mut viewports = OrderedViewportIdMap::default(); let mut viewports = OrderedViewportIdMap::default();
@ -1056,7 +1068,7 @@ impl GlutinWindowContext {
class: ViewportClass::Root, class: ViewportClass::Root,
builder: viewport_builder, builder: viewport_builder,
deferred_commands: vec![], deferred_commands: vec![],
info, info: viewport_info,
actions_requested: Default::default(), actions_requested: Default::default(),
viewport_ui_cb: None, viewport_ui_cb: None,
gl_surface: None, gl_surface: None,

View File

@ -199,6 +199,22 @@ impl<'app> WgpuWinitApp<'app> {
}, },
)); ));
let mut viewport_info = ViewportInfo::default();
egui_winit::update_viewport_info(&mut viewport_info, &egui_ctx, &window, true);
{
// Tell egui right away about native_pixels_per_point etc,
// so that the app knows about it during app creation:
let pixels_per_point = egui_winit::pixels_per_point(&egui_ctx, &window);
egui_ctx.input_mut(|i| {
i.raw
.viewports
.insert(ViewportId::ROOT, viewport_info.clone());
i.pixels_per_point = pixels_per_point;
});
}
let window = Arc::new(window); let window = Arc::new(window);
{ {
@ -278,9 +294,6 @@ impl<'app> WgpuWinitApp<'app> {
let mut viewport_from_window = HashMap::default(); let mut viewport_from_window = HashMap::default();
viewport_from_window.insert(window.id(), ViewportId::ROOT); viewport_from_window.insert(window.id(), ViewportId::ROOT);
let mut info = ViewportInfo::default();
egui_winit::update_viewport_info(&mut info, &egui_ctx, &window, true);
let mut viewports = Viewports::default(); let mut viewports = Viewports::default();
viewports.insert( viewports.insert(
ViewportId::ROOT, ViewportId::ROOT,
@ -289,7 +302,7 @@ impl<'app> WgpuWinitApp<'app> {
class: ViewportClass::Root, class: ViewportClass::Root,
builder, builder,
deferred_commands: vec![], deferred_commands: vec![],
info, info: viewport_info,
actions_requested: Default::default(), actions_requested: Default::default(),
viewport_ui_cb: None, viewport_ui_cb: None,
window: Some(window), window: Some(window),

View File

@ -65,6 +65,14 @@ impl AppRunner {
o.zoom_factor = 1.0; o.zoom_factor = 1.0;
}); });
// Tell egui right away about native_pixels_per_point
// so that the app knows about it during app creation:
egui_ctx.input_mut(|i| {
let viewport_info = i.raw.viewports.entry(egui::ViewportId::ROOT).or_default();
viewport_info.native_pixels_per_point = Some(super::native_pixels_per_point());
i.pixels_per_point = super::native_pixels_per_point();
});
let cc = epi::CreationContext { let cc = epi::CreationContext {
egui_ctx: egui_ctx.clone(), egui_ctx: egui_ctx.clone(),
integration_info: info.clone(), integration_info: info.clone(),