X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FSeqPanel.java;fp=src%2Fjalview%2Fgui%2FSeqPanel.java;h=845004bdb05d1391565f86889238045bd45eb59a;hb=0ebbad305e982eeda562a1842362dc415c36cc8d;hp=2caea17d01aabf8bb9af9bd7c6d5935f0486412e;hpb=deb7e7788d802d45cc6b2f8a5a04285308f1e8ee;p=jalview.git
diff --git a/src/jalview/gui/SeqPanel.java b/src/jalview/gui/SeqPanel.java
index 2caea17..845004b 100644
--- a/src/jalview/gui/SeqPanel.java
+++ b/src/jalview/gui/SeqPanel.java
@@ -2221,32 +2221,85 @@ public class SeqPanel extends JPanel
}
}
+ /**
+ * Responds to a mouse wheel movement by scrolling the alignment
+ *
+ * - left or right, if the shift key is down, else up or down
+ * - right (or down) if the reported mouse movement is positive
+ * - left (or up) if the reported mouse movement is negative
+ *
+ * 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;
+ }
+ }
}
}