diff options
author | 2021-05-17 22:01:43 +0200 | |
---|---|---|
committer | 2021-05-17 22:01:43 +0200 | |
commit | fe2392e9736477a047f605454c6892ed72378032 (patch) | |
tree | eb00d9ba18806dc19d1d4a81370e3ee9b00bd26a /native | |
parent | 40d21d23659bdb9fc6a6166208adb351e188846b (diff) | |
download | iced-fe2392e9736477a047f605454c6892ed72378032.tar.gz iced-fe2392e9736477a047f605454c6892ed72378032.tar.bz2 iced-fe2392e9736477a047f605454c6892ed72378032.zip |
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.
Diffstat (limited to 'native')
-rw-r--r-- | native/src/widget/image/viewer.rs | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/native/src/widget/image/viewer.rs b/native/src/widget/image/viewer.rs index a006c0af..405daf00 100644 --- a/native/src/widget/image/viewer.rs +++ b/native/src/widget/image/viewer.rs @@ -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) |