import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
+import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
if (evt.isPopupTrigger()) // Mac: mousePressed
{
rightMouseButtonPressed(evt, res);
+ return;
}
- else if (SwingUtilities.isRightMouseButton(evt) && !Platform.isAMac())
+ if (Platform.isWinRightButton(evt))
{
/*
* defer right-mouse click handling to mouse up on Windows
*/
return;
}
- else
- {
- leftMouseButtonPressed(evt, res);
- }
+ leftMouseButtonPressed(evt, res);
}
/**
}
/**
- * DOCUMENT ME!
+ * Action on mouseUp is to set the limit of the current selection group (if
+ * there is one) and broadcast the selection
*
* @param evt
- * DOCUMENT ME!
*/
@Override
public void mouseReleased(MouseEvent evt)
{
mouseDragging = false;
+ ap.getSeqPanel().stopScrolling();
- int res = (evt.getX() / av.getCharWidth())
+ // todo res calculation should be a method on AlignViewport
+ int xCords = Math.max(0, evt.getX()); // prevent negative X coordinates
+
+ int res = (xCords / av.getCharWidth())
+ av.getRanges().getStartRes();
if (av.hasHiddenColumns())
res = av.getAlignment().getHiddenColumns()
.visibleToAbsoluteColumn(res);
}
-
- if (res >= av.getAlignment().getWidth())
- {
- res = av.getAlignment().getWidth() - 1;
- }
+ res = Math.min(res, av.getAlignment().getWidth() - 1);
if (!stretchingGroup)
{
{
if (mouseDragging)
{
- ap.getSeqPanel().scrollCanvas(null);
+ mouseDragging = false;
+ ap.getSeqPanel().stopScrolling();
}
}
+ /**
+ * Action on leaving the panel bounds with mouse drag in progress is to start
+ * scrolling the alignment in the direction of the mouse. To restrict
+ * scrolling to left-right (not up-down), the y-value of the mouse position is
+ * replaced with zero.
+ */
@Override
public void mouseExited(MouseEvent evt)
{
if (mouseDragging)
{
- ap.getSeqPanel().scrollCanvas(evt);
+ ap.getSeqPanel().startScrolling(new Point(evt.getX(), 0));
}
}
@Override
public void paintComponent(Graphics g)
{
- super.paintComponent(g);
+ //super.paintComponent(g); // BH 2019
/*
* shouldn't get called in wrapped mode as the scale above is