summaryrefslogtreecommitdiffstats
path: root/native/src
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-01-06 21:01:09 +0100
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-01-06 21:01:09 +0100
commitd0dc7cebf9c352f4d14827fe47489788f59e61a1 (patch)
tree17699c2225001ecf23e6730b3a3d3cbcca92ca10 /native/src
parentf7dfd6537429f94af63d75617c27bc998d72d9c8 (diff)
downloadiced-d0dc7cebf9c352f4d14827fe47489788f59e61a1.tar.gz
iced-d0dc7cebf9c352f4d14827fe47489788f59e61a1.tar.bz2
iced-d0dc7cebf9c352f4d14827fe47489788f59e61a1.zip
Implement styling for `Scrollable`
Diffstat (limited to 'native/src')
-rw-r--r--native/src/renderer/null.rs3
-rw-r--r--native/src/widget/scrollable.rs24
2 files changed, 22 insertions, 5 deletions
diff --git a/native/src/renderer/null.rs b/native/src/renderer/null.rs
index 96aa132c..0184ac00 100644
--- a/native/src/renderer/null.rs
+++ b/native/src/renderer/null.rs
@@ -73,6 +73,8 @@ impl text::Renderer for Null {
}
impl scrollable::Renderer for Null {
+ type Style = ();
+
fn scrollbar(
&self,
_bounds: Rectangle,
@@ -91,6 +93,7 @@ impl scrollable::Renderer for Null {
_is_mouse_over_scrollbar: bool,
_scrollbar: Option<scrollable::Scrollbar>,
_offset: u32,
+ _style: &Self::Style,
_content: Self::Output,
) {
}
diff --git a/native/src/widget/scrollable.rs b/native/src/widget/scrollable.rs
index 9df09b14..a062abd0 100644
--- a/native/src/widget/scrollable.rs
+++ b/native/src/widget/scrollable.rs
@@ -11,14 +11,15 @@ use std::{f32, hash::Hash, u32};
/// A widget that can vertically display an infinite amount of content with a
/// scrollbar.
#[allow(missing_debug_implementations)]
-pub struct Scrollable<'a, Message, Renderer> {
+pub struct Scrollable<'a, Message, Renderer: self::Renderer> {
state: &'a mut State,
height: Length,
max_height: u32,
content: Column<'a, Message, Renderer>,
+ style: Renderer::Style,
}
-impl<'a, Message, Renderer> Scrollable<'a, Message, Renderer> {
+impl<'a, Message, Renderer: self::Renderer> Scrollable<'a, Message, Renderer> {
/// Creates a new [`Scrollable`] with the given [`State`].
///
/// [`Scrollable`]: struct.Scrollable.html
@@ -29,6 +30,7 @@ impl<'a, Message, Renderer> Scrollable<'a, Message, Renderer> {
height: Length::Shrink,
max_height: u32::MAX,
content: Column::new(),
+ style: Renderer::Style::default(),
}
}
@@ -90,6 +92,14 @@ impl<'a, Message, Renderer> Scrollable<'a, Message, Renderer> {
self
}
+ /// Sets the style of the [`Scrollable`] .
+ ///
+ /// [`Scrollable`]: struct.Scrollable.html
+ pub fn style(mut self, style: impl Into<Renderer::Style>) -> Self {
+ self.style = style.into();
+ self
+ }
+
/// Adds an element to the [`Scrollable`].
///
/// [`Scrollable`]: struct.Scrollable.html
@@ -105,7 +115,7 @@ impl<'a, Message, Renderer> Scrollable<'a, Message, Renderer> {
impl<'a, Message, Renderer> Widget<Message, Renderer>
for Scrollable<'a, Message, Renderer>
where
- Renderer: self::Renderer + column::Renderer,
+ Renderer: 'static + self::Renderer + column::Renderer,
{
fn width(&self) -> Length {
Length::Fill
@@ -295,12 +305,13 @@ where
is_mouse_over_scrollbar,
scrollbar,
offset,
+ &self.style,
content,
)
}
fn hash_layout(&self, state: &mut Hasher) {
- std::any::TypeId::of::<Scrollable<'static, (), ()>>().hash(state);
+ std::any::TypeId::of::<Scrollable<'static, (), Renderer>>().hash(state);
self.height.hash(state);
self.max_height.hash(state);
@@ -447,6 +458,8 @@ pub struct Scroller {
/// [`Scrollable`]: struct.Scrollable.html
/// [renderer]: ../../renderer/index.html
pub trait Renderer: crate::Renderer + Sized {
+ type Style: Default;
+
/// Returns the [`Scrollbar`] given the bounds and content bounds of a
/// [`Scrollable`].
///
@@ -483,6 +496,7 @@ pub trait Renderer: crate::Renderer + Sized {
is_mouse_over_scrollbar: bool,
scrollbar: Option<Scrollbar>,
offset: u32,
+ style: &Self::Style,
content: Self::Output,
) -> Self::Output;
}
@@ -490,7 +504,7 @@ pub trait Renderer: crate::Renderer + Sized {
impl<'a, Message, Renderer> From<Scrollable<'a, Message, Renderer>>
for Element<'a, Message, Renderer>
where
- Renderer: 'a + self::Renderer + column::Renderer,
+ Renderer: 'static + self::Renderer + column::Renderer,
Message: 'static,
{
fn from(