diff options
author | 2023-07-29 19:48:04 +0200 | |
---|---|---|
committer | 2023-07-29 19:48:04 +0200 | |
commit | 16a8a494a46361c5bbb0f902a381a182c59a093e (patch) | |
tree | 3e3bb0f29eb033564a609ad5c344b62df926b010 /widget/src | |
parent | 226e9d1cb9af6f42261a6269579d69080c7db091 (diff) | |
download | iced-16a8a494a46361c5bbb0f902a381a182c59a093e.tar.gz iced-16a8a494a46361c5bbb0f902a381a182c59a093e.tar.bz2 iced-16a8a494a46361c5bbb0f902a381a182c59a093e.zip |
Fix `Tooltip` overlay position inside `Scrollable`
Diffstat (limited to 'widget/src')
-rw-r--r-- | widget/src/tooltip.rs | 34 |
1 files changed, 16 insertions, 18 deletions
diff --git a/widget/src/tooltip.rs b/widget/src/tooltip.rs index ff7f960f..faa3f3e1 100644 --- a/widget/src/tooltip.rs +++ b/widget/src/tooltip.rs @@ -314,7 +314,7 @@ where &self, renderer: &Renderer, bounds: Size, - _position: Point, + position: Point, ) -> layout::Node { let viewport = Rectangle::with_size(bounds); @@ -331,45 +331,43 @@ where ); let text_bounds = text_layout.bounds(); - let x_center = self.content_bounds.x - + (self.content_bounds.width - text_bounds.width) / 2.0; - let y_center = self.content_bounds.y + let x_center = + position.x + (self.content_bounds.width - text_bounds.width) / 2.0; + let y_center = position.y + (self.content_bounds.height - text_bounds.height) / 2.0; let mut tooltip_bounds = { let offset = match self.position { Position::Top => Vector::new( x_center, - self.content_bounds.y - - text_bounds.height - - self.gap - - self.padding, + position.y - text_bounds.height - self.gap - self.padding, ), Position::Bottom => Vector::new( x_center, - self.content_bounds.y + position.y + self.content_bounds.height + self.gap + self.padding, ), Position::Left => Vector::new( - self.content_bounds.x - - text_bounds.width - - self.gap - - self.padding, + position.x - text_bounds.width - self.gap - self.padding, y_center, ), Position::Right => Vector::new( - self.content_bounds.x + position.x + self.content_bounds.width + self.gap + self.padding, y_center, ), - Position::FollowCursor => Vector::new( - self.cursor_position.x, - self.cursor_position.y - text_bounds.height, - ), + Position::FollowCursor => { + let translation = position - self.content_bounds.position(); + + Vector::new( + self.cursor_position.x, + self.cursor_position.y - text_bounds.height, + ) + translation + } }; Rectangle { |