[bug fix] assume pixels_per_point=1 if nothing is ever set

This commit is contained in:
Emil Ernerfeldt 2020-09-09 12:14:00 +02:00
parent bc0d6baefb
commit 23d99b07c8
2 changed files with 14 additions and 8 deletions

View file

@ -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,

View file

@ -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<f32>,
/// 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));