summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/tour.rs46
-rw-r--r--native/src/widget/scrollable.rs5
-rw-r--r--wgpu/src/renderer/scrollable.rs2
3 files changed, 45 insertions, 8 deletions
diff --git a/examples/tour.rs b/examples/tour.rs
index 59a8c525..7d8e4e3e 100644
--- a/examples/tour.rs
+++ b/examples/tour.rs
@@ -1,7 +1,7 @@
use iced::{
- button, slider, text::HorizontalAlignment, Align, Application, Background,
- Button, Checkbox, Color, Column, Element, Image, Justify, Length, Radio,
- Row, Slider, Text,
+ button, scrollable, slider, text::HorizontalAlignment, Align, Application,
+ Background, Button, Checkbox, Color, Column, Element, Image, Justify,
+ Length, Radio, Row, Scrollable, Slider, Text,
};
pub fn main() {
@@ -14,6 +14,7 @@ pub fn main() {
pub struct Tour {
steps: Steps,
+ scroll: scrollable::State,
back_button: button::State,
next_button: button::State,
debug: bool,
@@ -23,6 +24,7 @@ impl Tour {
pub fn new() -> Tour {
Tour {
steps: Steps::new(),
+ scroll: scrollable::State::new(),
back_button: button::State::new(),
next_button: button::State::new(),
debug: false,
@@ -88,11 +90,13 @@ impl Application for Tour {
};
Column::new()
- .width(Length::Fill)
.height(Length::Fill)
- .align_items(Align::Center)
.justify_content(Justify::Center)
- .push(element)
+ .push(
+ Scrollable::new(&mut self.scroll)
+ .align_items(Align::Center)
+ .push(element),
+ )
.into()
}
}
@@ -134,6 +138,7 @@ impl Steps {
width: 300,
slider: slider::State::new(),
},
+ Step::Scrollable,
Step::Debugger,
Step::End,
],
@@ -195,6 +200,7 @@ enum Step {
width: u16,
slider: slider::State,
},
+ Scrollable,
Debugger,
End,
}
@@ -265,6 +271,7 @@ impl<'a> Step {
Step::Text { .. } => true,
Step::Image { .. } => true,
Step::RowsAndColumns { .. } => true,
+ Step::Scrollable => true,
Step::Debugger => true,
Step::End => false,
}
@@ -289,6 +296,7 @@ impl<'a> Step {
} => {
Self::rows_and_columns(*layout, spacing_slider, *spacing).into()
}
+ Step::Scrollable => Self::scrollable().into(),
Step::Debugger => Self::debugger(debug).into(),
Step::End => Self::end().into(),
}
@@ -528,6 +536,32 @@ impl<'a> Step {
)
}
+ fn scrollable() -> Column<'a, StepMessage> {
+ Self::container("Scrollable")
+ .push(Text::new(
+ "Iced supports scrollable content. Try it out! Find the \
+ button further below.",
+ ))
+ .push(
+ Text::new(
+ "Tip: You can use the scrollbar to scroll down faster!",
+ )
+ .size(16),
+ )
+ .push(Column::new().height(Length::Units(4096)))
+ .push(
+ Text::new("You are halfway there!")
+ .size(30)
+ .horizontal_alignment(HorizontalAlignment::Center),
+ )
+ .push(Column::new().height(Length::Units(4096)))
+ .push(
+ Text::new("You made it!")
+ .size(50)
+ .horizontal_alignment(HorizontalAlignment::Center),
+ )
+ }
+
fn debugger(debug: bool) -> Column<'a, StepMessage> {
Self::container("Debugger")
.push(Text::new(
diff --git a/native/src/widget/scrollable.rs b/native/src/widget/scrollable.rs
index 8a82be4f..de4c749c 100644
--- a/native/src/widget/scrollable.rs
+++ b/native/src/widget/scrollable.rs
@@ -102,8 +102,11 @@ where
if let Some(scrollbar_grabbed_at) =
self.state.scrollbar_grabbed_at
{
+ let ratio = content_bounds.height / bounds.height;
+ let delta = scrollbar_grabbed_at.y - cursor_position.y;
+
self.state.scroll(
- scrollbar_grabbed_at.y - cursor_position.y,
+ delta * ratio,
bounds,
content_bounds,
);
diff --git a/wgpu/src/renderer/scrollable.rs b/wgpu/src/renderer/scrollable.rs
index f1d87857..72d77cc8 100644
--- a/wgpu/src/renderer/scrollable.rs
+++ b/wgpu/src/renderer/scrollable.rs
@@ -5,7 +5,7 @@ use iced_native::{
};
const SCROLLBAR_WIDTH: u16 = 10;
-const SCROLLBAR_MARGIN: u16 = 5;
+const SCROLLBAR_MARGIN: u16 = 2;
fn scrollbar_bounds(bounds: Rectangle) -> Rectangle {
Rectangle {