viewer: Don't calculate viewport on Fill|Portion

Currently image::viewer will not expand it's image into empty space even
when Length::Fill or Length::FillPortion are used. Only calculate
viewport when viewer cannot expand.
This commit is contained in:
chiheisen 2021-05-17 22:01:43 +02:00
parent 40d21d2365
commit fe2392e973

View file

@ -132,19 +132,30 @@ where
) -> layout::Node {
let (width, height) = renderer.dimensions(&self.handle);
let aspect_ratio = width as f32 / height as f32;
let mut size = limits
.width(self.width)
.height(self.height)
.resolve(Size::new(width as f32, height as f32));
let viewport_aspect_ratio = size.width / size.height;
if viewport_aspect_ratio > aspect_ratio {
size.width = width as f32 * size.height / height as f32;
let expansion_size = if height > width {
self.width
} else {
size.height = height as f32 * size.width / width as f32;
self.height
};
// Only calculate viewport sizes if the images are constrained to a limited space.
// If they are Fill|Portion let them expand within their alotted space.
match expansion_size {
Length::Shrink | Length::Units(_) => {
let aspect_ratio = width as f32 / height as f32;
let viewport_aspect_ratio = size.width / size.height;
if viewport_aspect_ratio > aspect_ratio {
size.width = width as f32 * size.height / height as f32;
} else {
size.height = height as f32 * size.width / width as f32;
}
}
Length::Fill | Length::FillPortion(_) => {}
}
layout::Node::new(size)