diff options
author | 2024-02-01 01:08:21 +0100 | |
---|---|---|
committer | 2024-02-01 01:08:21 +0100 | |
commit | 738aa47547818ebf57dc4f00099386a5a22a86d5 (patch) | |
tree | 4f262c1bc4d9b55f030146ec2a6f9b6cc421a6c5 /widget/src | |
parent | 7bbe4502170be1942c4e61d222e14401f724aa42 (diff) | |
download | iced-738aa47547818ebf57dc4f00099386a5a22a86d5.tar.gz iced-738aa47547818ebf57dc4f00099386a5a22a86d5.tar.bz2 iced-738aa47547818ebf57dc4f00099386a5a22a86d5.zip |
Remove `position` from `overlay::Element`
Diffstat (limited to 'widget/src')
-rw-r--r-- | widget/src/button.rs | 4 | ||||
-rw-r--r-- | widget/src/column.rs | 11 | ||||
-rw-r--r-- | widget/src/combo_box.rs | 5 | ||||
-rw-r--r-- | widget/src/container.rs | 2 | ||||
-rw-r--r-- | widget/src/keyed/column.rs | 11 | ||||
-rw-r--r-- | widget/src/lazy.rs | 23 | ||||
-rw-r--r-- | widget/src/lazy/component.rs | 31 | ||||
-rw-r--r-- | widget/src/lazy/responsive.rs | 23 | ||||
-rw-r--r-- | widget/src/mouse_area.rs | 4 | ||||
-rw-r--r-- | widget/src/overlay/menu.rs | 29 | ||||
-rw-r--r-- | widget/src/pane_grid.rs | 3 | ||||
-rw-r--r-- | widget/src/pane_grid/content.rs | 15 | ||||
-rw-r--r-- | widget/src/pane_grid/title_bar.rs | 6 | ||||
-rw-r--r-- | widget/src/pick_list.rs | 7 | ||||
-rw-r--r-- | widget/src/row.rs | 11 | ||||
-rw-r--r-- | widget/src/scrollable.rs | 35 | ||||
-rw-r--r-- | widget/src/themer.rs | 19 | ||||
-rw-r--r-- | widget/src/tooltip.rs | 64 |
18 files changed, 150 insertions, 153 deletions
diff --git a/widget/src/button.rs b/widget/src/button.rs index 3b11e8a7..d16e8c67 100644 --- a/widget/src/button.rs +++ b/widget/src/button.rs @@ -11,7 +11,7 @@ use crate::core::widget::tree::{self, Tree}; use crate::core::widget::Operation; use crate::core::{ Background, Clipboard, Color, Element, Layout, Length, Padding, Rectangle, - Shell, Size, Widget, + Shell, Size, Vector, Widget, }; pub use crate::style::button::{Appearance, StyleSheet}; @@ -271,11 +271,13 @@ where tree: &'b mut Tree, layout: Layout<'_>, renderer: &Renderer, + translation: Vector, ) -> Option<overlay::Element<'b, Message, Theme, Renderer>> { self.content.as_widget_mut().overlay( &mut tree.children[0], layout.children().next().unwrap(), renderer, + translation, ) } } diff --git a/widget/src/column.rs b/widget/src/column.rs index faac0e48..1e9841ee 100644 --- a/widget/src/column.rs +++ b/widget/src/column.rs @@ -7,7 +7,7 @@ use crate::core::renderer; use crate::core::widget::{Operation, Tree}; use crate::core::{ Alignment, Clipboard, Element, Layout, Length, Padding, Pixels, Rectangle, - Shell, Size, Widget, + Shell, Size, Vector, Widget, }; /// A container that distributes its contents vertically. @@ -259,8 +259,15 @@ where tree: &'b mut Tree, layout: Layout<'_>, renderer: &Renderer, + translation: Vector, ) -> Option<overlay::Element<'b, Message, Theme, Renderer>> { - overlay::from_children(&mut self.children, tree, layout, renderer) + overlay::from_children( + &mut self.children, + tree, + layout, + renderer, + translation, + ) } } diff --git a/widget/src/combo_box.rs b/widget/src/combo_box.rs index 0103e9cd..e3862174 100644 --- a/widget/src/combo_box.rs +++ b/widget/src/combo_box.rs @@ -10,7 +10,7 @@ use crate::core::text; use crate::core::time::Instant; use crate::core::widget::{self, Widget}; use crate::core::{ - Clipboard, Element, Length, Padding, Rectangle, Shell, Size, + Clipboard, Element, Length, Padding, Rectangle, Shell, Size, Vector, }; use crate::overlay::menu; use crate::text::LineHeight; @@ -657,6 +657,7 @@ where tree: &'b mut widget::Tree, layout: Layout<'_>, _renderer: &Renderer, + translation: Vector, ) -> Option<overlay::Element<'b, Message, Theme, Renderer>> { let is_focused = { let text_input_state = tree.children[0] @@ -705,7 +706,7 @@ where menu = menu.text_size(size); } - Some(menu.overlay(layout.position(), bounds.height)) + Some(menu.overlay(layout.position() + translation, bounds.height)) } else { None } diff --git a/widget/src/container.rs b/widget/src/container.rs index 78ec1978..4eb4a5d9 100644 --- a/widget/src/container.rs +++ b/widget/src/container.rs @@ -279,11 +279,13 @@ where tree: &'b mut Tree, layout: Layout<'_>, renderer: &Renderer, + translation: Vector, ) -> Option<overlay::Element<'b, Message, Theme, Renderer>> { self.content.as_widget_mut().overlay( tree, layout.children().next().unwrap(), renderer, + translation, ) } } diff --git a/widget/src/keyed/column.rs b/widget/src/keyed/column.rs index 6203d2c5..88a6e503 100644 --- a/widget/src/keyed/column.rs +++ b/widget/src/keyed/column.rs @@ -8,7 +8,7 @@ use crate::core::widget::tree::{self, Tree}; use crate::core::widget::Operation; use crate::core::{ Alignment, Clipboard, Element, Layout, Length, Padding, Pixels, Rectangle, - Shell, Size, Widget, + Shell, Size, Vector, Widget, }; /// A container that distributes its contents vertically. @@ -316,8 +316,15 @@ where tree: &'b mut Tree, layout: Layout<'_>, renderer: &Renderer, + translation: Vector, ) -> Option<overlay::Element<'b, Message, Theme, Renderer>> { - overlay::from_children(&mut self.children, tree, layout, renderer) + overlay::from_children( + &mut self.children, + tree, + layout, + renderer, + translation, + ) } } diff --git a/widget/src/lazy.rs b/widget/src/lazy.rs index dda6162b..eb663ea5 100644 --- a/widget/src/lazy.rs +++ b/widget/src/lazy.rs @@ -259,6 +259,7 @@ where tree: &'b mut Tree, layout: Layout<'_>, renderer: &Renderer, + translation: Vector, ) -> Option<overlay::Element<'_, Message, Theme, Renderer>> { let overlay = Overlay(Some( InnerBuilder { @@ -275,18 +276,14 @@ where overlay_builder: |element, tree| { element .as_widget_mut() - .overlay(tree, layout, renderer) + .overlay(tree, layout, renderer, translation) .map(|overlay| RefCell::new(Nested::new(overlay))) }, } .build(), )); - let has_overlay = - overlay.with_overlay_maybe(|overlay| overlay.position()); - - has_overlay - .map(|position| overlay::Element::new(position, Box::new(overlay))) + Some(overlay::Element::new(Box::new(overlay))) } } @@ -339,17 +336,9 @@ impl<'a, Message, Theme, Renderer> overlay::Overlay<Message, Theme, Renderer> where Renderer: core::Renderer, { - fn layout( - &mut self, - renderer: &Renderer, - bounds: Size, - position: Point, - translation: Vector, - ) -> layout::Node { - self.with_overlay_maybe(|overlay| { - overlay.layout(renderer, bounds, position, translation) - }) - .unwrap_or_default() + fn layout(&mut self, renderer: &Renderer, bounds: Size) -> layout::Node { + self.with_overlay_maybe(|overlay| overlay.layout(renderer, bounds)) + .unwrap_or_default() } fn draw( diff --git a/widget/src/lazy/component.rs b/widget/src/lazy/component.rs index 30b1efed..edecbdaa 100644 --- a/widget/src/lazy/component.rs +++ b/widget/src/lazy/component.rs @@ -462,6 +462,7 @@ where tree: &'b mut Tree, layout: Layout<'_>, renderer: &Renderer, + translation: Vector, ) -> Option<overlay::Element<'b, Message, Theme, Renderer>> { self.rebuild_element_if_necessary(); let tree = tree @@ -486,6 +487,7 @@ where &mut tree.children[0], layout, renderer, + translation, ) .map(|overlay| { RefCell::new(Nested::new(overlay)) @@ -497,18 +499,9 @@ where .build(), )); - let has_overlay = overlay.0.as_ref().unwrap().with_overlay(|overlay| { - overlay.as_ref().map(|nested| nested.borrow().position()) - }); - - has_overlay.map(|position| { - overlay::Element::new( - position, - Box::new(OverlayInstance { - overlay: Some(overlay), - }), - ) - }) + Some(overlay::Element::new(Box::new(OverlayInstance { + overlay: Some(overlay), + }))) } } @@ -582,17 +575,9 @@ where Renderer: core::Renderer, S: 'static + Default, { - fn layout( - &mut self, - renderer: &Renderer, - bounds: Size, - position: Point, - translation: Vector, - ) -> layout::Node { - self.with_overlay_maybe(|overlay| { - overlay.layout(renderer, bounds, position, translation) - }) - .unwrap_or_default() + fn layout(&mut self, renderer: &Renderer, bounds: Size) -> layout::Node { + self.with_overlay_maybe(|overlay| overlay.layout(renderer, bounds)) + .unwrap_or_default() } fn draw( diff --git a/widget/src/lazy/responsive.rs b/widget/src/lazy/responsive.rs index 9875b24e..44312a21 100644 --- a/widget/src/lazy/responsive.rs +++ b/widget/src/lazy/responsive.rs @@ -279,6 +279,7 @@ where tree: &'b mut Tree, layout: Layout<'_>, renderer: &Renderer, + translation: Vector, ) -> Option<overlay::Element<'b, Message, Theme, Renderer>> { use std::ops::DerefMut; @@ -309,17 +310,13 @@ where element .as_widget_mut() - .overlay(tree, content_layout, renderer) + .overlay(tree, content_layout, renderer, translation) .map(|overlay| RefCell::new(Nested::new(overlay))) }, } .build(); - let has_overlay = - overlay.with_overlay_maybe(|overlay| overlay.position()); - - has_overlay - .map(|position| overlay::Element::new(position, Box::new(overlay))) + Some(overlay::Element::new(Box::new(overlay))) } } @@ -375,17 +372,9 @@ impl<'a, 'b, Message, Theme, Renderer> where Renderer: core::Renderer, { - fn layout( - &mut self, - renderer: &Renderer, - bounds: Size, - position: Point, - translation: Vector, - ) -> layout::Node { - self.with_overlay_maybe(|overlay| { - overlay.layout(renderer, bounds, position, translation) - }) - .unwrap_or_default() + fn layout(&mut self, renderer: &Renderer, bounds: Size) -> layout::Node { + self.with_overlay_maybe(|overlay| overlay.layout(renderer, bounds)) + .unwrap_or_default() } fn draw( diff --git a/widget/src/mouse_area.rs b/widget/src/mouse_area.rs index 62bb45d8..88f7d126 100644 --- a/widget/src/mouse_area.rs +++ b/widget/src/mouse_area.rs @@ -8,7 +8,7 @@ use crate::core::renderer; use crate::core::touch; use crate::core::widget::{tree, Operation, Tree}; use crate::core::{ - Clipboard, Element, Layout, Length, Rectangle, Shell, Size, Widget, + Clipboard, Element, Layout, Length, Rectangle, Shell, Size, Vector, Widget, }; /// Emit messages on mouse events. @@ -217,11 +217,13 @@ where tree: &'b mut Tree, layout: Layout<'_>, renderer: &Renderer, + translation: Vector, ) -> Option<overlay::Element<'b, Message, Theme, Renderer>> { self.content.as_widget_mut().overlay( &mut tree.children[0], layout, renderer, + translation, ) } } diff --git a/widget/src/overlay/menu.rs b/widget/src/overlay/menu.rs index a7b7ec94..8a4d6a98 100644 --- a/widget/src/overlay/menu.rs +++ b/widget/src/overlay/menu.rs @@ -134,10 +134,11 @@ where position: Point, target_height: f32, ) -> overlay::Element<'a, Message, Theme, Renderer> { - overlay::Element::new( + overlay::Element::new(Box::new(Overlay::new( position, - Box::new(Overlay::new(self, target_height)), - ) + self, + target_height, + ))) } } @@ -167,6 +168,7 @@ where Theme: StyleSheet + container::StyleSheet, Renderer: crate::core::Renderer, { + position: Point, state: &'a mut Tree, container: Container<'a, Message, Theme, Renderer>, width: f32, @@ -181,6 +183,7 @@ where Renderer: text::Renderer + 'a, { pub fn new<T>( + position: Point, menu: Menu<'a, T, Message, Theme, Renderer>, target_height: f32, ) -> Self @@ -218,6 +221,7 @@ where state.tree.diff(&container as &dyn Widget<_, _, _>); Self { + position, state: &mut state.tree, container, width, @@ -234,20 +238,15 @@ where Theme: StyleSheet + container::StyleSheet, Renderer: text::Renderer, { - fn layout( - &mut self, - renderer: &Renderer, - bounds: Size, - position: Point, - _translation: Vector, - ) -> layout::Node { - let space_below = bounds.height - (position.y + self.target_height); - let space_above = position.y; + fn layout(&mut self, renderer: &Renderer, bounds: Size) -> layout::Node { + let space_below = + bounds.height - (self.position.y + self.target_height); + let space_above = self.position.y; let limits = layout::Limits::new( Size::ZERO, Size::new( - bounds.width - position.x, + bounds.width - self.position.x, if space_below > space_above { space_below } else { @@ -261,9 +260,9 @@ where let size = node.size(); node.move_to(if space_below > space_above { - position + Vector::new(0.0, self.target_height) + self.position + Vector::new(0.0, self.target_height) } else { - position - Vector::new(0.0, size.height) + self.position - Vector::new(0.0, size.height) }) } diff --git a/widget/src/pane_grid.rs b/widget/src/pane_grid.rs index c20d959a..f76c6088 100644 --- a/widget/src/pane_grid.rs +++ b/widget/src/pane_grid.rs @@ -447,6 +447,7 @@ where tree: &'b mut Tree, layout: Layout<'_>, renderer: &Renderer, + translation: Vector, ) -> Option<overlay::Element<'_, Message, Theme, Renderer>> { let children = self .contents @@ -454,7 +455,7 @@ where .zip(&mut tree.children) .zip(layout.children()) .filter_map(|(((_, content), state), layout)| { - content.overlay(state, layout, renderer) + content.overlay(state, layout, renderer, translation) }) .collect::<Vec<_>>(); diff --git a/widget/src/pane_grid/content.rs b/widget/src/pane_grid/content.rs index 415dcc3e..dfe0fdcf 100644 --- a/widget/src/pane_grid/content.rs +++ b/widget/src/pane_grid/content.rs @@ -5,7 +5,9 @@ use crate::core::mouse; use crate::core::overlay; use crate::core::renderer; use crate::core::widget::{self, Tree}; -use crate::core::{Clipboard, Element, Layout, Point, Rectangle, Shell, Size}; +use crate::core::{ + Clipboard, Element, Layout, Point, Rectangle, Shell, Size, Vector, +}; use crate::pane_grid::{Draggable, TitleBar}; /// The content of a [`Pane`]. @@ -330,6 +332,7 @@ where tree: &'b mut Tree, layout: Layout<'_>, renderer: &Renderer, + translation: Vector, ) -> Option<overlay::Element<'b, Message, Theme, Renderer>> { if let Some(title_bar) = self.title_bar.as_mut() { let mut children = layout.children(); @@ -339,13 +342,18 @@ where let body_state = states.next().unwrap(); let title_bar_state = states.next().unwrap(); - match title_bar.overlay(title_bar_state, title_bar_layout, renderer) - { + match title_bar.overlay( + title_bar_state, + title_bar_layout, + renderer, + translation, + ) { Some(overlay) => Some(overlay), None => self.body.as_widget_mut().overlay( body_state, children.next()?, renderer, + translation, ), } } else { @@ -353,6 +361,7 @@ where &mut tree.children[0], layout, renderer, + translation, ) } } diff --git a/widget/src/pane_grid/title_bar.rs b/widget/src/pane_grid/title_bar.rs index 3cca6b33..5b57509b 100644 --- a/widget/src/pane_grid/title_bar.rs +++ b/widget/src/pane_grid/title_bar.rs @@ -6,7 +6,7 @@ use crate::core::overlay; use crate::core::renderer; use crate::core::widget::{self, Tree}; use crate::core::{ - Clipboard, Element, Layout, Padding, Point, Rectangle, Shell, Size, + Clipboard, Element, Layout, Padding, Point, Rectangle, Shell, Size, Vector, }; /// The title bar of a [`Pane`]. @@ -405,6 +405,7 @@ where tree: &'b mut Tree, layout: Layout<'_>, renderer: &Renderer, + translation: Vector, ) -> Option<overlay::Element<'b, Message, Theme, Renderer>> { let mut children = layout.children(); let padded = children.next()?; @@ -422,7 +423,7 @@ where content .as_widget_mut() - .overlay(title_state, title_layout, renderer) + .overlay(title_state, title_layout, renderer, translation) .or_else(move || { controls.as_mut().and_then(|controls| { let controls_layout = children.next()?; @@ -431,6 +432,7 @@ where controls_state, controls_layout, renderer, + translation, ) }) }) diff --git a/widget/src/pick_list.rs b/widget/src/pick_list.rs index 70b1d4c0..475115c2 100644 --- a/widget/src/pick_list.rs +++ b/widget/src/pick_list.rs @@ -12,7 +12,7 @@ use crate::core::touch; use crate::core::widget::tree::{self, Tree}; use crate::core::{ Clipboard, Element, Layout, Length, Padding, Pixels, Point, Rectangle, - Shell, Size, Widget, + Shell, Size, Vector, Widget, }; use crate::overlay::menu::{self, Menu}; use crate::scrollable; @@ -265,11 +265,13 @@ where tree: &'b mut Tree, layout: Layout<'_>, renderer: &Renderer, + translation: Vector, ) -> Option<overlay::Element<'b, Message, Theme, Renderer>> { let state = tree.state.downcast_mut::<State<Renderer::Paragraph>>(); overlay( layout, + translation, state, self.padding, self.text_size, @@ -573,6 +575,7 @@ pub fn mouse_interaction( /// Returns the current overlay of a [`PickList`]. pub fn overlay<'a, T, Message, Theme, Renderer>( layout: Layout<'_>, + translation: Vector, state: &'a mut State<Renderer::Paragraph>, padding: Padding, text_size: Option<Pixels>, @@ -617,7 +620,7 @@ where menu = menu.text_size(text_size); } - Some(menu.overlay(layout.position(), bounds.height)) + Some(menu.overlay(layout.position() + translation, bounds.height)) } else { None } diff --git a/widget/src/row.rs b/widget/src/row.rs index 89f610c9..7f8c3354 100644 --- a/widget/src/row.rs +++ b/widget/src/row.rs @@ -7,7 +7,7 @@ use crate::core::renderer; use crate::core::widget::{Operation, Tree}; use crate::core::{ Alignment, Clipboard, Element, Length, Padding, Pixels, Rectangle, Shell, - Size, Widget, + Size, Vector, Widget, }; /// A container that distributes its contents horizontally. @@ -248,8 +248,15 @@ where tree: &'b mut Tree, layout: Layout<'_>, renderer: &Renderer, + translation: Vector, ) -> Option<overlay::Element<'b, Message, Theme, Renderer>> { - overlay::from_children(&mut self.children, tree, layout, renderer) + overlay::from_children( + &mut self.children, + tree, + layout, + renderer, + translation, + ) } } diff --git a/widget/src/scrollable.rs b/widget/src/scrollable.rs index 6e48cd10..207b2539 100644 --- a/widget/src/scrollable.rs +++ b/widget/src/scrollable.rs @@ -385,25 +385,24 @@ where tree: &'b mut Tree, layout: Layout<'_>, renderer: &Renderer, + translation: Vector, ) -> Option<overlay::Element<'b, Message, Theme, Renderer>> { - self.content - .as_widget_mut() - .overlay( - &mut tree.children[0], - layout.children().next().unwrap(), - renderer, - ) - .map(|overlay| { - let bounds = layout.bounds(); - let content_layout = layout.children().next().unwrap(); - let content_bounds = content_layout.bounds(); - let translation = tree - .state - .downcast_ref::<State>() - .translation(self.direction, bounds, content_bounds); - - overlay.translate(Vector::new(-translation.x, -translation.y)) - }) + let bounds = layout.bounds(); + let content_layout = layout.children().next().unwrap(); + let content_bounds = content_layout.bounds(); + + let offset = tree.state.downcast_ref::<State>().translation( + self.direction, + bounds, + content_bounds, + ); + + self.content.as_widget_mut().overlay( + &mut tree.children[0], + layout.children().next().unwrap(), + renderer, + translation - offset, + ) } } diff --git a/widget/src/themer.rs b/widget/src/themer.rs index ee96a493..e6ca6cfe 100644 --- a/widget/src/themer.rs +++ b/widget/src/themer.rs @@ -141,6 +141,7 @@ where tree: &'b mut Tree, layout: Layout<'_>, renderer: &Renderer, + translation: Vector, ) -> Option<overlay::Element<'b, Message, AnyTheme, Renderer>> { struct Overlay<'a, Message, Theme, Renderer> { theme: &'a Theme, @@ -157,14 +158,8 @@ where &mut self, renderer: &Renderer, bounds: Size, - position: Point, - translation: Vector, ) -> layout::Node { - self.content.layout( - renderer, - bounds, - translation + (position - Point::ORIGIN), - ) + self.content.layout(renderer, bounds) } fn draw( @@ -233,22 +228,18 @@ where theme: self.theme, content, }) - .map(|overlay| { - overlay::Element::new(Point::ORIGIN, Box::new(overlay)) - }) + .map(|overlay| overlay::Element::new(Box::new(overlay))) } } self.content .as_widget_mut() - .overlay(tree, layout, renderer) + .overlay(tree, layout, renderer, translation) .map(|content| Overlay { theme: &self.theme, content, }) - .map(|overlay| { - overlay::Element::new(Point::ORIGIN, Box::new(overlay)) - }) + .map(|overlay| overlay::Element::new(Box::new(overlay))) } } diff --git a/widget/src/tooltip.rs b/widget/src/tooltip.rs index 44cfc4b3..87bec932 100644 --- a/widget/src/tooltip.rs +++ b/widget/src/tooltip.rs @@ -231,6 +231,7 @@ where tree: &'b mut widget::Tree, layout: Layout<'_>, renderer: &Renderer, + translation: Vector, ) -> Option<overlay::Element<'b, Message, Theme, Renderer>> { let state = tree.state.downcast_ref::<State>(); @@ -240,23 +241,22 @@ where children.next().unwrap(), layout, renderer, + translation, ); let tooltip = if let State::Hovered { cursor_position } = *state { - Some(overlay::Element::new( - layout.position(), - Box::new(Overlay { - tooltip: &self.tooltip, - state: children.next().unwrap(), - cursor_position, - content_bounds: layout.bounds(), - snap_within_viewport: self.snap_within_viewport, - position: self.position, - gap: self.gap, - padding: self.padding, - style: &self.style, - }), - )) + Some(overlay::Element::new(Box::new(Overlay { + position: layout.position() + translation, + tooltip: &self.tooltip, + state: children.next().unwrap(), + cursor_position, + content_bounds: layout.bounds(), + snap_within_viewport: self.snap_within_viewport, + positioning: self.position, + gap: self.gap, + padding: self.padding, + style: &self.style, + }))) } else { None }; @@ -317,12 +317,13 @@ where Theme: container::StyleSheet + widget::text::StyleSheet, Renderer: text::Renderer, { + position: Point, tooltip: &'b Text<'a, Theme, Renderer>, state: &'b mut widget::Tree, cursor_position: Point, content_bounds: Rectangle, snap_within_viewport: bool, - position: Position, + positioning: Position, gap: f32, padding: f32, style: &'b <Theme as container::StyleSheet>::Style, @@ -335,13 +336,7 @@ where Theme: container::StyleSheet + widget::text::StyleSheet, Renderer: text::Renderer, { - fn layout( - &mut self, - renderer: &Renderer, - bounds: Size, - position: Point, - _translation: Vector, - ) -> layout::Node { + fn layout(&mut self, renderer: &Renderer, bounds: Size) -> layout::Node { let viewport = Rectangle::with_size(bounds); let text_layout = Widget::<(), Theme, Renderer>::layout( @@ -358,37 +353,44 @@ where ); let text_bounds = text_layout.bounds(); - let x_center = - position.x + (self.content_bounds.width - text_bounds.width) / 2.0; - let y_center = position.y + let x_center = self.position.x + + (self.content_bounds.width - text_bounds.width) / 2.0; + let y_center = self.position.y + (self.content_bounds.height - text_bounds.height) / 2.0; let mut tooltip_bounds = { - let offset = match self.position { + let offset = match self.positioning { Position::Top => Vector::new( x_center, - position.y - text_bounds.height - self.gap - self.padding, + self.position.y + - text_bounds.height + - self.gap + - self.padding, ), Position::Bottom => Vector::new( x_center, - position.y + self.position.y + self.content_bounds.height + self.gap + self.padding, ), Position::Left => Vector::new( - position.x - text_bounds.width - self.gap - self.padding, + self.position.x + - text_bounds.width + - self.gap + - self.padding, y_center, ), Position::Right => Vector::new( - position.x + self.position.x + self.content_bounds.width + self.gap + self.padding, y_center, ), Position::FollowCursor => { - let translation = position - self.content_bounds.position(); + let translation = + self.position - self.content_bounds.position(); Vector::new( self.cursor_position.x, |