summaryrefslogtreecommitdiffstats
path: root/style
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón <hector0193@gmail.com>2023-01-09 19:23:35 +0100
committerLibravatar GitHub <noreply@github.com>2023-01-09 19:23:35 +0100
commit7ccd87c36b54e0d53f65f5774f140a0528ae4504 (patch)
treebf12f165d43c785adfd4ac906b8f4035035c5d42 /style
parent07d755c6a270bd46fe9752ed57b3ceaddda1f081 (diff)
parent2d007474dd002dfc936f75f7379f1bbae72c5ad4 (diff)
downloadiced-7ccd87c36b54e0d53f65f5774f140a0528ae4504.tar.gz
iced-7ccd87c36b54e0d53f65f5774f140a0528ae4504.tar.bz2
iced-7ccd87c36b54e0d53f65f5774f140a0528ae4504.zip
Merge pull request #1550 from bungoboingo/feat/multidirectional-scrolling
[Feature] Multidirectional scrolling
Diffstat (limited to 'style')
-rw-r--r--style/src/scrollable.rs17
-rw-r--r--style/src/theme.rs33
2 files changed, 49 insertions, 1 deletions
diff --git a/style/src/scrollable.rs b/style/src/scrollable.rs
index c6d7d537..64ed8462 100644
--- a/style/src/scrollable.rs
+++ b/style/src/scrollable.rs
@@ -37,11 +37,26 @@ pub trait StyleSheet {
/// Produces the style of an active scrollbar.
fn active(&self, style: &Self::Style) -> Scrollbar;
- /// Produces the style of an hovered scrollbar.
+ /// Produces the style of a hovered scrollbar.
fn hovered(&self, style: &Self::Style) -> Scrollbar;
/// Produces the style of a scrollbar that is being dragged.
fn dragging(&self, style: &Self::Style) -> Scrollbar {
self.hovered(style)
}
+
+ /// Produces the style of an active horizontal scrollbar.
+ fn active_horizontal(&self, style: &Self::Style) -> Scrollbar {
+ self.active(style)
+ }
+
+ /// Produces the style of a hovered horizontal scrollbar.
+ fn hovered_horizontal(&self, style: &Self::Style) -> Scrollbar {
+ self.hovered(style)
+ }
+
+ /// Produces the style of a horizontal scrollbar that is being dragged.
+ fn dragging_horizontal(&self, style: &Self::Style) -> Scrollbar {
+ self.hovered_horizontal(style)
+ }
}
diff --git a/style/src/theme.rs b/style/src/theme.rs
index a766b279..55bfa4ca 100644
--- a/style/src/theme.rs
+++ b/style/src/theme.rs
@@ -872,6 +872,15 @@ pub enum Scrollable {
Custom(Box<dyn scrollable::StyleSheet<Style = Theme>>),
}
+impl Scrollable {
+ /// Creates a custom [`Scrollable`] theme.
+ pub fn custom<T: scrollable::StyleSheet<Style = Theme> + 'static>(
+ style: T,
+ ) -> Self {
+ Self::Custom(Box::new(style))
+ }
+}
+
impl scrollable::StyleSheet for Theme {
type Style = Scrollable;
@@ -925,6 +934,30 @@ impl scrollable::StyleSheet for Theme {
Scrollable::Custom(custom) => custom.dragging(self),
}
}
+
+ fn active_horizontal(&self, style: &Self::Style) -> scrollable::Scrollbar {
+ match style {
+ Scrollable::Default => self.active(style),
+ Scrollable::Custom(custom) => custom.active_horizontal(self),
+ }
+ }
+
+ fn hovered_horizontal(&self, style: &Self::Style) -> scrollable::Scrollbar {
+ match style {
+ Scrollable::Default => self.hovered(style),
+ Scrollable::Custom(custom) => custom.hovered_horizontal(self),
+ }
+ }
+
+ fn dragging_horizontal(
+ &self,
+ style: &Self::Style,
+ ) -> scrollable::Scrollbar {
+ match style {
+ Scrollable::Default => self.hovered_horizontal(style),
+ Scrollable::Custom(custom) => custom.dragging_horizontal(self),
+ }
+ }
}
/// The style of text.