JAL-3673 make sure font metrics are updated if dealing with reference sequence font !
[jalview.git] / src / jalview / gui / IdCanvas.java
index 951db78..541c253 100755 (executable)
  */
 package jalview.gui;
 
-import jalview.datamodel.SequenceI;
-import jalview.viewmodel.ViewportListenerI;
-import jalview.viewmodel.ViewportRanges;
-
 import java.awt.BorderLayout;
 import java.awt.Color;
 import java.awt.Font;
@@ -37,6 +33,10 @@ import java.util.List;
 
 import javax.swing.JPanel;
 
+import jalview.datamodel.SequenceI;
+import jalview.viewmodel.ViewportListenerI;
+import jalview.viewmodel.ViewportRanges;
+
 /**
  * DOCUMENT ME!
  * 
@@ -137,7 +137,7 @@ public class IdCanvas extends JPanel implements ViewportListenerI
     g.drawString(s.getDisplayId(av.getShowJVSuffix()), xPos,
             (((i - starty + 1) * charHeight) + ypos) - (charHeight / 5));
 
-    if (hiddenRows)
+    if (hiddenRows && av.getShowHiddenMarkers())
     {
       drawMarker(g, av, i, starty, ypos);
     }
@@ -320,6 +320,7 @@ public class IdCanvas extends JPanel implements ViewportListenerI
       if (hasHiddenRows || alignViewport.isDisplayReferenceSeq())
       {
         g.setFont(getHiddenFont(sequence, alignViewport));
+        fm = g.getFontMetrics();
       }
 
       // Selected sequence colours
@@ -359,7 +360,7 @@ public class IdCanvas extends JPanel implements ViewportListenerI
       g.drawString(string, xPos, (((i - startSeq) * charHeight) + charHeight)
               - (charHeight / 5));
 
-      if (hasHiddenRows)
+      if (hasHiddenRows && av.getShowHiddenMarkers())
       {
         drawMarker(g, alignViewport, i, startSeq, 0);
       }
@@ -380,32 +381,20 @@ public class IdCanvas extends JPanel implements ViewportListenerI
     int alignmentWidth = alignViewport.getAlignment().getWidth();
     final int alheight = alignViewport.getAlignment().getHeight();
 
-    int annotationHeight = 0;
+    /*
+     * assumption: SeqCanvas.calculateWrappedGeometry has been called
+     */
+    SeqCanvas seqCanvas = alignViewport.getAlignPanel()
+            .getSeqPanel().seqCanvas;
+
+    final int charHeight = alignViewport.getCharHeight();
 
     AnnotationLabels labels = null;
     if (alignViewport.isShowAnnotation())
     {
-      if (ap == null)
-      {
-        ap = new AnnotationPanel(alignViewport);
-      }
-      annotationHeight = ap.adjustPanelHeight();
       labels = new AnnotationLabels(alignViewport);
     }
 
-    final int charHeight = alignViewport.getCharHeight();
-    int hgap = charHeight;
-    if (alignViewport.getScaleAboveWrapped())
-    {
-      hgap += charHeight;
-    }
-
-    /*
-     * height of alignment + gap + annotations (if shown)
-     */
-    int cHeight = alheight * charHeight + hgap
-            + annotationHeight;
-
     ViewportRanges ranges = alignViewport.getRanges();
 
     int rowSize = ranges.getViewportWidth();
@@ -415,7 +404,7 @@ public class IdCanvas extends JPanel implements ViewportListenerI
      * out of visible space, whichever comes first
      */
     boolean hasHiddenRows = alignViewport.hasHiddenRows();
-    int ypos = hgap;
+    int ypos = seqCanvas.wrappedSpaceAboveAlignment;
     int rowStartRes = ranges.getStartRes();
     while ((ypos <= pageHeight) && (rowStartRes < alignmentWidth))
     {
@@ -440,7 +429,7 @@ public class IdCanvas extends JPanel implements ViewportListenerI
         g.translate(0, -ypos - (alheight * charHeight));
       }
 
-      ypos += cHeight;
+      ypos += seqCanvas.wrappedRepeatHeightPx;
       rowStartRes += rowSize;
     }
   }