diff --git a/egui_node_graph/Cargo.toml b/egui_node_graph/Cargo.toml index e204600..2f9e94d 100644 --- a/egui_node_graph/Cargo.toml +++ b/egui_node_graph/Cargo.toml @@ -15,7 +15,7 @@ workspace = ".." persistence = ["serde", "slotmap/serde", "smallvec/serde", "egui/persistence"] [dependencies] -egui = { version = "0.17" } +egui = { version = "0.18" } slotmap = { version = "1.0" } smallvec = { version = "1.7.0" } serde = { version = "1.0", optional = true, features = ["derive"] } diff --git a/egui_node_graph/src/editor_ui.rs b/egui_node_graph/src/editor_ui.rs index 449159a..3ea4005 100644 --- a/egui_node_graph/src/editor_ui.rs +++ b/egui_node_graph/src/editor_ui.rs @@ -63,8 +63,7 @@ where ctx: &Context, all_kinds: impl NodeTemplateIter, ) -> GraphResponse { - let mouse = &ctx.input().pointer; - let cursor_pos = mouse.hover_pos().unwrap_or(Pos2::ZERO); + let cursor_pos = ctx.input().pointer.hover_pos().unwrap_or(Pos2::ZERO); // Gets filled with the port locations as nodes are drawn let mut port_locations = PortLocations::new(); @@ -224,6 +223,9 @@ where /* Mouse input handling */ + // This locks the context, so don't hold on to it for too long. + let mouse = &ctx.input().pointer; + if mouse.any_released() && self.connection_in_progress.is_some() { self.connection_in_progress = None; } diff --git a/egui_node_graph/src/node_finder.rs b/egui_node_graph/src/node_finder.rs index 36f925a..5213c57 100644 --- a/egui_node_graph/src/node_finder.rs +++ b/egui_node_graph/src/node_finder.rs @@ -41,7 +41,7 @@ where let frame = Frame::dark_canvas(ui.style()) .fill(background_color) - .margin(vec2(5.0, 5.0)); + .inner_margin(vec2(5.0, 5.0)); // The archetype that will be returned. let mut submitted_archetype = None; @@ -55,19 +55,21 @@ where let mut query_submit = resp.lost_focus() && ui.input().key_down(Key::Enter); - Frame::default().margin(vec2(10.0, 10.0)).show(ui, |ui| { - for kind in all_kinds.all_kinds() { - let kind_name = kind.node_finder_label().to_string(); - if kind_name.contains(self.query.as_str()) { - if ui.selectable_label(false, kind_name).clicked() { - submitted_archetype = Some(kind); - } else if query_submit { - submitted_archetype = Some(kind); - query_submit = false; + Frame::default() + .inner_margin(vec2(10.0, 10.0)) + .show(ui, |ui| { + for kind in all_kinds.all_kinds() { + let kind_name = kind.node_finder_label().to_string(); + if kind_name.contains(self.query.as_str()) { + if ui.selectable_label(false, kind_name).clicked() { + submitted_archetype = Some(kind); + } else if query_submit { + submitted_archetype = Some(kind); + query_submit = false; + } } } - } - }); + }); }); }); diff --git a/egui_node_graph_example/Cargo.toml b/egui_node_graph_example/Cargo.toml index e74a6f0..2d875a4 100644 --- a/egui_node_graph_example/Cargo.toml +++ b/egui_node_graph_example/Cargo.toml @@ -9,7 +9,7 @@ rust-version = "1.56" crate-type = ["cdylib", "rlib"] [dependencies] -eframe = "0.17.0" +eframe = "0.18.0" egui_node_graph = { path = "../egui_node_graph" } anyhow = "1.0" diff --git a/egui_node_graph_example/src/app.rs b/egui_node_graph_example/src/app.rs index ec5b511..f3a41fe 100644 --- a/egui_node_graph_example/src/app.rs +++ b/egui_node_graph_example/src/app.rs @@ -1,9 +1,6 @@ use std::collections::HashMap; -use eframe::{ - egui::{self, DragValue, TextStyle}, - epi, -}; +use eframe::egui::{self, DragValue, TextStyle}; use egui_node_graph::*; // ========= First, define your user data types ============= @@ -352,14 +349,10 @@ impl Default for NodeGraphExample { } } -impl epi::App for NodeGraphExample { - fn name(&self) -> &str { - "Egui node graph example" - } - +impl eframe::App for NodeGraphExample { /// Called each time the UI needs repainting, which may be many times per second. /// Put your widgets into a `SidePanel`, `TopPanel`, `CentralPanel`, `Window` or `Area`. - fn update(&mut self, ctx: &egui::Context, _frame: &epi::Frame) { + fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { let graph_response = self.state.draw_graph_editor(ctx, AllMyNodeTemplates); for node_response in graph_response.node_responses { // Here, we ignore all other graph events. But you may find diff --git a/egui_node_graph_example/src/main.rs b/egui_node_graph_example/src/main.rs index 7479fad..489443a 100644 --- a/egui_node_graph_example/src/main.rs +++ b/egui_node_graph_example/src/main.rs @@ -5,7 +5,14 @@ // When compiling natively: #[cfg(not(target_arch = "wasm32"))] fn main() { - let app = egui_node_graph_example::NodeGraphExample::default(); - let native_options = eframe::NativeOptions::default(); - eframe::run_native(Box::new(app), native_options); + use eframe::egui::Visuals; + + eframe::run_native( + "Egui node graph example", + eframe::NativeOptions::default(), + Box::new(|cc| { + cc.egui_ctx.set_visuals(Visuals::dark()); + Box::new(egui_node_graph_example::NodeGraphExample::default()) + }), + ); }