mirror of
https://github.com/eliasstepanik/egui_node_graph.git
synced 2026-01-11 13:58:28 +00:00
Implement fix suggestions (interact area on resize)
This commit is contained in:
parent
790d9ef5f9
commit
4cfe393412
@ -455,6 +455,9 @@ fn draw_connection(painter: &Painter, src_pos: Pos2, dst_pos: Pos2, color: Color
|
|||||||
painter.add(bezier);
|
painter.add(bezier);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Copy, Debug)]
|
||||||
|
struct OuterRectMemory(Rect);
|
||||||
|
|
||||||
impl<'a, NodeData, DataType, ValueType, UserResponse, UserState>
|
impl<'a, NodeData, DataType, ValueType, UserResponse, UserState>
|
||||||
GraphNodeWidget<'a, NodeData, DataType, ValueType>
|
GraphNodeWidget<'a, NodeData, DataType, ValueType>
|
||||||
where
|
where
|
||||||
@ -513,15 +516,6 @@ where
|
|||||||
|
|
||||||
let outer_rect_bounds = ui.available_rect_before_wrap();
|
let outer_rect_bounds = ui.available_rect_before_wrap();
|
||||||
|
|
||||||
// Hack?: Call this before the content of the node
|
|
||||||
// to ensure interaction works after egui 0.19. Otherwise the layers block
|
|
||||||
// hover interaction
|
|
||||||
let window_response = ui.interact(
|
|
||||||
outer_rect_bounds,
|
|
||||||
Id::new((self.node_id, "window")),
|
|
||||||
Sense::click_and_drag(),
|
|
||||||
);
|
|
||||||
|
|
||||||
let mut inner_rect = outer_rect_bounds.shrink2(margin);
|
let mut inner_rect = outer_rect_bounds.shrink2(margin);
|
||||||
|
|
||||||
// Make sure we don't shrink to the negative:
|
// Make sure we don't shrink to the negative:
|
||||||
@ -529,6 +523,24 @@ where
|
|||||||
inner_rect.max.y = inner_rect.max.y.max(inner_rect.min.y);
|
inner_rect.max.y = inner_rect.max.y.max(inner_rect.min.y);
|
||||||
|
|
||||||
let mut child_ui = ui.child_ui(inner_rect, *ui.layout());
|
let mut child_ui = ui.child_ui(inner_rect, *ui.layout());
|
||||||
|
|
||||||
|
// Get interaction rect from memory, it may expand after the window response on resize.
|
||||||
|
let interaction_rect = ui
|
||||||
|
.ctx()
|
||||||
|
.memory_mut(|mem| {
|
||||||
|
mem.data
|
||||||
|
.get_temp::<OuterRectMemory>(child_ui.id())
|
||||||
|
.map(|stored| stored.0)
|
||||||
|
})
|
||||||
|
.unwrap_or(outer_rect_bounds);
|
||||||
|
// After 0.20, layers added over others can block hover interaction. Call this first
|
||||||
|
// before creating the node content.
|
||||||
|
let window_response = ui.interact(
|
||||||
|
interaction_rect,
|
||||||
|
Id::new((self.node_id, "window")),
|
||||||
|
Sense::click_and_drag(),
|
||||||
|
);
|
||||||
|
|
||||||
let mut title_height = 0.0;
|
let mut title_height = 0.0;
|
||||||
|
|
||||||
let mut input_port_heights = vec![];
|
let mut input_port_heights = vec![];
|
||||||
@ -600,6 +612,12 @@ where
|
|||||||
let port_left = outer_rect.left();
|
let port_left = outer_rect.left();
|
||||||
let port_right = outer_rect.right();
|
let port_right = outer_rect.right();
|
||||||
|
|
||||||
|
// Save expanded rect to memory.
|
||||||
|
ui.ctx().memory_mut(|mem| {
|
||||||
|
mem.data
|
||||||
|
.insert_temp(child_ui.id(), OuterRectMemory(outer_rect))
|
||||||
|
});
|
||||||
|
|
||||||
#[allow(clippy::too_many_arguments)]
|
#[allow(clippy::too_many_arguments)]
|
||||||
fn draw_port<NodeData, DataType, ValueType, UserResponse, UserState>(
|
fn draw_port<NodeData, DataType, ValueType, UserResponse, UserState>(
|
||||||
ui: &mut Ui,
|
ui: &mut Ui,
|
||||||
|
|||||||
@ -65,7 +65,7 @@ where
|
|||||||
|
|
||||||
let mut query_submit = resp.lost_focus() && ui.input(|i| i.key_pressed(Key::Enter));
|
let mut query_submit = resp.lost_focus() && ui.input(|i| i.key_pressed(Key::Enter));
|
||||||
|
|
||||||
let max_height = ui.input(|i| i.screen_rect.height());
|
let max_height = ui.input(|i| i.screen_rect.height() * 0.5);
|
||||||
let scroll_area_width = resp.rect.width() - 30.0;
|
let scroll_area_width = resp.rect.width() - 30.0;
|
||||||
|
|
||||||
Frame::default()
|
Frame::default()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user