|
|
|
@ -350,7 +350,6 @@ impl Component for Button {
|
|
|
|
|
if let Some(duration) = self.long_press {
|
|
|
|
|
self.long_timer = Some(ctx.request_timer(duration));
|
|
|
|
|
}
|
|
|
|
|
ctx.disable_swipe();
|
|
|
|
|
return Some(ButtonMsg::Pressed);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -361,7 +360,6 @@ impl Component for Button {
|
|
|
|
|
State::Pressed if !touch_area.contains(pos) => {
|
|
|
|
|
// Touch is leaving our area, transform to `Released` state.
|
|
|
|
|
self.set(ctx, State::Released);
|
|
|
|
|
ctx.enable_swipe();
|
|
|
|
|
return Some(ButtonMsg::Released);
|
|
|
|
|
}
|
|
|
|
|
_ => {
|
|
|
|
@ -377,17 +375,40 @@ impl Component for Button {
|
|
|
|
|
State::Pressed if touch_area.contains(pos) => {
|
|
|
|
|
// Touch finished in our area, we got clicked.
|
|
|
|
|
self.set(ctx, State::Initial);
|
|
|
|
|
ctx.enable_swipe();
|
|
|
|
|
return Some(ButtonMsg::Clicked);
|
|
|
|
|
}
|
|
|
|
|
State::Pressed => {
|
|
|
|
|
// Touch finished outside our area.
|
|
|
|
|
self.set(ctx, State::Initial);
|
|
|
|
|
self.long_timer = None;
|
|
|
|
|
return Some(ButtonMsg::Released);
|
|
|
|
|
}
|
|
|
|
|
_ => {
|
|
|
|
|
// Touch finished outside our area.
|
|
|
|
|
self.set(ctx, State::Initial);
|
|
|
|
|
ctx.enable_swipe();
|
|
|
|
|
self.long_timer = None;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Event::Touch(TouchEvent::TouchAbort) => {
|
|
|
|
|
match self.state {
|
|
|
|
|
State::Initial | State::Disabled => {
|
|
|
|
|
// Do nothing.
|
|
|
|
|
}
|
|
|
|
|
State::Pressed => {
|
|
|
|
|
// Touch aborted
|
|
|
|
|
self.set(ctx, State::Initial);
|
|
|
|
|
self.long_timer = None;
|
|
|
|
|
return Some(ButtonMsg::Released);
|
|
|
|
|
}
|
|
|
|
|
_ => {
|
|
|
|
|
// Irrelevant touch abort
|
|
|
|
|
self.set(ctx, State::Initial);
|
|
|
|
|
self.long_timer = None;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Event::Timer(token) => {
|
|
|
|
|
if self.long_timer == Some(token) {
|
|
|
|
|
self.long_timer = None;
|
|
|
|
|