fix(toggler): animate external changes
This commit is contained in:
parent
3d8d8915be
commit
55d925473f
1 changed files with 14 additions and 1 deletions
|
|
@ -161,7 +161,10 @@ impl<'a, Message> Widget<Message, crate::Theme, crate::Renderer> for Toggler<'a,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn state(&self) -> tree::State {
|
fn state(&self) -> tree::State {
|
||||||
tree::State::new(State::default())
|
tree::State::new(State {
|
||||||
|
prev_toggled: self.is_toggled,
|
||||||
|
..State::default()
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn id(&self) -> Option<Id> {
|
fn id(&self) -> Option<Id> {
|
||||||
|
|
@ -238,6 +241,14 @@ impl<'a, Message> Widget<Message, crate::Theme, crate::Renderer> for Toggler<'a,
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
let state = tree.state.downcast_mut::<State>();
|
let state = tree.state.downcast_mut::<State>();
|
||||||
|
|
||||||
|
// animate external changes
|
||||||
|
if state.prev_toggled != self.is_toggled {
|
||||||
|
state.anim.changed(self.duration);
|
||||||
|
shell.request_redraw();
|
||||||
|
state.prev_toggled = self.is_toggled;
|
||||||
|
}
|
||||||
|
|
||||||
match event {
|
match event {
|
||||||
Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left))
|
Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left))
|
||||||
| Event::Touch(touch::Event::FingerPressed { .. }) => {
|
| Event::Touch(touch::Event::FingerPressed { .. }) => {
|
||||||
|
|
@ -246,6 +257,7 @@ impl<'a, Message> Widget<Message, crate::Theme, crate::Renderer> for Toggler<'a,
|
||||||
if mouse_over {
|
if mouse_over {
|
||||||
shell.publish((on_toggle)(!self.is_toggled));
|
shell.publish((on_toggle)(!self.is_toggled));
|
||||||
state.anim.changed(self.duration);
|
state.anim.changed(self.duration);
|
||||||
|
state.prev_toggled = !self.is_toggled;
|
||||||
shell.capture_event();
|
shell.capture_event();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -430,4 +442,5 @@ pub fn next_to_each_other(
|
||||||
pub struct State {
|
pub struct State {
|
||||||
text: widget::text::State<<crate::Renderer as iced_core::text::Renderer>::Paragraph>,
|
text: widget::text::State<<crate::Renderer as iced_core::text::Renderer>::Paragraph>,
|
||||||
anim: anim::State,
|
anim: anim::State,
|
||||||
|
prev_toggled: bool,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue