JAL-147 prevent vertical Overview box movement in wrapped mode
[jalview.git] / src / jalview / viewmodel / OverviewDimensionsShowHidden.java
index 4f7d6c2..62e8000 100644 (file)
@@ -81,6 +81,11 @@ public class OverviewDimensionsShowHidden extends OverviewDimensions
       y = 0;
     }
 
+    if (ranges.isWrappedMode())
+    {
+      y = 0; // sorry, no vertical scroll when wrapped
+    }
+
     //
     // Convert x value to residue position
     //
@@ -108,14 +113,14 @@ public class OverviewDimensionsShowHidden extends OverviewDimensions
       // went past the end of the alignment, adjust backwards
 
       // if last position was before the end of the alignment, need to update
-      if ((ranges.getEndRes() + vpwidth - 1) < visAlignWidth)
+      if (ranges.getEndRes() < visAlignWidth)
       {
         visXAsRes = hiddenCols.findColumnPosition(hiddenCols
                 .subtractVisibleColumns(vpwidth - 1, alwidth - 1));
       }
       else
       {
-        visXAsRes = ranges.getEndRes();
+        visXAsRes = ranges.getStartRes();
       }
     }
 
@@ -135,28 +140,29 @@ public class OverviewDimensionsShowHidden extends OverviewDimensions
     // so convert back after getting visible region position
     yAsSeq = hiddenSeqs.adjustForHiddenSeqs(hiddenSeqs
             .findIndexWithoutHiddenSeqs(yAsSeq));
+    yAsSeq = Math.max(yAsSeq, 0); // -1 if before first visible sequence
 
     // check in case we went off the edge of the alignment
     int visAlignHeight = hiddenSeqs.findIndexWithoutHiddenSeqs(alheight);
     int visYAsSeq = hiddenSeqs.findIndexWithoutHiddenSeqs(yAsSeq);
+    visYAsSeq = Math.max(visYAsSeq, 0); // -1 if before first visible sequence
     if (visYAsSeq + vpheight - 1 > visAlignHeight)
     {
       // went past the end of the alignment, adjust backwards
-      if ((ranges.getEndSeq() + vpheight - 1) < visAlignHeight)
+      if (ranges.getEndSeq() < visAlignHeight)
       {
         visYAsSeq = hiddenSeqs.findIndexWithoutHiddenSeqs(hiddenSeqs
                 .subtractVisibleRows(vpheight - 1, alheight - 1));
       }
       else
       {
-        visYAsSeq = ranges.getEndSeq();
+        visYAsSeq = ranges.getStartSeq();
       }
     }
 
     // update viewport
-    ranges.setStartRes(xAsRes);
-    ranges.setStartSeq(yAsSeq);
-
+    ranges.setStartRes(visXAsRes);
+    ranges.setStartSeq(visYAsSeq);
   }
 
   /**
@@ -175,15 +181,15 @@ public class OverviewDimensionsShowHidden extends OverviewDimensions
           HiddenColumns hiddenCols)
   {
     // work with absolute values of startRes and endRes
-    int startRes = hiddenCols
-            .adjustForHiddenColumns(ranges.getStartRes());
+    int startRes = hiddenCols.adjustForHiddenColumns(ranges.getStartRes());
     int endRes = hiddenCols.adjustForHiddenColumns(ranges.getEndRes());
 
     // work with absolute values of startSeq and endSeq
     int startSeq = hiddenSeqs.adjustForHiddenSeqs(ranges.getStartSeq());
     int endSeq = hiddenSeqs.adjustForHiddenSeqs(ranges.getEndSeq());
 
-    setBoxPosition(startRes, endRes, startSeq, endSeq);
+    setBoxPosition(startRes, startSeq, endRes - startRes + 1, endSeq
+            - startSeq + 1);
   }
 
   @Override