JAL-1161 conditional parameters for controlling clipping
[jalview.git] / src / jalview / gui / AnnotationLabels.java
index dd6f190..6df2088 100755 (executable)
@@ -816,18 +816,30 @@ public class AnnotationLabels extends JPanel implements MouseListener,
               RenderingHints.VALUE_ANTIALIAS_ON);
     }
 
-    drawComponent(g2, width);
+    drawComponent(g2, true, width);
 
   }
 
   /**
-   * DOCUMENT ME!
+   * Draw the full set of annotation Labels for the alignment at the given cursor
    * 
-   * @param g
-   *          DOCUMENT ME!
+   * @param g Graphics2D instance (needed for font scaling)
+   * @param width Width for scaling labels
+   *          
    */
   public void drawComponent(Graphics g, int width)
   {
+    drawComponent(g, false, width);
+  }
+  /**
+   * Draw the full set of annotation Labels for the alignment at the given cursor
+   * 
+   * @param g Graphics2D instance (needed for font scaling)
+   * @param clip - true indicates that only current visible area needs to be rendered
+   * @param width Width for scaling labels         
+   */
+  public void drawComponent(Graphics g, boolean clip, int width)
+  {
     if (av.getFont().getSize() < 10)
     {
       g.setFont(font);
@@ -843,7 +855,7 @@ public class AnnotationLabels extends JPanel implements MouseListener,
 
     g.translate(0, scrollOffset);
     g.setColor(Color.black);
-
+    
     AlignmentAnnotation[] aa = av.getAlignment().getAlignmentAnnotation();
     int fontHeight = g.getFont().getSize();
     int y = 0;
@@ -853,10 +865,18 @@ public class AnnotationLabels extends JPanel implements MouseListener,
     Font baseFont = g.getFont();
     FontMetrics baseMetrics = fm;
     int ofontH = fontHeight;
-    boolean visible = true;
+    int sOffset=0;
+    int visHeight = 0;
+    int[] visr = (ap!=null && ap.annotationPanel!=null) ? ap.annotationPanel.getVisibleVRange() : null;
+    if (clip && visr!=null){ 
+      sOffset = visr[0]; 
+      visHeight = visr[1];
+    }
+    boolean visible = true,before=false,after=false;
     if (aa != null)
     {
       hasHiddenRows = false;
+      int olY=0;
       for (int i = 0; i < aa.length; i++)
       {
         visible = true;
@@ -867,9 +887,29 @@ public class AnnotationLabels extends JPanel implements MouseListener,
           hasHiddenRows = true;
           continue;
         }
-
+        olY=y;
         y += aa[i].height;
+        if (clip) {if (y<sOffset)
+        {
+          if (!before)
+          {
+          System.out.println("before vis: "+i);
+          before=true;
+          }
+          // don't draw what isn't visible
+          continue;
+        }
+        if (olY>visHeight)
+        {
 
+          if (!after)
+          {
+          System.out.println("Scroll offset: "+sOffset+" after vis: "+i);
+          after=true;
+          }
+          // don't draw what isn't visible
+          continue;
+        }}
         offset = -aa[i].height / 2;
 
         if (aa[i].hasText)