[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 { pub fn pixels_per_point(&self) -> f32 {
self.input.pixels_per_point self.input.pixels_per_point()
} }
/// Useful for pixel-perfect rendering /// Useful for pixel-perfect rendering
pub fn round_to_pixel(&self, point: f32) -> f32 { 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 /// Useful for pixel-perfect rendering
@ -176,7 +177,7 @@ impl Context {
self.input = std::mem::take(&mut self.input).begin_frame(new_raw_input); self.input = std::mem::take(&mut self.input).begin_frame(new_raw_input);
let mut font_definitions = self.font_definitions.lock(); 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 if self.fonts.is_none() || *self.fonts.as_ref().unwrap().definitions() != *font_definitions
{ {
self.fonts = Some(Arc::new(Fonts::from_definitions(font_definitions.clone()))); self.fonts = Some(Arc::new(Fonts::from_definitions(font_definitions.clone())));
@ -535,7 +536,7 @@ impl Context {
ui.collapsing("Stats", |ui| { ui.collapsing("Stats", |ui| {
ui.add(label!( 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.x,
ui.input().screen_size.y, ui.input().screen_size.y,
ui.input().pixels_per_point, ui.input().pixels_per_point,

View file

@ -70,7 +70,7 @@ pub struct InputState {
pub screen_size: Vec2, pub screen_size: Vec2,
/// Also known as device pixel ratio, > 1 for HDPI screens. /// 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. /// Time in seconds. Relative to whatever. Used for animation.
pub time: f64, pub time: f64,
@ -205,7 +205,7 @@ impl InputState {
mouse, mouse,
scroll_delta: new.scroll_delta, scroll_delta: new.scroll_delta,
screen_size: new.screen_size, 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, time: new.time,
unstable_dt, unstable_dt,
predicted_dt: 1.0 / 60.0, // TODO: remove this hack 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). /// Size of a physical pixel in logical gui coordinates (points).
pub fn physical_pixel_size(&self) -> f32 { 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? /// 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!("scroll_delta: {:?} points", self.scroll_delta));
ui.add(label!("screen_size: {:?} points", self.screen_size)); ui.add(label!("screen_size: {:?} points", self.screen_size));
ui.add(label!( ui.add(label!(
"{} points for each physical pixel (HDPI factor)", "{:?} points for each physical pixel (HDPI factor)",
self.pixels_per_point self.pixels_per_point
)); ));
ui.add(label!("time: {:.3} s", self.time)); ui.add(label!("time: {:.3} s", self.time));