mirror of
https://github.com/emilk/egui.git
synced 2026-06-27 15:13:12 -04:00
eframe: read native window position and size (#1617)
Position and dimensions are available via `eframe::Frame::info().window_info`
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
use crate::epi;
|
||||
use crate::{epi, WindowInfo};
|
||||
use egui_winit::{native_pixels_per_point, WindowSettings};
|
||||
|
||||
pub fn points_to_size(points: egui::Vec2) -> winit::dpi::LogicalSize<f64> {
|
||||
@@ -8,6 +8,28 @@ pub fn points_to_size(points: egui::Vec2) -> winit::dpi::LogicalSize<f64> {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn read_window_info(
|
||||
window: &winit::window::Window,
|
||||
pixels_per_point: f32,
|
||||
) -> Option<WindowInfo> {
|
||||
match window.outer_position() {
|
||||
Ok(pos) => {
|
||||
let pos = pos.to_logical::<f32>(pixels_per_point.into());
|
||||
let size = window
|
||||
.inner_size()
|
||||
.to_logical::<f32>(pixels_per_point.into());
|
||||
Some(WindowInfo {
|
||||
position: egui::Pos2 { x: pos.x, y: pos.y },
|
||||
size: egui::Vec2 {
|
||||
x: size.width,
|
||||
y: size.height,
|
||||
},
|
||||
})
|
||||
}
|
||||
Err(_) => None,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn window_builder(
|
||||
native_options: &epi::NativeOptions,
|
||||
window_settings: &Option<WindowSettings>,
|
||||
@@ -177,6 +199,7 @@ impl EpiIntegration {
|
||||
prefer_dark_mode,
|
||||
cpu_usage: None,
|
||||
native_pixels_per_point: Some(native_pixels_per_point(window)),
|
||||
window_info: read_window_info(window, egui_ctx.pixels_per_point()),
|
||||
},
|
||||
output: Default::default(),
|
||||
storage,
|
||||
@@ -240,6 +263,7 @@ impl EpiIntegration {
|
||||
) -> egui::FullOutput {
|
||||
let frame_start = std::time::Instant::now();
|
||||
|
||||
self.frame.info.window_info = read_window_info(window, self.egui_ctx.pixels_per_point());
|
||||
let raw_input = self.egui_winit.take_egui_input(window);
|
||||
let full_output = self.egui_ctx.run(raw_input, |egui_ctx| {
|
||||
crate::profile_scope!("App::update");
|
||||
|
||||
Reference in New Issue
Block a user