summaryrefslogtreecommitdiffstats
path: root/native/src/widget/tooltip.rs
diff options
context:
space:
mode:
authorLibravatar Cory Forsstrom <cforsstrom18@gmail.com>2022-08-09 11:23:56 -0700
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2022-08-17 16:15:24 +0200
commit1ae3a94de2f0a3c41de0af1cfe190016c7de60fd (patch)
tree29461d601aa8c3e1402d684ed289b4cbd60b7736 /native/src/widget/tooltip.rs
parent3fe2e14a423b9b568815b870318fa8d98eb90af2 (diff)
downloadiced-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.rs42
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| {