diff options
author | 2022-08-09 11:23:56 -0700 | |
---|---|---|
committer | 2022-08-17 16:15:24 +0200 | |
commit | 1ae3a94de2f0a3c41de0af1cfe190016c7de60fd (patch) | |
tree | 29461d601aa8c3e1402d684ed289b4cbd60b7736 /native/src/widget/tooltip.rs | |
parent | 3fe2e14a423b9b568815b870318fa8d98eb90af2 (diff) | |
download | iced-1ae3a94de2f0a3c41de0af1cfe190016c7de60fd.tar.gz iced-1ae3a94de2f0a3c41de0af1cfe190016c7de60fd.tar.bz2 iced-1ae3a94de2f0a3c41de0af1cfe190016c7de60fd.zip |
Add snap within viewport builder
Diffstat (limited to 'native/src/widget/tooltip.rs')
-rw-r--r-- | native/src/widget/tooltip.rs | 42 |
1 files changed, 27 insertions, 15 deletions
diff --git a/native/src/widget/tooltip.rs b/native/src/widget/tooltip.rs index 879bb69c..ff10ca56 100644 --- a/native/src/widget/tooltip.rs +++ b/native/src/widget/tooltip.rs @@ -25,6 +25,7 @@ where position: Position, gap: u16, padding: u16, + snap_within_viewport: bool, style: <Renderer::Theme as container::StyleSheet>::Style, } @@ -50,6 +51,7 @@ where position, gap: 0, padding: Self::DEFAULT_PADDING, + snap_within_viewport: true, style: Default::default(), } } @@ -80,6 +82,12 @@ where self } + /// Sets whether the [`Tooltip`] is snapped within the viewport. + pub fn snap_within_viewport(mut self, snap: bool) -> Self { + self.snap_within_viewport = snap; + self + } + /// Sets the style of the [`Tooltip`]. pub fn style( mut self, @@ -190,6 +198,7 @@ where self.position, self.gap, self.padding, + self.snap_within_viewport, self.style, |renderer, limits| { Widget::<(), Renderer>::layout(tooltip, renderer, limits) @@ -263,6 +272,7 @@ pub fn draw<Renderer>( position: Position, gap: u16, padding: u16, + snap_within_viewport: bool, style: <Renderer::Theme as container::StyleSheet>::Style, layout_text: impl FnOnce(&Renderer, &layout::Limits) -> layout::Node, draw_text: impl FnOnce( @@ -331,22 +341,24 @@ pub fn draw<Renderer>( } }; - if tooltip_bounds.x < viewport.x { - tooltip_bounds.x = viewport.x; - } else if viewport.x + viewport.width - < tooltip_bounds.x + tooltip_bounds.width - { - tooltip_bounds.x = - viewport.x + viewport.width - tooltip_bounds.width; - } + if snap_within_viewport { + if tooltip_bounds.x < viewport.x { + tooltip_bounds.x = viewport.x; + } else if viewport.x + viewport.width + < tooltip_bounds.x + tooltip_bounds.width + { + tooltip_bounds.x = + viewport.x + viewport.width - tooltip_bounds.width; + } - if tooltip_bounds.y < viewport.y { - tooltip_bounds.y = viewport.y; - } else if viewport.y + viewport.height - < tooltip_bounds.y + tooltip_bounds.height - { - tooltip_bounds.y = - viewport.y + viewport.height - tooltip_bounds.height; + if tooltip_bounds.y < viewport.y { + tooltip_bounds.y = viewport.y; + } else if viewport.y + viewport.height + < tooltip_bounds.y + tooltip_bounds.height + { + tooltip_bounds.y = + viewport.y + viewport.height - tooltip_bounds.height; + } } renderer.with_layer(Rectangle::with_size(Size::INFINITY), |renderer| { |