Merge pull request #1114 from tarkah/fix/slider-optimization

Don't rebroadcast redundant slider messages
This commit is contained in:
Héctor Ramón 2021-11-16 16:00:31 +07:00 committed by GitHub
commit d165b789df
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -193,12 +193,14 @@ where
_clipboard: &mut dyn Clipboard,
messages: &mut Vec<Message>,
) -> event::Status {
let is_dragging = self.state.is_dragging;
let mut change = || {
let bounds = layout.bounds();
if cursor_position.x <= bounds.x {
messages.push((self.on_change)(*self.range.start()));
let new_value = if cursor_position.x <= bounds.x {
*self.range.start()
} else if cursor_position.x >= bounds.x + bounds.width {
messages.push((self.on_change)(*self.range.end()));
*self.range.end()
} else {
let step = self.step.into();
let start = (*self.range.start()).into();
@ -211,8 +213,16 @@ where
let value = steps * step + start;
if let Some(value) = T::from_f64(value) {
messages.push((self.on_change)(value));
value
} else {
return;
}
};
if (self.value.into() - new_value.into()).abs() > f64::EPSILON {
messages.push((self.on_change)(new_value));
self.value = new_value;
}
};
@ -229,7 +239,7 @@ where
Event::Mouse(mouse::Event::ButtonReleased(mouse::Button::Left))
| Event::Touch(touch::Event::FingerLifted { .. })
| Event::Touch(touch::Event::FingerLost { .. }) => {
if self.state.is_dragging {
if is_dragging {
if let Some(on_release) = self.on_release.clone() {
messages.push(on_release);
}
@ -240,7 +250,7 @@ where
}
Event::Mouse(mouse::Event::CursorMoved { .. })
| Event::Touch(touch::Event::FingerMoved { .. }) => {
if self.state.is_dragging {
if is_dragging {
change();
return event::Status::Captured;