fix(dnd_source): rely on current cursor position for hover state
This commit is contained in:
parent
79f8337634
commit
3d2c018cd1
2 changed files with 22 additions and 31 deletions
2
iced
2
iced
|
|
@ -1 +1 @@
|
|||
Subproject commit 02149769ec61d485ddc0bf4f07e98f0ec700420f
|
||||
Subproject commit ac24bbe80dd16ea586b8a0b5816066e3ba1b48fa
|
||||
|
|
@ -240,7 +240,7 @@ impl<Message: Clone + 'static, D: iced::clipboard::mime::AsMimeTypes + std::mark
|
|||
Event::Mouse(mouse_event) => match mouse_event {
|
||||
mouse::Event::ButtonPressed(mouse::Button::Left) => {
|
||||
if let Some(position) = cursor.position() {
|
||||
if !state.hovered {
|
||||
if !cursor.is_over(layout.bounds()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -256,16 +256,16 @@ impl<Message: Clone + 'static, D: iced::clipboard::mime::AsMimeTypes + std::mark
|
|||
}
|
||||
mouse::Event::CursorMoved { .. } => {
|
||||
if let Some(position) = cursor.position() {
|
||||
if state.hovered {
|
||||
// We ignore motion if we do not possess drag content by now.
|
||||
if self.drag_content.is_none() {
|
||||
state.left_pressed_position = None;
|
||||
return;
|
||||
}
|
||||
if let Some(left_pressed_position) = state.left_pressed_position {
|
||||
if position.distance(left_pressed_position) > self.drag_threshold {
|
||||
if let Some(left_pressed_position) = state.left_pressed_position
|
||||
&& position.distance(left_pressed_position) > self.drag_threshold
|
||||
{
|
||||
if let Some(on_start) = self.on_start.as_ref() {
|
||||
shell.publish(on_start.clone())
|
||||
shell.publish(on_start.clone());
|
||||
}
|
||||
let offset = Vector::new(
|
||||
left_pressed_position.x - layout.bounds().x,
|
||||
|
|
@ -275,15 +275,9 @@ impl<Message: Clone + 'static, D: iced::clipboard::mime::AsMimeTypes + std::mark
|
|||
state.is_dragging = true;
|
||||
state.left_pressed_position = None;
|
||||
}
|
||||
}
|
||||
if !cursor.is_over(layout.bounds()) {
|
||||
state.hovered = false;
|
||||
|
||||
return;
|
||||
}
|
||||
} else if cursor.is_over(layout.bounds()) {
|
||||
state.hovered = true;
|
||||
}
|
||||
shell.capture_event();
|
||||
}
|
||||
}
|
||||
|
|
@ -296,7 +290,6 @@ impl<Message: Clone + 'static, D: iced::clipboard::mime::AsMimeTypes + std::mark
|
|||
}
|
||||
state.is_dragging = false;
|
||||
shell.capture_event();
|
||||
return;
|
||||
}
|
||||
}
|
||||
Event::Dnd(DndEvent::Source(SourceEvent::Finished)) => {
|
||||
|
|
@ -306,7 +299,6 @@ impl<Message: Clone + 'static, D: iced::clipboard::mime::AsMimeTypes + std::mark
|
|||
}
|
||||
state.is_dragging = false;
|
||||
shell.capture_event();
|
||||
return;
|
||||
}
|
||||
}
|
||||
_ => (),
|
||||
|
|
@ -422,7 +414,6 @@ impl<
|
|||
/// Local state of the [`MouseListener`].
|
||||
#[derive(Debug, Default)]
|
||||
struct State {
|
||||
hovered: bool,
|
||||
left_pressed_position: Option<Point>,
|
||||
is_dragging: bool,
|
||||
cached_bounds: Rectangle,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue