JAL-2831 tidies and tests
[jalview.git] / src / jalview / viewmodel / ViewportRanges.java
index e463cc3..0cc8d7c 100644 (file)
@@ -563,7 +563,7 @@ public class ViewportRanges extends ViewportProperties
    * Calculate wrapped start residue from visible start residue
    * 
    * @param res
-   *          absolute start residue
+   *          visible start residue
    * @return left column of panel res will be located in
    */
   private int calcWrappedStartResidue(int res)
@@ -571,11 +571,6 @@ public class ViewportRanges extends ViewportProperties
     int oldStartRes = startRes;
     int width = getViewportWidth();
 
-    /*if (res >= oldStartRes && res < oldStartRes + width)
-    {
-      return false;
-    }*/
-
     boolean up = res < oldStartRes;
     int widthsToScroll = Math.abs((res - oldStartRes) / width);
     if (up)
@@ -633,15 +628,15 @@ public class ViewportRanges extends ViewportProperties
    * Set the viewport location so that a position is visible
    * 
    * @param x
-   *          column to be visible
+   *          column to be visible: absolute position in alignment
    * @param y
-   *          row to be visible
+   *          row to be visible: absolute position in alignment
    */
   public boolean setViewportLocation(int x, int y)
   {
     boolean changedLocation = false;
 
-    // convert the x,y location to absolute values
+    // convert the x,y location to visible coordinates
     int visX = al.getHiddenColumns().findColumnPosition(x);
     int visY = al.getHiddenSequences().findIndexWithoutHiddenSeqs(y);
 
@@ -660,18 +655,22 @@ public class ViewportRanges extends ViewportProperties
       else
       {
         // set the viewport x location to contain vis_x
+        int newstartres = visX;
         int width = getViewportWidth();
-        updateStartEndRes(visX, visX + width - 1);
+        if (newstartres + width - 1 > getVisibleAlignmentWidth() - 1)
+        {
+          newstartres = getVisibleAlignmentWidth() - width;
+        }
+        updateStartEndRes(newstartres, newstartres + width - 1);
 
         // set the viewport y location to contain vis_y
-        int startseq = visY;
+        int newstartseq = visY;
         int height = getViewportHeight();
-        if (startseq + height - 1 > getVisibleAlignmentHeight() - 1)
+        if (newstartseq + height - 1 > getVisibleAlignmentHeight() - 1)
         {
-          startseq = getVisibleAlignmentHeight() - height;
+          newstartseq = getVisibleAlignmentHeight() - height;
         }
-        updateStartEndSeq(startseq,
-              startseq + height - 1);
+        updateStartEndSeq(newstartseq, newstartseq + height - 1);
 
         newresseq = new int[] { startRes, startSeq };
       }