JAL-147 improved wrapped scrolling (including Overview) with
[jalview.git] / src / jalview / gui / AlignmentPanel.java
index ce9e989..437e678 100644 (file)
@@ -416,7 +416,8 @@ public class AlignmentPanel extends GAlignmentPanel implements
        */
       if (centre)
       {
-        int offset = (vpRanges.getEndRes() - vpRanges.getStartRes() + 1) / 2 - 1;
+        int offset = (vpRanges.getEndRes() - vpRanges.getStartRes() + 1) / 2
+                - 1;
         start = Math.max(start - offset, 0);
         end = end + offset - 1;
       }
@@ -754,13 +755,17 @@ public class AlignmentPanel extends GAlignmentPanel implements
         // if we're scrolling to the position we're already at, stop
         // this prevents infinite recursion of events when the scroll/viewport
         // ranges values are the same
-        if ((offy * rowSize == oldX) && (oldwidth == rowSize))
+        int newX = offy * rowSize;
+        newX += oldX % rowSize; // horizontal scroll offset if any
+        if ((newX == oldX) && (oldwidth == rowSize))
         {
           return;
         }
         else if (offy > -1)
         {
-          vpRanges.setViewportStartAndWidth(offy * rowSize, rowSize);
+          // limit page up/down to one width's worth of positions
+          newX = newX > oldX ? oldX + rowSize : oldX - rowSize;
+          vpRanges.setViewportStartAndWidth(newX, rowSize);
         }
       }
       else