aboutsummaryrefslogtreecommitdiff
path: root/helix-view
diff options
context:
space:
mode:
authorA-Walrus2022-10-26 03:00:13 +0000
committerGitHub2022-10-26 03:00:13 +0000
commitc4d7cde6c8d7f5ca3a9cabd50bdfbda9c3f7bb15 (patch)
tree0214dc4270da56e5c50fc009e72ae35c4aaf8bf6 /helix-view
parentac0fe29867012ba0840ee7c8893b41d976d5ab38 (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.rs49
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 {