diff --git a/egui/src/context.rs b/egui/src/context.rs index 90d82c49..a9071a46 100644 --- a/egui/src/context.rs +++ b/egui/src/context.rs @@ -132,12 +132,13 @@ impl Context { } pub fn pixels_per_point(&self) -> f32 { - self.input.pixels_per_point + self.input.pixels_per_point() } /// Useful for pixel-perfect rendering pub fn round_to_pixel(&self, point: f32) -> f32 { - (point * self.input.pixels_per_point).round() / self.input.pixels_per_point + let pixels_per_point = self.pixels_per_point(); + (point * pixels_per_point).round() / pixels_per_point } /// Useful for pixel-perfect rendering @@ -176,7 +177,7 @@ impl Context { self.input = std::mem::take(&mut self.input).begin_frame(new_raw_input); let mut font_definitions = self.font_definitions.lock(); - font_definitions.pixels_per_point = self.input.pixels_per_point; + font_definitions.pixels_per_point = self.input.pixels_per_point(); if self.fonts.is_none() || *self.fonts.as_ref().unwrap().definitions() != *font_definitions { self.fonts = Some(Arc::new(Fonts::from_definitions(font_definitions.clone()))); @@ -535,7 +536,7 @@ impl Context { ui.collapsing("Stats", |ui| { ui.add(label!( - "Screen size: {} x {} points, pixels_per_point: {}", + "Screen size: {} x {} points, pixels_per_point: {:?}", ui.input().screen_size.x, ui.input().screen_size.y, ui.input().pixels_per_point, diff --git a/egui/src/input.rs b/egui/src/input.rs index b827530d..5eb89360 100644 --- a/egui/src/input.rs +++ b/egui/src/input.rs @@ -70,7 +70,7 @@ pub struct InputState { pub screen_size: Vec2, /// Also known as device pixel ratio, > 1 for HDPI screens. - pub pixels_per_point: f32, + pub pixels_per_point: Option, /// Time in seconds. Relative to whatever. Used for animation. pub time: f64, @@ -205,7 +205,7 @@ impl InputState { mouse, scroll_delta: new.scroll_delta, screen_size: new.screen_size, - pixels_per_point: new.pixels_per_point.unwrap_or(self.pixels_per_point), + pixels_per_point: new.pixels_per_point.or(self.pixels_per_point), time: new.time, unstable_dt, predicted_dt: 1.0 / 60.0, // TODO: remove this hack @@ -249,9 +249,14 @@ impl InputState { }) } + /// Also known as device pixel ratio, > 1 for HDPI screens. + pub fn pixels_per_point(&self) -> f32 { + self.pixels_per_point.unwrap_or(1.0) + } + /// Size of a physical pixel in logical gui coordinates (points). pub fn physical_pixel_size(&self) -> f32 { - 1.0 / self.pixels_per_point + 1.0 / self.pixels_per_point() } /// How imprecise do we expect the mouse/touch input to be? @@ -370,7 +375,7 @@ impl InputState { ui.add(label!("scroll_delta: {:?} points", self.scroll_delta)); ui.add(label!("screen_size: {:?} points", self.screen_size)); ui.add(label!( - "{} points for each physical pixel (HDPI factor)", + "{:?} points for each physical pixel (HDPI factor)", self.pixels_per_point )); ui.add(label!("time: {:.3} s", self.time));