X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fgui%2FSeqCanvas.java;h=28327968706868671eb80c0c6d8dc1fba9329dd9;hb=1b378087ec2d5be9b290cd63c45bfdb9e75269fb;hp=2a370c4713a2f433c11dec2f911f0f59a712cdfa;hpb=985fd5ff517f3eb5221a7aefec88138341514779;p=jalview.git diff --git a/src/jalview/gui/SeqCanvas.java b/src/jalview/gui/SeqCanvas.java index 2a370c4..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()) @@ -1655,7 +1646,7 @@ public class SeqCanvas extends JComponent implements ViewportListenerI } ViewportRanges vpRanges = av.getRanges(); - int range = vpRanges.getEndRes() - vpRanges.getStartRes(); + int range = vpRanges.getEndRes() - vpRanges.getStartRes() + 1; if (scrollX > range) { scrollX = range; @@ -1724,10 +1715,10 @@ public class SeqCanvas extends JComponent implements ViewportListenerI { ViewportRanges ranges = av.getRanges(); - if (Math.abs(scrollX) > ranges.getViewportWidth()) + if (Math.abs(scrollX) >= ranges.getViewportWidth()) { /* - * shift of more than one view width is + * shift of one view width or more is * overcomplicated to handle in this method */ fastPaint = false; @@ -1918,10 +1909,17 @@ public class SeqCanvas extends JComponent implements ViewportListenerI while (y >= 0) { + /* + * shift 'widthToCopy' residues by 'positions' places to the right + */ gg.copyArea(copyFromLeftStart, y, widthToCopy, heightToCopy, positions * charWidth, 0); if (y > 0) { + /* + * copy 'positions' residue from the row above (right hand end) + * to this row's left hand end + */ gg.copyArea(copyFromRightStart, y - wrappedRepeatHeightPx, positions * charWidth, heightToCopy, -widthToCopy, wrappedRepeatHeightPx);