Merge pull request #1114 from tarkah/fix/slider-optimization
Don't rebroadcast redundant slider messages
This commit is contained in:
commit
d165b789df
1 changed files with 16 additions and 6 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue