diff options
Diffstat (limited to '')
| -rw-r--r-- | examples/scrollable/src/main.rs | 36 | ||||
| -rw-r--r-- | native/src/widget/scrollable.rs | 8 | ||||
| -rw-r--r-- | style/src/scrollable.rs | 32 | ||||
| -rw-r--r-- | style/src/theme.rs | 63 | 
4 files changed, 73 insertions, 66 deletions
diff --git a/examples/scrollable/src/main.rs b/examples/scrollable/src/main.rs index 7c858961..f8c5aa74 100644 --- a/examples/scrollable/src/main.rs +++ b/examples/scrollable/src/main.rs @@ -339,22 +339,36 @@ impl scrollable::StyleSheet for ScrollbarCustomStyle {          style.active(&theme::Scrollable::Default)      } -    fn hovered(&self, style: &Self::Style) -> Scrollbar { -        style.hovered(&theme::Scrollable::Default) +    fn hovered( +        &self, +        style: &Self::Style, +        is_mouse_over_scrollbar: bool, +    ) -> Scrollbar { +        style.hovered(&theme::Scrollable::Default, is_mouse_over_scrollbar)      } -    fn hovered_horizontal(&self, style: &Self::Style) -> Scrollbar { -        Scrollbar { -            background: style.active(&theme::Scrollable::default()).background, -            border_radius: 0.0, -            border_width: 0.0, -            border_color: Default::default(), -            scroller: Scroller { -                color: Color::from_rgb8(250, 85, 134), +    fn hovered_horizontal( +        &self, +        style: &Self::Style, +        is_mouse_over_scrollbar: bool, +    ) -> Scrollbar { +        if is_mouse_over_scrollbar { +            Scrollbar { +                background: style +                    .active(&theme::Scrollable::default()) +                    .background,                  border_radius: 0.0,                  border_width: 0.0,                  border_color: Default::default(), -            }, +                scroller: Scroller { +                    color: Color::from_rgb8(250, 85, 134), +                    border_radius: 0.0, +                    border_width: 0.0, +                    border_color: Default::default(), +                }, +            } +        } else { +            self.active(style)          }      }  } diff --git a/native/src/widget/scrollable.rs b/native/src/widget/scrollable.rs index be81bee1..d9cdf296 100644 --- a/native/src/widget/scrollable.rs +++ b/native/src/widget/scrollable.rs @@ -857,10 +857,8 @@ pub fn draw<Renderer>(                  if let Some(scrollbar) = scrollbars.y {                      let style = if state.y_scroller_grabbed_at.is_some() {                          theme.dragging(style) -                    } else if mouse_over_y_scrollbar { -                        theme.hovered_scrollbar(style)                      } else if mouse_over_scrollable { -                        theme.hovered(style) +                        theme.hovered(style, mouse_over_y_scrollbar)                      } else {                          theme.active(style)                      }; @@ -872,10 +870,8 @@ pub fn draw<Renderer>(                  if let Some(scrollbar) = scrollbars.x {                      let style = if state.x_scroller_grabbed_at.is_some() {                          theme.dragging_horizontal(style) -                    } else if mouse_over_x_scrollbar { -                        theme.hovered_scrollbar_horizontal(style)                      } else if mouse_over_scrollable { -                        theme.hovered_horizontal(style) +                        theme.hovered_horizontal(style, mouse_over_x_scrollbar)                      } else {                          theme.active_horizontal(style)                      }; diff --git a/style/src/scrollable.rs b/style/src/scrollable.rs index f3c04235..64a91b69 100644 --- a/style/src/scrollable.rs +++ b/style/src/scrollable.rs @@ -37,17 +37,16 @@ pub trait StyleSheet {      /// Produces the style of an active scrollbar.      fn active(&self, style: &Self::Style) -> Scrollbar; -    /// Produces the style of a hovered scrollbar. -    fn hovered_scrollbar(&self, style: &Self::Style) -> Scrollbar; +    /// Produces the style of a scrollbar when the scrollable is being hovered. +    fn hovered( +        &self, +        style: &Self::Style, +        is_mouse_over_scrollbar: bool, +    ) -> Scrollbar;      /// Produces the style of a scrollbar that is being dragged.      fn dragging(&self, style: &Self::Style) -> Scrollbar { -        self.hovered_scrollbar(style) -    } - -    /// Produces the style of a scrollbar when mouse is over the scrollable area. -    fn hovered(&self, style: &Self::Style) -> Scrollbar { -        self.active(style) +        self.hovered(style, true)      }      /// Produces the style of an active horizontal scrollbar. @@ -55,18 +54,17 @@ pub trait StyleSheet {          self.active(style)      } -    /// Produces the style of a hovered horizontal scrollbar. -    fn hovered_scrollbar_horizontal(&self, style: &Self::Style) -> Scrollbar { -        self.hovered_scrollbar(style) +    /// Produces the style of a horizontal scrollbar when the scrollable is being hovered. +    fn hovered_horizontal( +        &self, +        style: &Self::Style, +        is_mouse_over_scrollbar: bool, +    ) -> Scrollbar { +        self.hovered(style, is_mouse_over_scrollbar)      }      /// Produces the style of a horizontal scrollbar that is being dragged.      fn dragging_horizontal(&self, style: &Self::Style) -> Scrollbar { -        self.hovered_scrollbar_horizontal(style) -    } - -    /// Produces the style of a horizontal scrollbar when mouse is over the scrollable area. -    fn hovered_horizontal(&self, style: &Self::Style) -> Scrollbar { -        self.active_horizontal(style) +        self.hovered(style, true)      }  } diff --git a/style/src/theme.rs b/style/src/theme.rs index 9a3105b5..0ebd82a4 100644 --- a/style/src/theme.rs +++ b/style/src/theme.rs @@ -906,42 +906,45 @@ impl scrollable::StyleSheet for Theme {          }      } -    fn hovered_scrollbar(&self, style: &Self::Style) -> scrollable::Scrollbar { +    fn hovered( +        &self, +        style: &Self::Style, +        is_mouse_over_scrollbar: bool, +    ) -> scrollable::Scrollbar {          match style {              Scrollable::Default => { -                let palette = self.extended_palette(); +                if is_mouse_over_scrollbar { +                    let palette = self.extended_palette(); -                scrollable::Scrollbar { -                    background: palette.background.weak.color.into(), -                    border_radius: 2.0, -                    border_width: 0.0, -                    border_color: Color::TRANSPARENT, -                    scroller: scrollable::Scroller { -                        color: palette.primary.strong.color, +                    scrollable::Scrollbar { +                        background: palette.background.weak.color.into(),                          border_radius: 2.0,                          border_width: 0.0,                          border_color: Color::TRANSPARENT, -                    }, +                        scroller: scrollable::Scroller { +                            color: palette.primary.strong.color, +                            border_radius: 2.0, +                            border_width: 0.0, +                            border_color: Color::TRANSPARENT, +                        }, +                    } +                } else { +                    self.active(style)                  }              } -            Scrollable::Custom(custom) => custom.hovered_scrollbar(self), +            Scrollable::Custom(custom) => { +                custom.hovered(self, is_mouse_over_scrollbar) +            }          }      }      fn dragging(&self, style: &Self::Style) -> scrollable::Scrollbar {          match style { -            Scrollable::Default => self.hovered_scrollbar(style), +            Scrollable::Default => self.hovered(style, true),              Scrollable::Custom(custom) => custom.dragging(self),          }      } -    fn hovered(&self, style: &Self::Style) -> scrollable::Scrollbar { -        match style { -            Scrollable::Default => self.active(style), -            Scrollable::Custom(custom) => custom.hovered(self), -        } -    } -      fn active_horizontal(&self, style: &Self::Style) -> scrollable::Scrollbar {          match style {              Scrollable::Default => self.active(style), @@ -949,30 +952,26 @@ impl scrollable::StyleSheet for Theme {          }      } -    fn hovered_scrollbar_horizontal(&self, style: &Self::Style) -> scrollable::Scrollbar { -        match style { -            Scrollable::Default => self.hovered_scrollbar(style), -            Scrollable::Custom(custom) => custom.hovered_scrollbar_horizontal(self), -        } -    } - -    fn dragging_horizontal( +    fn hovered_horizontal(          &self,          style: &Self::Style, +        is_mouse_over_scrollbar: bool,      ) -> scrollable::Scrollbar {          match style { -            Scrollable::Default => self.hovered_horizontal(style), -            Scrollable::Custom(custom) => custom.dragging_horizontal(self), +            Scrollable::Default => self.hovered(style, is_mouse_over_scrollbar), +            Scrollable::Custom(custom) => { +                custom.hovered_horizontal(self, is_mouse_over_scrollbar) +            }          }      } -    fn hovered_horizontal( +    fn dragging_horizontal(          &self,          style: &Self::Style,      ) -> scrollable::Scrollbar {          match style { -            Scrollable::Default => self.active_horizontal(style), -            Scrollable::Custom(custom) => custom.hovered_horizontal(self), +            Scrollable::Default => self.hovered_horizontal(style, true), +            Scrollable::Custom(custom) => custom.dragging_horizontal(self),          }      }  }  | 
