JAL-1291 conditional output of rendering debugging info
[jalview.git] / src / jalview / gui / AnnotationLabels.java
index 1577477..7d8a596 100755 (executable)
@@ -816,18 +816,32 @@ 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);
+  }
+
+  private final boolean debugRedraw = false;
+  /**
+   * 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 +857,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 +867,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 +889,33 @@ public class AnnotationLabels extends JPanel implements MouseListener,
           hasHiddenRows = true;
           continue;
         }
-
+        olY=y;
         y += aa[i].height;
+        if (clip) {if (y<sOffset)
+        {
+          if (!before)
+          {
+            if (debugRedraw) {
+              System.out.println("before vis: "+i);
+            }
+          before=true;
+          }
+          // don't draw what isn't visible
+          continue;
+        }
+        if (olY>visHeight)
+        {
 
+          if (!after)
+          {
+            if (debugRedraw) {
+              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)
@@ -960,7 +1006,7 @@ public class AnnotationLabels extends JPanel implements MouseListener,
               dragEvent.getY() - scrollOffset);
     }
 
-    if ((aa == null) || (aa.length < 1))
+    if (!av.wrapAlignment && ((aa == null) || (aa.length < 1)))
     {
       g.drawString("Right click", 2, 8);
       g.drawString("to add annotation", 2, 18);