JAL-3377 more reused of SeqCanvas.computeWrappedGeometry
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Mon, 29 Jul 2019 14:35:22 +0000 (15:35 +0100)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Mon, 29 Jul 2019 14:35:22 +0000 (15:35 +0100)
src/jalview/gui/AlignmentPanel.java
src/jalview/gui/IdCanvas.java
src/jalview/gui/SeqCanvas.java

index 1a133f3..3dc182a 100644 (file)
@@ -1052,6 +1052,8 @@ public class AlignmentPanel extends GAlignmentPanel implements
   public int printWrappedAlignment(int pageWidth, int pageHeight, int pageNumber,
           Graphics g) throws PrinterException
   {
+    getSeqPanel().seqCanvas.calculateWrappedGeometry(getWidth(),
+            getHeight());
     int annotationHeight = 0;
     if (av.isShowAnnotation())
     {
index ab5585c..793c005 100755 (executable)
@@ -380,33 +380,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();
-    int hgap = charHeight;
-    if (alignViewport.getScaleAboveWrapped())
-    {
-      hgap += charHeight;
-    }
 
     AnnotationLabels labels = null;
     if (alignViewport.isShowAnnotation())
     {
-      if (ap == null)
-      {
-        ap = new AnnotationPanel(alignViewport);
-      }
-      annotationHeight = ap.adjustPanelHeight()
-              + SeqCanvas.SEQS_ANNOTATION_GAP;
       labels = new AnnotationLabels(alignViewport);
     }
 
-    /*
-     * height of alignment + gap + annotations (if shown)
-     */
-    int cHeight = alheight * charHeight + hgap
-            + annotationHeight;
-
     ViewportRanges ranges = alignViewport.getRanges();
 
     int rowSize = ranges.getViewportWidth();
@@ -416,7 +403,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))
     {
@@ -441,7 +428,7 @@ public class IdCanvas extends JPanel implements ViewportListenerI
         g.translate(0, -ypos - (alheight * charHeight));
       }
 
-      ypos += cHeight;
+      ypos += seqCanvas.wrappedRepeatHeightPx;
       rowStartRes += rowSize;
     }
   }
index b3fcc54..2832796 100755 (executable)
@@ -55,8 +55,8 @@ import javax.swing.JComponent;
  */
 public class SeqCanvas extends JComponent implements ViewportListenerI
 {
-  /*
-   * pixels gap between sequences and annotations when in wrapped mode
+  /**
+   * vertical gap in pixels between sequences and annotations when in wrapped mode
    */
   static final int SEQS_ANNOTATION_GAP = 3;
 
@@ -853,35 +853,24 @@ public class SeqCanvas extends JComponent implements ViewportListenerI
           int canvasWidth,
           int canvasHeight, int startRes)
   {
-    int charHeight = av.getCharHeight();
-    int charWidth = av.getCharWidth();
-      
-    // height gap above each panel
-    int hgap = charHeight;
-    if (av.getScaleAboveWrapped())
-    {
-      hgap += charHeight;
-    }
-
-    int cWidth = (canvasWidth - labelWidthEast - labelWidthWest)
-            / charWidth;
-    int cHeight = av.getAlignment().getHeight() * charHeight;
-
-    int startx = startRes;
-    int endx;
-    int ypos = hgap; // vertical offset
-    int maxwidth = av.getAlignment().getVisibleWidth();
-
     // chop the wrapped alignment extent up into panel-sized blocks and treat
     // each block as if it were a block from an unwrapped alignment
     g.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT,
             BasicStroke.JOIN_ROUND, 3f, new float[]
             { 5f, 3f }, 0f));
     g.setColor(Color.RED);
+
+    int charWidth = av.getCharWidth();
+    int cWidth = (canvasWidth - labelWidthEast - labelWidthWest)
+            / charWidth;
+    int startx = startRes;
+    int maxwidth = av.getAlignment().getVisibleWidth();
+    int ypos = wrappedSpaceAboveAlignment;
+
     while ((ypos <= canvasHeight) && (startx < maxwidth))
     {
       // set end value to be start + width, or maxwidth, whichever is smaller
-      endx = startx + cWidth - 1;
+      int endx = startx + cWidth - 1;
 
       if (endx > maxwidth)
       {
@@ -889,22 +878,24 @@ public class SeqCanvas extends JComponent implements ViewportListenerI
       }
 
       g.translate(labelWidthWest, 0);
-
       drawUnwrappedSelection(g, group, startx, endx, 0,
               av.getAlignment().getHeight() - 1,
               ypos);
-
       g.translate(-labelWidthWest, 0);
 
-      // update vertical offset
-      ypos += cHeight + getAnnotationHeight() + hgap;
+      ypos += wrappedRepeatHeightPx;
 
-      // update horizontal offset
       startx += cWidth;
     }
     g.setStroke(new BasicStroke());
   }
 
+  /**
+   * Answers zero if annotations are not shown, otherwise recalculates and answers
+   * the total height of all annotation rows in pixels
+   * 
+   * @return
+   */
   int getAnnotationHeight()
   {
     if (!av.isShowAnnotation())