Allow disabling animations on a ScrollArea (#4309)
<!-- Please read the "Making a PR" section of [`CONTRIBUTING.md`](https://github.com/emilk/egui/blob/master/CONTRIBUTING.md) before opening a Pull Request! * Keep your PR:s small and focused. * The PR title is what ends up in the changelog, so make it descriptive! * If applicable, add a screenshot or gif. * If it is a non-trivial addition, consider adding a demo for it to `egui_demo_lib`, or a new example. * Do NOT open PR:s from your `master` branch, as that makes it hard for maintainers to add commits to your PR. * Remember to run `cargo fmt` and `cargo cranky`. * Open the PR as a draft until you have self-reviewed it and run `./scripts/check.sh`. * When you have addressed a PR comment, mark it as resolved. Please be patient! I will review your PR, but my time is limited! --> Adds a flag to ScrollArea that disables animations for the scroll_to_* functions
This commit is contained in:
parent
36ebce163a
commit
de9e0adf17
|
|
@ -176,6 +176,9 @@ pub struct ScrollArea {
|
||||||
/// end position until user manually changes position. It will become true
|
/// end position until user manually changes position. It will become true
|
||||||
/// again once scroll handle makes contact with end.
|
/// again once scroll handle makes contact with end.
|
||||||
stick_to_end: Vec2b,
|
stick_to_end: Vec2b,
|
||||||
|
|
||||||
|
/// If false, `scroll_to_*` functions will not be animated
|
||||||
|
animated: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ScrollArea {
|
impl ScrollArea {
|
||||||
|
|
@ -219,6 +222,7 @@ impl ScrollArea {
|
||||||
scrolling_enabled: true,
|
scrolling_enabled: true,
|
||||||
drag_to_scroll: true,
|
drag_to_scroll: true,
|
||||||
stick_to_end: Vec2b::FALSE,
|
stick_to_end: Vec2b::FALSE,
|
||||||
|
animated: true,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -393,6 +397,15 @@ impl ScrollArea {
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Should the scroll area animate `scroll_to_*` functions?
|
||||||
|
///
|
||||||
|
/// Default: `true`.
|
||||||
|
#[inline]
|
||||||
|
pub fn animated(mut self, animated: bool) -> Self {
|
||||||
|
self.animated = animated;
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
/// Is any scrolling enabled?
|
/// Is any scrolling enabled?
|
||||||
pub(crate) fn is_any_scroll_enabled(&self) -> bool {
|
pub(crate) fn is_any_scroll_enabled(&self) -> bool {
|
||||||
self.scroll_enabled[0] || self.scroll_enabled[1]
|
self.scroll_enabled[0] || self.scroll_enabled[1]
|
||||||
|
|
@ -459,6 +472,7 @@ struct Prepared {
|
||||||
|
|
||||||
scrolling_enabled: bool,
|
scrolling_enabled: bool,
|
||||||
stick_to_end: Vec2b,
|
stick_to_end: Vec2b,
|
||||||
|
animated: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ScrollArea {
|
impl ScrollArea {
|
||||||
|
|
@ -475,6 +489,7 @@ impl ScrollArea {
|
||||||
scrolling_enabled,
|
scrolling_enabled,
|
||||||
drag_to_scroll,
|
drag_to_scroll,
|
||||||
stick_to_end,
|
stick_to_end,
|
||||||
|
animated,
|
||||||
} = self;
|
} = self;
|
||||||
|
|
||||||
let ctx = ui.ctx().clone();
|
let ctx = ui.ctx().clone();
|
||||||
|
|
@ -650,6 +665,7 @@ impl ScrollArea {
|
||||||
viewport,
|
viewport,
|
||||||
scrolling_enabled,
|
scrolling_enabled,
|
||||||
stick_to_end,
|
stick_to_end,
|
||||||
|
animated,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -761,6 +777,7 @@ impl Prepared {
|
||||||
viewport: _,
|
viewport: _,
|
||||||
scrolling_enabled,
|
scrolling_enabled,
|
||||||
stick_to_end,
|
stick_to_end,
|
||||||
|
animated,
|
||||||
} = self;
|
} = self;
|
||||||
|
|
||||||
let content_size = content_ui.min_size();
|
let content_size = content_ui.min_size();
|
||||||
|
|
@ -804,7 +821,9 @@ impl Prepared {
|
||||||
if delta != 0.0 {
|
if delta != 0.0 {
|
||||||
let target_offset = state.offset[d] + delta;
|
let target_offset = state.offset[d] + delta;
|
||||||
|
|
||||||
if let Some(animation) = &mut state.offset_target[d] {
|
if !animated {
|
||||||
|
state.offset[d] = target_offset;
|
||||||
|
} else if let Some(animation) = &mut state.offset_target[d] {
|
||||||
// For instance: the user is continuously calling `ui.scroll_to_cursor`,
|
// For instance: the user is continuously calling `ui.scroll_to_cursor`,
|
||||||
// so we don't want to reset the animation, but perhaps update the target:
|
// so we don't want to reset the animation, but perhaps update the target:
|
||||||
animation.target_offset = target_offset;
|
animation.target_offset = target_offset;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue