Skip to content

Commit

Permalink
Expose methods to change viewport alignment
Browse files Browse the repository at this point in the history
  • Loading branch information
tarkah committed Jul 12, 2023
1 parent 21bd514 commit 11287c8
Showing 1 changed file with 58 additions and 1 deletion.
59 changes: 58 additions & 1 deletion widget/src/scrollable.rs
Original file line number Diff line number Diff line change
Expand Up @@ -554,7 +554,14 @@ pub fn update<Message>(

state.scroll(delta, direction, bounds, content_bounds);

notify_on_scroll(state, on_scroll, bounds, content_bounds, shell);
notify_on_scroll(
state,
on_scroll,
bounds,
content_bounds,
direction,
shell,
);

return event::Status::Captured;
}
Expand Down Expand Up @@ -592,6 +599,7 @@ pub fn update<Message>(
on_scroll,
bounds,
content_bounds,
direction,
shell,
);
}
Expand Down Expand Up @@ -637,6 +645,7 @@ pub fn update<Message>(
on_scroll,
bounds,
content_bounds,
direction,
shell,
);

Expand Down Expand Up @@ -672,6 +681,7 @@ pub fn update<Message>(
on_scroll,
bounds,
content_bounds,
direction,
shell,
);
}
Expand Down Expand Up @@ -712,6 +722,7 @@ pub fn update<Message>(
on_scroll,
bounds,
content_bounds,
direction,
shell,
);
}
Expand Down Expand Up @@ -747,6 +758,7 @@ pub fn update<Message>(
on_scroll,
bounds,
content_bounds,
direction,
shell,
);

Expand Down Expand Up @@ -962,6 +974,7 @@ fn notify_on_scroll<Message>(
on_scroll: &Option<Box<dyn Fn(Viewport) -> Message + '_>>,
bounds: Rectangle,
content_bounds: Rectangle,
direction: Direction,
shell: &mut Shell<'_, Message>,
) {
if let Some(on_scroll) = on_scroll {
Expand All @@ -971,11 +984,23 @@ fn notify_on_scroll<Message>(
return;
}

let horizontal_alignment = direction
.horizontal()
.map(|p| p.alignment)
.unwrap_or_default();

let vertical_alignment = direction
.vertical()
.map(|p| p.alignment)
.unwrap_or_default();

let viewport = Viewport {
offset_x: state.offset_x,
offset_y: state.offset_y,
bounds,
content_bounds,
vertical_alignment,
horizontal_alignment,
};

// Don't publish redundant viewports to shell
Expand Down Expand Up @@ -1080,6 +1105,8 @@ pub struct Viewport {
offset_y: Offset,
bounds: Rectangle,
content_bounds: Rectangle,
vertical_alignment: Alignment,
horizontal_alignment: Alignment,
}

impl Viewport {
Expand All @@ -1104,6 +1131,36 @@ impl Viewport {

RelativeOffset { x, y }
}

/// Returns a new [`Viewport`] with the supplied vertical [`Alignment`].
pub fn with_vertical_alignment(self, alignment: Alignment) -> Self {
if self.vertical_alignment != alignment {
let relative = 1.0 - self.relative_offset().y;

Self {
offset_y: Offset::Relative(relative),
vertical_alignment: alignment,
..self
}
} else {
self
}
}

/// Returns a new [`Viewport`] with the supplied horizontal [`Alignment`].
pub fn with_horizontal_alignment(self, alignment: Alignment) -> Self {
if self.horizontal_alignment != alignment {
let relative = 1.0 - self.relative_offset().x;

Self {
offset_x: Offset::Relative(relative),
horizontal_alignment: alignment,
..self
}
} else {
self
}
}
}

impl State {
Expand Down

0 comments on commit 11287c8

Please sign in to comment.