diff options
author | 2022-02-16 17:52:57 +0700 | |
---|---|---|
committer | 2022-02-16 18:19:37 +0700 | |
commit | 6822d1d9f2c5b4fcbf65763c8edd091ac18a657e (patch) | |
tree | 5c9370e0122acca19520dc590f257f2a09397f44 | |
parent | 0aff444941f8b44b5a996dde4810ba6313f43a7e (diff) | |
download | iced-6822d1d9f2c5b4fcbf65763c8edd091ac18a657e.tar.gz iced-6822d1d9f2c5b4fcbf65763c8edd091ac18a657e.tar.bz2 iced-6822d1d9f2c5b4fcbf65763c8edd091ac18a657e.zip |
Center `Image` inside available bounds when possible
-rw-r--r-- | native/src/widget/image.rs | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/native/src/widget/image.rs b/native/src/widget/image.rs index d83230f2..a2e7f765 100644 --- a/native/src/widget/image.rs +++ b/native/src/widget/image.rs @@ -6,7 +6,8 @@ use crate::image; use crate::layout; use crate::renderer; use crate::{ - ContentFit, Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget, + ContentFit, Element, Hasher, Layout, Length, Point, Rectangle, Size, + Vector, Widget, }; use std::hash::Hash; @@ -128,14 +129,18 @@ where let bounds = layout.bounds(); let render = |renderer: &mut Renderer| { - renderer.draw( - self.handle.clone(), - Rectangle { - width: adjusted_fit.width, - height: adjusted_fit.height, - ..layout.bounds() - }, - ) + let offset = Vector::new( + (bounds.width - adjusted_fit.width).max(0.0) / 2.0, + (bounds.height - adjusted_fit.height).max(0.0) / 2.0, + ); + + let bounds = Rectangle { + width: adjusted_fit.width, + height: adjusted_fit.height, + ..layout.bounds() + }; + + renderer.draw(self.handle.clone(), bounds + offset) }; if adjusted_fit.width > bounds.width |