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| { | 
