JAL-2759 rationalise visible contigs iteration
[jalview.git] / src / jalview / appletgui / SeqCanvas.java
index 8d429c7..e83d04a 100755 (executable)
@@ -25,6 +25,7 @@ import jalview.datamodel.HiddenColumns;
 import jalview.datamodel.SearchResultsI;
 import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
+import jalview.datamodel.VisibleContigsIterator;
 import jalview.renderer.ScaleRenderer;
 import jalview.renderer.ScaleRenderer.ScaleMark;
 import jalview.viewmodel.AlignmentViewport;
@@ -492,7 +493,7 @@ public class SeqCanvas extends Panel implements ViewportListenerI
         g.setColor(Color.blue);
         int res;
         Iterator<Integer> it = hidden.getBoundedStartIterator(startRes,
-                endx + 1, true);
+                endx + 1);
         while (it.hasNext())
         {
           res = it.next() - startRes;
@@ -560,25 +561,23 @@ public class SeqCanvas extends Panel implements ViewportListenerI
     else
     {
       int screenY = 0;
-      final int screenYMax = endRes - startRes;
-      int blockStart = startRes;
-      int blockEnd = endRes;
+      int blockStart;
+      int blockEnd;
 
       HiddenColumns hidden = av.getAlignment().getHiddenColumns();
-      Iterator<int[]> regions = hidden.getBoundedVisRegionIterator(startRes,
-              endRes);
+      VisibleContigsIterator regions = (VisibleContigsIterator) hidden
+              .getVisibleBlocksIterator(startRes, endRes, true);
+
       while (regions.hasNext())
       {
         int[] region = regions.next();
-
+        blockEnd = region[1];
         blockStart = region[0];
 
         /*
          * draw up to just before the next hidden region, or the end of
          * the visible region, whichever comes first
          */
-        blockEnd = Math.min(region[1], blockStart + screenYMax - screenY);
-
         g1.translate(screenY * avcharWidth, 0);
 
         draw(g1, blockStart, blockEnd, startSeq, endSeq, offset);
@@ -587,7 +586,8 @@ public class SeqCanvas extends Panel implements ViewportListenerI
          * draw the downline of the hidden column marker (ScalePanel draws the
          * triangle on top) if we reached it
          */
-        if (av.getShowHiddenMarkers() && blockEnd == region[1])
+        if (av.getShowHiddenMarkers()
+                && (regions.hasNext() || regions.endsAtHidden()))
         {
           g1.setColor(Color.blue);
           g1.drawLine((blockEnd - blockStart + 1) * avcharWidth - 1,
@@ -597,24 +597,8 @@ public class SeqCanvas extends Panel implements ViewportListenerI
 
         g1.translate(-screenY * avcharWidth, 0);
         screenY += blockEnd - blockStart + 1;
-
-        if (screenY > screenYMax)
-        {
-          // already rendered last block
-          return;
-        }
-      }
-      if (screenY <= screenYMax)
-      {
-        // remaining visible region to render
-        blockEnd = blockStart + (endRes - startRes) - screenY;
-        g1.translate(screenY * avcharWidth, 0);
-        draw(g1, blockStart, blockEnd, startSeq, endSeq, offset);
-
-        g1.translate(-screenY * avcharWidth, 0);
       }
     }
-
   }
 
   // int startRes, int endRes, int startSeq, int endSeq, int x, int y,