Bug fix: you can now use text edits again
This commit is contained in:
parent
a8320881ba
commit
33d2f16041
1 changed files with 47 additions and 45 deletions
|
@ -206,10 +206,6 @@ impl CtxRef {
|
||||||
self.memory().interested_in_kb_focus(id);
|
self.memory().interested_in_kb_focus(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
if response.has_kb_focus() && response.clicked_elsewhere() {
|
|
||||||
self.memory().surrender_kb_focus(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
if sense.click
|
if sense.click
|
||||||
&& response.has_kb_focus()
|
&& response.has_kb_focus()
|
||||||
&& (self.input().key_pressed(Key::Space) || self.input().key_pressed(Key::Enter))
|
&& (self.input().key_pressed(Key::Space) || self.input().key_pressed(Key::Enter))
|
||||||
|
@ -220,54 +216,56 @@ impl CtxRef {
|
||||||
|
|
||||||
self.register_interaction_id(id, rect.min);
|
self.register_interaction_id(id, rect.min);
|
||||||
|
|
||||||
let mut memory = self.memory();
|
if sense.click || sense.drag {
|
||||||
|
let mut memory = self.memory();
|
||||||
|
|
||||||
memory.interaction.click_interest |= hovered && sense.click;
|
memory.interaction.click_interest |= hovered && sense.click;
|
||||||
memory.interaction.drag_interest |= hovered && sense.drag;
|
memory.interaction.drag_interest |= hovered && sense.drag;
|
||||||
|
|
||||||
response.dragged = memory.interaction.drag_id == Some(id);
|
response.dragged = memory.interaction.drag_id == Some(id);
|
||||||
response.is_pointer_button_down_on =
|
response.is_pointer_button_down_on =
|
||||||
memory.interaction.click_id == Some(id) || response.dragged;
|
memory.interaction.click_id == Some(id) || response.dragged;
|
||||||
|
|
||||||
for pointer_event in &self.input.pointer.pointer_events {
|
for pointer_event in &self.input.pointer.pointer_events {
|
||||||
match pointer_event {
|
match pointer_event {
|
||||||
PointerEvent::Moved(_) => {}
|
PointerEvent::Moved(_) => {}
|
||||||
PointerEvent::Pressed(_) => {
|
PointerEvent::Pressed(_) => {
|
||||||
if hovered {
|
if hovered {
|
||||||
if sense.click && memory.interaction.click_id.is_none() {
|
if sense.click && memory.interaction.click_id.is_none() {
|
||||||
// potential start of a click
|
// potential start of a click
|
||||||
memory.interaction.click_id = Some(id);
|
memory.interaction.click_id = Some(id);
|
||||||
response.is_pointer_button_down_on = true;
|
response.is_pointer_button_down_on = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// HACK: windows have low priority on dragging.
|
// HACK: windows have low priority on dragging.
|
||||||
// This is so that if you drag a slider in a window,
|
// This is so that if you drag a slider in a window,
|
||||||
// the slider will steal the drag away from the window.
|
// the slider will steal the drag away from the window.
|
||||||
// This is needed because we do window interaction first (to prevent frame delay),
|
// This is needed because we do window interaction first (to prevent frame delay),
|
||||||
// and then do content layout.
|
// and then do content layout.
|
||||||
if sense.drag
|
if sense.drag
|
||||||
&& (memory.interaction.drag_id.is_none()
|
&& (memory.interaction.drag_id.is_none()
|
||||||
|| memory.interaction.drag_is_window)
|
|| memory.interaction.drag_is_window)
|
||||||
{
|
{
|
||||||
// potential start of a drag
|
// potential start of a drag
|
||||||
memory.interaction.drag_id = Some(id);
|
memory.interaction.drag_id = Some(id);
|
||||||
memory.interaction.drag_is_window = false;
|
memory.interaction.drag_is_window = false;
|
||||||
memory.window_interaction = None; // HACK: stop moving windows (if any)
|
memory.window_interaction = None; // HACK: stop moving windows (if any)
|
||||||
response.is_pointer_button_down_on = true;
|
response.is_pointer_button_down_on = true;
|
||||||
response.dragged = true;
|
response.dragged = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
PointerEvent::Released(click) => {
|
||||||
PointerEvent::Released(click) => {
|
response.drag_released = response.dragged;
|
||||||
response.drag_released = response.dragged;
|
response.dragged = false;
|
||||||
response.dragged = false;
|
|
||||||
|
|
||||||
if hovered && response.is_pointer_button_down_on {
|
if hovered && response.is_pointer_button_down_on {
|
||||||
if let Some(click) = click {
|
if let Some(click) = click {
|
||||||
let clicked = hovered && response.is_pointer_button_down_on;
|
let clicked = hovered && response.is_pointer_button_down_on;
|
||||||
response.clicked[click.button as usize] = clicked;
|
response.clicked[click.button as usize] = clicked;
|
||||||
response.double_clicked[click.button as usize] =
|
response.double_clicked[click.button as usize] =
|
||||||
clicked && click.is_double();
|
clicked && click.is_double();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -282,6 +280,10 @@ impl CtxRef {
|
||||||
response.hovered &= response.is_pointer_button_down_on; // we don't hover widgets while interacting with *other* widgets
|
response.hovered &= response.is_pointer_button_down_on; // we don't hover widgets while interacting with *other* widgets
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if response.has_kb_focus() && response.clicked_elsewhere() {
|
||||||
|
self.memory().surrender_kb_focus(id);
|
||||||
|
}
|
||||||
|
|
||||||
response
|
response
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue