summaryrefslogtreecommitdiffstats
path: root/native
diff options
context:
space:
mode:
authorLibravatar chiheisen <chiheisen@chiheisen.moe>2021-05-17 22:01:43 +0200
committerLibravatar chiheisen <chiheisen@chiheisen.moe>2021-05-17 22:01:43 +0200
commitfe2392e9736477a047f605454c6892ed72378032 (patch)
treeeb00d9ba18806dc19d1d4a81370e3ee9b00bd26a /native
parent40d21d23659bdb9fc6a6166208adb351e188846b (diff)
downloadiced-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.rs25
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)