X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FSeqPanel.java;h=2caea17d01aabf8bb9af9bd7c6d5935f0486412e;hb=HEAD;hp=d39f93710312c916df8bcbbb04b64bdd1e8610cc;hpb=373ea2f39547c5432fc2922e5d958e1955de14e8;p=jalview.git diff --git a/src/jalview/gui/SeqPanel.java b/src/jalview/gui/SeqPanel.java index d39f937..845004b 100644 --- a/src/jalview/gui/SeqPanel.java +++ b/src/jalview/gui/SeqPanel.java @@ -348,8 +348,9 @@ public class SeqPanel extends JPanel */ int findAlignmentColumn(MouseEvent evt) { - return findNearestColumn(evt,true); + return findNearestColumn(evt, true); } + /** * Returns the aligned sequence position (base 0) at the mouse position, or * the closest visible one @@ -364,9 +365,11 @@ public class SeqPanel extends JPanel { return findNearestColumn(evt, false); } - + /** - * @param nearestColumn when false returns negative values for out of bound positions - -1 for scale left/right, <-1 if far to right + * @param nearestColumn + * when false returns negative values for out of bound positions - -1 + * for scale left/right, <-1 if far to right * @return nearest absolute column to mouse pointer */ private int findNearestColumn(MouseEvent evt, boolean nearestColumn) @@ -394,9 +397,12 @@ public class SeqPanel extends JPanel if (x < 0) { // mouse is over left scale - if (!nearestColumn) { + if (!nearestColumn) + { return -1; - } else { + } + else + { x = 0; } } @@ -408,11 +414,14 @@ public class SeqPanel extends JPanel } if (x >= cwidth * charWidth) { - if (!nearestColumn) { + if (!nearestColumn) + { // mouse is over right scale return -1; - } else { - x = cwidth*charWidth -1; + } + else + { + x = cwidth * charWidth - 1; } } @@ -439,7 +448,6 @@ public class SeqPanel extends JPanel res = Math.min(res, av.getRanges().getEndRes()); } - if (av.hasHiddenColumns()) { @@ -2213,32 +2221,85 @@ public class SeqPanel extends JPanel } } + /** + * Responds to a mouse wheel movement by scrolling the alignment + * + * Note that this method may also be fired by scrolling with a gesture on a + * trackpad. + */ @Override public void mouseWheelMoved(MouseWheelEvent e) { e.consume(); double wheelRotation = e.getPreciseWheelRotation(); + + /* + * scroll more for large (fast) mouse movements + */ + int size = 1 + (int) Math.abs(wheelRotation); + if (wheelRotation > 0) { if (e.isShiftDown()) { - av.getRanges().scrollRight(true); - + /* + * scroll right + * stop trying to scroll right when limit is reached (saves + * expensive calls to Alignment.getWidth()) + */ + while (size-- > 0 && !ap.isScrolledFullyRight()) + { + if (!av.getRanges().scrollRight(true)) + { + break; + } + } } else { - av.getRanges().scrollUp(false); + /* + * scroll down + */ + while (size-- > 0) + { + if (!av.getRanges().scrollUp(false)) + { + break; + } + } } } else if (wheelRotation < 0) { if (e.isShiftDown()) { - av.getRanges().scrollRight(false); + /* + * scroll left + */ + while (size-- > 0) + { + if (!av.getRanges().scrollRight(false)) + { + break; + } + } } else { - av.getRanges().scrollUp(true); + /* + * scroll up + */ + while (size-- > 0) + { + if (!av.getRanges().scrollUp(true)) + { + break; + } + } } }