JAL-2621 Added custom drag cursor to overview panel
[jalview.git] / src / jalview / appletgui / OverviewPanel.java
index 8ce597d..7431f6a 100755 (executable)
@@ -32,7 +32,9 @@ import java.awt.CheckboxMenuItem;
 import java.awt.Cursor;
 import java.awt.Dimension;
 import java.awt.Frame;
+import java.awt.Image;
 import java.awt.Panel;
+import java.awt.Point;
 import java.awt.PopupMenu;
 import java.awt.event.ComponentAdapter;
 import java.awt.event.ComponentEvent;
@@ -44,9 +46,14 @@ import java.awt.event.MouseListener;
 import java.awt.event.MouseMotionListener;
 import java.beans.PropertyChangeEvent;
 
+import javax.swing.ImageIcon;
+
 public class OverviewPanel extends Panel implements Runnable,
         MouseMotionListener, MouseListener, ViewportListenerI
 {
+  protected Image dragImage = new ImageIcon(
+          getClass().getResource("/images/dragcursor.png")).getImage();
+
   private OverviewDimensions od;
 
   private OverviewCanvas oviewCanvas;
@@ -61,6 +68,8 @@ public class OverviewPanel extends Panel implements Runnable,
 
   private boolean draggingBox = false;
 
+  private Cursor dragCursor;
+
   public OverviewPanel(AlignmentPanel alPanel)
   {
     this.av = alPanel.av;
@@ -79,6 +88,20 @@ public class OverviewPanel extends Panel implements Runnable,
 
     av.getRanges().addPropertyChangeListener(this);
 
+    // set up custom cursor for use on Mac...
+    Point hotSpot = new Point(16, 16);
+    String cursorName = "Custom drag cursor";
+
+    if (Platform.isAMac())
+    {
+      dragCursor = getToolkit().createCustomCursor(dragImage, hotSpot,
+              cursorName);
+    }
+    else
+    {
+      dragCursor = Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR);
+    }
+
     addComponentListener(new ComponentAdapter()
     {
 
@@ -119,20 +142,33 @@ public class OverviewPanel extends Panel implements Runnable,
     {
       showPopupMenu(evt);
     }
+    else if (od.isPositionInBox(evt.getX(), evt.getY()))
+    {
+      // display drag cursor at mouse position
+      this.getParent().setCursor(dragCursor);
+    }
+    else
+    {
+      // reset cursor
+      this.getParent()
+              .setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+    }
   }
 
   @Override
   public void mouseMoved(MouseEvent evt)
   {
+    System.out.println(evt.getY());
     if (od.isPositionInBox(evt.getX(), evt.getY()))
     {
       // display drag cursor at mouse position
-      setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
+      this.getParent().setCursor(dragCursor);
     }
     else
     {
       // reset cursor
-      setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+      this.getParent()
+              .setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
     }
   }