From fa5c7c63d9b579f0b237735ea60068eeaecef62f Mon Sep 17 00:00:00 2001 From: Dorota Czaplejewicz Date: Mon, 2 Mar 2020 08:14:01 +0000 Subject: [PATCH] ui_manager: Calculate max_height in a purer fashion --- src/ui_manager.rs | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/ui_manager.rs b/src/ui_manager.rs index 5f56fcf1..95fc7218 100644 --- a/src/ui_manager.rs +++ b/src/ui_manager.rs @@ -10,6 +10,7 @@ use std::cmp::min; use ::logging; +use ::outputs::OutputState; use ::outputs::c::OutputHandle; mod c { @@ -65,12 +66,10 @@ impl Manager { /// distance from display, and motor skills of the user. // FIXME: Start by making this aware of display's dpi, // then layout number of rows. - fn get_max_target_height(&self) -> u32 { + fn get_max_target_height(output: &OutputState) -> u32 { let layout_rows = 4; // FIXME: use number from layout. - let (scale, px_size, phys_size) = (&self.output).as_ref() - .and_then(|o| o.get_state()) - .map(|os| (os.scale as u32, os.get_pixel_size(), os.get_phys_size())) - .unwrap_or((1, None, None)); + let px_size = output.get_pixel_size(); + let phys_size = output.get_phys_size(); let finger_height_px = match (px_size, phys_size) { (Some(px_size), Some(phys_size)) => { @@ -84,13 +83,13 @@ impl Manager { // TODO: Take into account target shape/area, not just height. finger_height_mm * px_size.height as f64 / phys_size.height as f64 }, - (_, None) => scale as f64 * 52.5, // match total 420px at scale 2 from original design + (_, None) => output.scale as f64 * 52.5, // match total 420px at scale 2 from original design (None, Some(_)) => { log_print!( logging::Level::Surprise, "Output has physical size data but no pixel info", ); - scale as f64 * 52.5 + output.scale as f64 * 52.5 }, }; (layout_rows as f64 * finger_height_px) as u32 @@ -99,9 +98,13 @@ impl Manager { fn get_perceptual_height(&self) -> Option { let output_info = (&self.output).as_ref() .and_then(|o| o.get_state()) - .map(|os| (os.scale as u32, os.get_pixel_size())); + .map(|os| ( + os.scale as u32, + os.get_pixel_size(), + Manager::get_max_target_height(&os), + )); match output_info { - Some((scale, Some(px_size))) => Some({ + Some((scale, Some(px_size), target_height)) => Some({ let height = if (px_size.width < 720) & (px_size.width > 0) { px_size.width * 7 / 12 // to match 360×210 } else if px_size.width < 1080 { @@ -113,10 +116,10 @@ impl Manager { // Don't exceed half the display size. let height = min(height, px_size.height / 2); // Don't waste screen space by exceeding best target height. - let height = min(height, self.get_max_target_height()); + let height = min(height, target_height); height / scale }), - Some((scale, None)) => Some(360 / scale), + Some((scale, None, _)) => Some(360 / scale), None => None, } }