diff --git a/topola-egui/src/viewport.rs b/topola-egui/src/viewport.rs index 8420e55..0590a4d 100644 --- a/topola-egui/src/viewport.rs +++ b/topola-egui/src/viewport.rs @@ -25,36 +25,47 @@ impl Viewport { pub fn update(&mut self, ctx: &egui::Context, workspace: Option<&mut Workspace>) { egui::CentralPanel::default().show(ctx, |ui| { egui::Frame::canvas(ui.style()).show(ui, |ui| { + ui.ctx().request_repaint(); + let zoom_range = 0.00001..=10000.0; let viewport_rect = ui.available_rect_before_wrap(); let mut scene_rect = self.scene_rect.clone(); - egui::Scene::new() + let response = egui::Scene::new() .zoom_range(zoom_range.clone()) + //.sense(egui::Sense::hover()) .show(ui, &mut scene_rect, |ui| { if let Some(ref workspace) = workspace { let mut display = Display::new(); display.update(ctx, ui, &self, workspace); } - }); + }) + .response; self.scene_rect = scene_rect; let scene_to_viewport = Self::fit_to_rect_in_scene(viewport_rect, scene_rect, zoom_range.into()); - let response = ui.interact(viewport_rect, ui.id(), egui::Sense::click_and_drag()); - let pointer_scene_pos = scene_to_viewport.inverse() - * (response.interact_pointer_pos().unwrap_or_else(|| { - ctx.input(|i| i.pointer.interact_pos().unwrap_or_default()) - })); - if let Some(workspace) = workspace { - dbg!(workspace.navmesher_board.board().point_pin_selector( - 0, - Vector2::new(pointer_scene_pos.x as i64, pointer_scene_pos.y as i64) - )); + if let Some(pointer_viewport_pos) = ctx.input(|i| i.pointer.interact_pos()) { + let pointer_scene_pos = scene_to_viewport.inverse() * pointer_viewport_pos; + + if response.clicked() { + if let Some(pin_selector) = + workspace.navmesher_board.board().point_pin_selector( + 0, + Vector2::new( + pointer_scene_pos.x as i64, + pointer_scene_pos.y as i64, + ), + ) + { + workspace.pin_selection.toggle(pin_selector); + } + } + } self.zoom_to_fit_if_scheduled(workspace); } diff --git a/topola/src/primitives.rs b/topola/src/primitives.rs index 0043f7d..3debc0f 100644 --- a/topola/src/primitives.rs +++ b/topola/src/primitives.rs @@ -140,6 +140,6 @@ impl Polygon { } pub fn contains_point(&self, point: Vector2) -> bool { - dbg!(point.inside_polygon(&self.vertices)) + point.inside_polygon(&self.vertices) } }