From 95b5479b3b67b2ae21d6e47a5be1d1eab7a35e7b Mon Sep 17 00:00:00 2001
From: Alberto Nidasio <alberto.nidasio@skywarder.eu>
Date: Sun, 12 Jan 2025 15:17:04 +0100
Subject: [PATCH] Pointer now changes to grab icon when hovering PID elements

---
 src/ui/panes/pid_drawing_tool.rs | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/src/ui/panes/pid_drawing_tool.rs b/src/ui/panes/pid_drawing_tool.rs
index b9113cc..6f93261 100644
--- a/src/ui/panes/pid_drawing_tool.rs
+++ b/src/ui/panes/pid_drawing_tool.rs
@@ -4,7 +4,9 @@ mod pos;
 mod symbols;
 
 use connections::Connection;
-use egui::{epaint::PathStroke, Color32, Context, PointerButton, Pos2, Sense, Theme, Ui, Vec2};
+use egui::{
+    epaint::PathStroke, Color32, Context, CursorIcon, PointerButton, Pos2, Sense, Theme, Ui, Vec2,
+};
 use elements::Element;
 use pos::Pos;
 use serde::{Deserialize, Serialize};
@@ -49,9 +51,6 @@ impl Default for PidPane {
 
 impl PaneBehavior for PidPane {
     fn ui(&mut self, ui: &mut egui::Ui) -> PaneResponse {
-        // Set cursor icon
-        // ui.ctx().output_mut(|output| output.cursor_icon = CursorIcon::Grab);
-
         let theme = PidPane::find_theme(ui.ctx());
         self.draw_grid(theme, ui);
         self.draw_connections(ui);
@@ -61,6 +60,14 @@ impl PaneBehavior for PidPane {
         let (_, response) = ui.allocate_at_least(ui.max_rect().size(), Sense::click_and_drag());
         let pointer_pos = response.hover_pos().map(|pos| self.screen_to_grid_pos(pos));
 
+        // Set grab icon when hovering an element
+        if let Some(pointer_pos) = &pointer_pos {
+            if self.is_hovering_element(pointer_pos) {
+                ui.ctx()
+                    .output_mut(|output| output.cursor_icon = CursorIcon::Grab);
+            }
+        }
+
         // Detect the action
         if let Some(pointer_pos) = &pointer_pos {
             if response.clicked_by(PointerButton::Secondary) {
-- 
GitLab