JAL-2621 Added custom drag cursor to overview panel
[jalview.git] / src / jalview / gui / OverviewPanel.java
index 43b4310..567a121 100755 (executable)
@@ -32,6 +32,8 @@ import jalview.viewmodel.ViewportListenerI;
 import java.awt.BorderLayout;
 import java.awt.Cursor;
 import java.awt.Dimension;
+import java.awt.Image;
+import java.awt.Point;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.ComponentAdapter;
@@ -42,6 +44,7 @@ import java.awt.event.MouseMotionAdapter;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyVetoException;
 
+import javax.swing.ImageIcon;
 import javax.swing.JCheckBoxMenuItem;
 import javax.swing.JInternalFrame;
 import javax.swing.JPanel;
@@ -58,6 +61,10 @@ import javax.swing.SwingUtilities;
 public class OverviewPanel extends JPanel
         implements Runnable, ViewportListenerI
 {
+  protected Image dragImage = new ImageIcon(
+          getClass().getResource("/images/dragcursor.png"))
+                  .getImage();
+
   private OverviewDimensions od;
 
   private OverviewCanvas oviewCanvas;
@@ -113,6 +120,22 @@ public class OverviewPanel extends JPanel
     // without this the overview window does not size to fit the overview canvas
     setPreferredSize(new Dimension(od.getWidth(), od.getHeight()));
 
+    // set up custom cursor for use on Mac...
+    Point hotSpot = new Point(16, 16);
+    String cursorName = "Custom drag cursor";
+    
+    Cursor tempCursor;
+    if (Platform.isAMac())
+    {
+      tempCursor = getToolkit().createCustomCursor(dragImage, hotSpot,
+              cursorName);
+    }
+    else
+    {
+      tempCursor = Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR);
+    }
+    final Cursor dragCursor = tempCursor;
+    
     addComponentListener(new ComponentAdapter()
     {
       @Override
@@ -173,14 +196,16 @@ public class OverviewPanel extends JPanel
         if (od.isPositionInBox(evt.getX(), evt.getY()))
         {
           // display drag cursor at mouse position
-          setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
+          getParent().setCursor(dragCursor);
         }
         else
         {
           // reset cursor
-          setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+          getParent().setCursor(
+                  Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
         }
       }
+
     });
 
     addMouseListener(new MouseAdapter()
@@ -224,6 +249,18 @@ public class OverviewPanel extends JPanel
         {
           showPopupMenu(evt);
         }
+        // click in box should also reset the cursor
+        else if (od.isPositionInBox(evt.getX(), evt.getY()))
+        {
+          // display drag cursor at mouse position
+          getParent().setCursor(dragCursor);
+        }
+        else
+        {
+          // reset cursor
+          getParent().setCursor(
+                  Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+        }
       }
     });
   }