Merge branch 'develop' into features/JAL-2446NCList
[jalview.git] / src / jalview / appletgui / SeqCanvas.java
index 28c5291..f59967d 100755 (executable)
@@ -559,8 +559,8 @@ public class SeqCanvas extends Panel implements ViewportListenerI
     return annotations.adjustPanelHeight();
   }
 
-  private void drawPanel(Graphics g1, int startRes, int endRes,
-          int startSeq, int endSeq, int offset)
+  private void drawPanel(Graphics g1, final int startRes, final int endRes,
+          final int startSeq, final int endSeq, final int offset)
   {
 
     if (!av.hasHiddenColumns())
@@ -569,8 +569,8 @@ public class SeqCanvas extends Panel implements ViewportListenerI
     }
     else
     {
-
       int screenY = 0;
+      final int screenYMax = endRes - startRes;
       int blockStart = startRes;
       int blockEnd = endRes;
 
@@ -588,13 +588,22 @@ public class SeqCanvas extends Panel implements ViewportListenerI
             continue;
           }
 
-          blockEnd = hideStart - 1;
+          /*
+           * draw up to just before the next hidden region, or the end of
+           * the visible region, whichever comes first
+           */
+          blockEnd = Math.min(hideStart - 1, blockStart + screenYMax
+                  - screenY);
 
           g1.translate(screenY * avcharWidth, 0);
 
           draw(g1, blockStart, blockEnd, startSeq, endSeq, offset);
 
-          if (av.getShowHiddenMarkers())
+          /*
+           * draw the downline of the hidden column marker (ScalePanel draws the
+           * triangle on top) if we reached it
+           */
+          if (av.getShowHiddenMarkers() && blockEnd == hideStart - 1)
           {
             g1.setColor(Color.blue);
             g1.drawLine((blockEnd - blockStart + 1) * avcharWidth - 1,
@@ -607,14 +616,14 @@ public class SeqCanvas extends Panel implements ViewportListenerI
           screenY += blockEnd - blockStart + 1;
           blockStart = hideEnd + 1;
 
-          if (screenY > (endRes - startRes))
+          if (screenY > screenYMax)
           {
             // already rendered last block
             return;
           }
         }
       }
-      if (screenY <= (endRes - startRes))
+      if (screenY <= screenYMax)
       {
         // remaining visible region to render
         blockEnd = blockStart + (endRes - startRes) - screenY;