From 78f5bbe9330cbf3d686d1a5c411956e091c88541 Mon Sep 17 00:00:00 2001 From: gmungoc Date: Mon, 29 Jul 2019 15:35:22 +0100 Subject: [PATCH] JAL-3377 more reused of SeqCanvas.computeWrappedGeometry --- src/jalview/gui/AlignmentPanel.java | 2 ++ src/jalview/gui/IdCanvas.java | 27 ++++++--------------- src/jalview/gui/SeqCanvas.java | 45 ++++++++++++++--------------------- 3 files changed, 27 insertions(+), 47 deletions(-) diff --git a/src/jalview/gui/AlignmentPanel.java b/src/jalview/gui/AlignmentPanel.java index 1a133f3..3dc182a 100644 --- a/src/jalview/gui/AlignmentPanel.java +++ b/src/jalview/gui/AlignmentPanel.java @@ -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()) { diff --git a/src/jalview/gui/IdCanvas.java b/src/jalview/gui/IdCanvas.java index ab5585c..793c005 100755 --- a/src/jalview/gui/IdCanvas.java +++ b/src/jalview/gui/IdCanvas.java @@ -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; } } diff --git a/src/jalview/gui/SeqCanvas.java b/src/jalview/gui/SeqCanvas.java index b3fcc54..2832796 100755 --- a/src/jalview/gui/SeqCanvas.java +++ b/src/jalview/gui/SeqCanvas.java @@ -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()) -- 1.7.10.2