X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FSeqCanvas.java;h=d15cdcf376b50ba2fe0d3c08738935304c85d260;hb=efba321f20b819819c0b1cd9c9133d9d1a2ab314;hp=b27208ae78cd56cc78b9667a8ffd6b8df6e5fb32;hpb=0b573ed90b14079f7326281f50c0c9cffdace586;p=jalview.git diff --git a/src/jalview/gui/SeqCanvas.java b/src/jalview/gui/SeqCanvas.java index b27208a..d15cdcf 100755 --- a/src/jalview/gui/SeqCanvas.java +++ b/src/jalview/gui/SeqCanvas.java @@ -20,18 +20,6 @@ */ package jalview.gui; -import jalview.datamodel.AlignmentI; -import jalview.datamodel.HiddenColumns; -import jalview.datamodel.SearchResultsI; -import jalview.datamodel.SequenceGroup; -import jalview.datamodel.SequenceI; -import jalview.datamodel.VisibleContigsIterator; -import jalview.renderer.ScaleRenderer; -import jalview.renderer.ScaleRenderer.ScaleMark; -import jalview.util.Comparison; -import jalview.viewmodel.ViewportListenerI; -import jalview.viewmodel.ViewportRanges; - import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Color; @@ -47,6 +35,18 @@ import java.util.List; import javax.swing.JPanel; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.HiddenColumns; +import jalview.datamodel.SearchResultsI; +import jalview.datamodel.SequenceGroup; +import jalview.datamodel.SequenceI; +import jalview.datamodel.VisibleContigsIterator; +import jalview.renderer.ScaleRenderer; +import jalview.renderer.ScaleRenderer.ScaleMark; +import jalview.util.Comparison; +import jalview.viewmodel.ViewportListenerI; +import jalview.viewmodel.ViewportRanges; + /** * The Swing component on which the alignment sequences, and annotations (if * shown), are drawn. This includes scales above, left and right (if shown) in @@ -57,7 +57,8 @@ import javax.swing.JPanel; public class SeqCanvas extends JPanel implements ViewportListenerI { /** - * vertical gap in pixels 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; @@ -95,7 +96,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI private int wrappedVisibleWidths; // number of wrapped widths displayed // Don't do this! Graphics handles are supposed to be transient - //private Graphics2D gg; + // private Graphics2D gg; /** * Creates a new SeqCanvas object. @@ -116,7 +117,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI public SequenceRenderer getSequenceRenderer() { - return seqRdr; + return seqRdr; } public FeatureRenderer getFeatureRenderer() @@ -202,7 +203,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI int yPos = ypos + charHeight; int startX = startx; int endX = endx; - + if (av.hasHiddenColumns()) { HiddenColumns hiddenColumns = av.getAlignment().getHiddenColumns(); @@ -238,7 +239,6 @@ public class SeqCanvas extends JPanel implements ViewportListenerI } } - /* * white fill the space for the scale */ @@ -343,7 +343,6 @@ public class SeqCanvas extends JPanel implements ViewportListenerI } } - // System.err.println(">>> FastPaint to " + transX + " " + transY + " " // + horizontal + " " + vertical + " " + startRes + " " + endRes // + " " + startSeq + " " + endSeq); @@ -456,7 +455,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI if (av.getWrapAlignment()) { - drawWrappedPanel(gg, width, height, ranges.getStartRes()); + drawWrappedPanel(gg, getWidth(), getHeight(), ranges.getStartRes()); } else { @@ -474,7 +473,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI drawCursor(g, startRes, endRes, startSeq, endSeq); } } - + /** * Draw an alignment panel for printing * @@ -494,8 +493,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI { drawPanel(g1, startRes, endRes, startSeq, endSeq, 0); - drawSelectionGroup((Graphics2D) g1, startRes, endRes, - startSeq, endSeq); + drawSelectionGroup((Graphics2D) g1, startRes, endRes, startSeq, endSeq); } /** @@ -519,7 +517,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI if (group != null) { drawWrappedSelection((Graphics2D) g, group, canvasWidth, canvasHeight, - startRes); + startRes); } } @@ -539,7 +537,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI FontMetrics fm = getFontMetrics(av.getFont()); int labelWidth = 0; - + if (av.getScaleRightWrapped() || av.getScaleLeftWrapped()) { labelWidth = getLabelWidth(fm); @@ -623,8 +621,8 @@ public class SeqCanvas extends JPanel implements ViewportListenerI int currentWidth = 0; while ((currentWidth < wrappedVisibleWidths) && (start < maxWidth)) { - int endColumn = Math - .min(maxWidth, start + wrappedWidthInResidues - 1); + int endColumn = Math.min(maxWidth, + start + wrappedWidthInResidues - 1); drawWrappedWidth(g, ypos, start, endColumn, canvasHeight); ypos += wrappedRepeatHeightPx; start += wrappedWidthInResidues; @@ -664,8 +662,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI * - start with space above plus sequences */ wrappedRepeatHeightPx = wrappedSpaceAboveAlignment; - wrappedRepeatHeightPx += av.getAlignment().getHeight() - * charHeight; + wrappedRepeatHeightPx += av.getAlignment().getHeight() * charHeight; /* * add annotations panel height if shown @@ -693,7 +690,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI * compute width in residues; this also sets East and West label widths */ int wrappedWidthInResidues = getWrappedCanvasWidth(canvasWidth); - + av.setWrappedWidth(wrappedWidthInResidues); // update model accordingly /* * limit visibleWidths to not exceed width of alignment */ @@ -736,7 +733,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI int charWidth = av.getCharWidth(); int xOffset = labelWidthWest + ((startColumn - ranges.getStartRes()) % viewportWidth) - * charWidth; + * charWidth; g.translate(xOffset, 0); @@ -803,7 +800,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI if (av.getScaleRightWrapped()) { int x = labelWidthWest + viewportWidth * charWidth; - + g.translate(x, 0); drawVerticalScale(g, startCol, endColumn, ypos, false); g.translate(-x, 0); @@ -815,8 +812,9 @@ public class SeqCanvas extends JPanel implements ViewportListenerI */ g.translate(labelWidthWest, 0); g.setColor(Color.white); - g.fillRect(0, ypos - wrappedSpaceAboveAlignment, viewportWidth - * charWidth + labelWidthWest, wrappedSpaceAboveAlignment); + g.fillRect(0, ypos - wrappedSpaceAboveAlignment, + viewportWidth * charWidth + labelWidthWest, + wrappedSpaceAboveAlignment); g.setColor(Color.black); g.translate(-labelWidthWest, 0); @@ -887,8 +885,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI * Draw a selection group over a wrapped alignment */ private void drawWrappedSelection(Graphics2D g, SequenceGroup group, - int canvasWidth, - int canvasHeight, int startRes) + int canvasWidth, int canvasHeight, int startRes) { // chop the wrapped alignment extent up into panel-sized blocks and treat // each block as if it were a block from an unwrapped alignment @@ -916,8 +913,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI g.translate(labelWidthWest, 0); drawUnwrappedSelection(g, group, startx, endx, 0, - av.getAlignment().getHeight() - 1, - ypos); + av.getAlignment().getHeight() - 1, ypos); g.translate(-labelWidthWest, 0); ypos += wrappedRepeatHeightPx; @@ -928,8 +924,8 @@ public class SeqCanvas extends JPanel implements ViewportListenerI } /** - * Answers zero if annotations are not shown, otherwise recalculates and answers - * the total height of all annotation rows in pixels + * Answers zero if annotations are not shown, otherwise recalculates and + * answers the total height of all annotation rows in pixels * * @return */ @@ -1190,8 +1186,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI * the cursor drawn on it, if any */ private void drawCursor(Graphics g, int startRes, int endRes, - int startSeq, - int endSeq) + int startSeq, int endSeq) { // convert the cursorY into a position on the visible alignment int cursor_ypos = cursorY; @@ -1262,7 +1257,6 @@ public class SeqCanvas extends JPanel implements ViewportListenerI } } - /** * Draw a selection group over an unwrapped alignment * @@ -1285,7 +1279,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI int startRes, int endRes, int startSeq, int endSeq, int offset) { int charWidth = av.getCharWidth(); - + if (!av.hasHiddenColumns()) { drawPartialGroupOutline(g, group, startRes, endRes, startSeq, endSeq, @@ -1308,8 +1302,8 @@ public class SeqCanvas extends JPanel implements ViewportListenerI blockStart = region[0]; g.translate(screenY * charWidth, 0); - drawPartialGroupOutline(g, group, - blockStart, blockEnd, startSeq, endSeq, offset); + drawPartialGroupOutline(g, group, blockStart, blockEnd, startSeq, + endSeq, offset); g.translate(-screenY * charWidth, 0); screenY += blockEnd - blockStart + 1; @@ -1478,7 +1472,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI g.drawLine(sx + xwidth, oldY, sx + xwidth, sy); } } - + /** * Highlights search results in the visible region by rendering as white text * on a black background. Any previous highlighting is removed. Answers true @@ -1494,7 +1488,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI return highlightSearchResults(results, false); } - + /** * Highlights search results in the visible region by rendering as white text * on a black background. Any previous highlighting is removed. Answers true @@ -1652,7 +1646,8 @@ public class SeqCanvas extends JPanel implements ViewportListenerI { firstCol = alignment.getHiddenColumns() .absoluteToVisibleColumn(firstCol); - lastCol = alignment.getHiddenColumns().absoluteToVisibleColumn(lastCol); + lastCol = alignment.getHiddenColumns() + .absoluteToVisibleColumn(lastCol); } int transX = (firstCol - ranges.getStartRes()) * av.getCharWidth(); int transY = (firstSeq - ranges.getStartSeq()) * av.getCharHeight(); @@ -1792,9 +1787,9 @@ public class SeqCanvas extends JPanel implements ViewportListenerI try { - + Graphics gg = img.getGraphics(); - + calculateWrappedGeometry(getWidth(), getHeight()); /* @@ -1810,8 +1805,8 @@ public class SeqCanvas extends JPanel implements ViewportListenerI if (scrollX < 0) { int startRes = ranges.getStartRes(); - drawWrappedWidth(gg, wrappedSpaceAboveAlignment, startRes, startRes - - scrollX - 1, getHeight()); + drawWrappedWidth(gg, wrappedSpaceAboveAlignment, startRes, + startRes - scrollX - 1, getHeight()); } else { @@ -1824,7 +1819,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI drawWrappedDecorators(gg, ranges.getStartRes()); gg.dispose(); - + repaint(); } finally { @@ -1849,7 +1844,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI } Graphics gg = img.getGraphics(); - + ViewportRanges ranges = av.getRanges(); int viewportWidth = ranges.getViewportWidth(); int charWidth = av.getCharWidth(); @@ -1860,7 +1855,8 @@ public class SeqCanvas extends JPanel implements ViewportListenerI */ int visibleWidths = wrappedVisibleWidths; int canvasHeight = getHeight(); - boolean lastWidthPartHeight = (wrappedVisibleWidths * wrappedRepeatHeightPx) > canvasHeight; + boolean lastWidthPartHeight = (wrappedVisibleWidths + * wrappedRepeatHeightPx) > canvasHeight; if (lastWidthPartHeight) { @@ -1876,16 +1872,15 @@ public class SeqCanvas extends JPanel implements ViewportListenerI /* * white fill first to erase annotations */ - - + gg.translate(xOffset, 0); gg.setColor(Color.white); - gg.fillRect(labelWidthWest, ypos, - (endRes - startRes + 1) * charWidth, wrappedRepeatHeightPx); + gg.fillRect(labelWidthWest, ypos, (endRes - startRes + 1) * charWidth, + wrappedRepeatHeightPx); gg.translate(-xOffset, 0); drawWrappedWidth(gg, ypos, startRes, endRes, canvasHeight); - + } /* @@ -1930,7 +1925,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI gg.fillRect(0, canvasHeight - heightBelow, getWidth(), heightBelow); } gg.dispose(); - } + } /** * Shifts the visible alignment by the specified number of columns - left if @@ -2018,8 +2013,8 @@ public class SeqCanvas extends JPanel implements ViewportListenerI if (y + wrappedRepeatHeightPx < canvasHeight - wrappedRepeatHeightPx && (xpos + viewportWidth <= xMax)) { - gg.copyArea(labelWidthWest, y + wrappedRepeatHeightPx, -positions - * charWidth, heightToCopy, widthToCopy, + gg.copyArea(labelWidthWest, y + wrappedRepeatHeightPx, + -positions * charWidth, heightToCopy, widthToCopy, -wrappedRepeatHeightPx); } y += wrappedRepeatHeightPx; @@ -2029,7 +2024,6 @@ public class SeqCanvas extends JPanel implements ViewportListenerI gg.dispose(); } - /** * Redraws any positions in the search results in the visible region of a * wrapped alignment. Any highlights are drawn depending on the search results @@ -2063,8 +2057,8 @@ public class SeqCanvas extends JPanel implements ViewportListenerI } int firstVisibleColumn = ranges.getStartRes(); - int lastVisibleColumn = ranges.getStartRes() + repeats - * ranges.getViewportWidth() - 1; + int lastVisibleColumn = ranges.getStartRes() + + repeats * ranges.getViewportWidth() - 1; AlignmentI alignment = av.getAlignment(); if (av.hasHiddenColumns()) @@ -2077,7 +2071,6 @@ public class SeqCanvas extends JPanel implements ViewportListenerI int gapHeight = charHeight * (av.getScaleAboveWrapped() ? 2 : 1); - Graphics gg = img.getGraphics(); for (int seqNo = ranges.getStartSeq(); seqNo <= ranges @@ -2121,8 +2114,8 @@ public class SeqCanvas extends JPanel implements ViewportListenerI * transX: offset from left edge of canvas to residue position */ int transX = labelWidthWest - + ((displayColumn - ranges.getStartRes()) % wrappedWidth) - * av.getCharWidth(); + + ((displayColumn - ranges.getStartRes()) + % wrappedWidth) * av.getCharWidth(); /* * transY: offset from top edge of canvas to residue position @@ -2149,7 +2142,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI } } } - + gg.dispose(); return matchFound;