diff options
author | A-Walrus | 2022-10-26 03:00:13 +0000 |
---|---|---|
committer | GitHub | 2022-10-26 03:00:13 +0000 |
commit | c4d7cde6c8d7f5ca3a9cabd50bdfbda9c3f7bb15 (patch) | |
tree | 0214dc4270da56e5c50fc009e72ae35c4aaf8bf6 /helix-view | |
parent | ac0fe29867012ba0840ee7c8893b41d976d5ab38 (diff) |
Allow the area to be bigger than u16 (width and height remain u16) (#4318)
Now the editor can fill **very** large terminals.
Changed/removed tests which check the truncating behaviour.
Diffstat (limited to 'helix-view')
-rw-r--r-- | helix-view/src/graphics.rs | 49 |
1 files changed, 5 insertions, 44 deletions
diff --git a/helix-view/src/graphics.rs b/helix-view/src/graphics.rs index 4374a537..cbae873a 100644 --- a/helix-view/src/graphics.rs +++ b/helix-view/src/graphics.rs @@ -95,31 +95,19 @@ pub struct Rect { } impl Rect { - /// Creates a new rect, with width and height limited to keep the area under max u16. - /// If clipped, aspect ratio will be preserved. + /// Creates a new rect, with width and height pub fn new(x: u16, y: u16, width: u16, height: u16) -> Rect { - let max_area = u16::max_value(); - let (clipped_width, clipped_height) = - if u32::from(width) * u32::from(height) > u32::from(max_area) { - let aspect_ratio = f64::from(width) / f64::from(height); - let max_area_f = f64::from(max_area); - let height_f = (max_area_f / aspect_ratio).sqrt(); - let width_f = height_f * aspect_ratio; - (width_f as u16, height_f as u16) - } else { - (width, height) - }; Rect { x, y, - width: clipped_width, - height: clipped_height, + width, + height, } } #[inline] - pub fn area(self) -> u16 { - self.width * self.height + pub fn area(self) -> usize { + (self.width as usize) * (self.height as usize) } #[inline] @@ -631,33 +619,6 @@ mod tests { use super::*; #[test] - fn test_rect_size_truncation() { - for width in 256u16..300u16 { - for height in 256u16..300u16 { - let rect = Rect::new(0, 0, width, height); - rect.area(); // Should not panic. - assert!(rect.width < width || rect.height < height); - // The target dimensions are rounded down so the math will not be too precise - // but let's make sure the ratios don't diverge crazily. - assert!( - (f64::from(rect.width) / f64::from(rect.height) - - f64::from(width) / f64::from(height)) - .abs() - < 1.0 - ) - } - } - - // One dimension below 255, one above. Area above max u16. - let width = 900; - let height = 100; - let rect = Rect::new(0, 0, width, height); - assert_ne!(rect.width, 900); - assert_ne!(rect.height, 100); - assert!(rect.width < width || rect.height < height); - } - - #[test] fn test_rect_size_preservation() { for width in 0..256u16 { for height in 0..256u16 { |