X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FSeqCanvas.java;h=571b593d29e70577322ac61d19e8c4f1f327a207;hb=c19d2a91ca05e052e3408bf5852d88eb5d0608f1;hp=ff576ec756e89084b7360f5ed2499fedb94908d7;hpb=ad15cff29620f960119f80176f1fd443da9f6763;p=jalview.git diff --git a/src/jalview/gui/SeqCanvas.java b/src/jalview/gui/SeqCanvas.java index ff576ec..571b593 100755 --- a/src/jalview/gui/SeqCanvas.java +++ b/src/jalview/gui/SeqCanvas.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) - * Copyright (C) $$Year-Rel$$ The Jalview Authors + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9.0b2) + * Copyright (C) 2015 The Jalview Authors * * This file is part of Jalview. * @@ -81,6 +81,7 @@ public class SeqCanvas extends JComponent public SeqCanvas(AlignmentPanel ap) { this.av = ap.av; + updateViewport(); fr = new FeatureRenderer(ap); sr = new SequenceRenderer(av); setLayout(new BorderLayout()); @@ -98,6 +99,14 @@ public class SeqCanvas extends JComponent return fr; } + int charHeight = 0, charWidth = 0; + + private void updateViewport() + { + charHeight = av.getCharHeight(); + charWidth = av.getCharWidth(); + } + /** * DOCUMENT ME! * @@ -110,12 +119,12 @@ public class SeqCanvas extends JComponent * @param ypos * DOCUMENT ME! */ - void drawNorthScale(Graphics g, int startx, int endx, int ypos) + private void drawNorthScale(Graphics g, int startx, int endx, int ypos) { + updateViewport(); int scalestartx = startx - (startx % 10) + 10; g.setColor(Color.black); - // NORTH SCALE for (int i = scalestartx; i < endx; i += 10) { @@ -125,13 +134,12 @@ public class SeqCanvas extends JComponent value = av.getColumnSelection().adjustForHiddenColumns(value); } - g.drawString(String.valueOf(value), (i - startx - 1) * av.charWidth, - ypos - (av.charHeight / 2)); + g.drawString(String.valueOf(value), (i - startx - 1) * charWidth, + ypos - (charHeight / 2)); - g.drawLine(((i - startx - 1) * av.charWidth) + (av.charWidth / 2), - (ypos + 2) - (av.charHeight / 2), - ((i - startx - 1) * av.charWidth) + (av.charWidth / 2), - ypos - 2); + g.drawLine(((i - startx - 1) * charWidth) + (charWidth / 2), + (ypos + 2) - (charHeight / 2), ((i - startx - 1) * charWidth) + + (charWidth / 2), ypos - 2); } } @@ -150,7 +158,7 @@ public class SeqCanvas extends JComponent void drawWestScale(Graphics g, int startx, int endx, int ypos) { FontMetrics fm = getFontMetrics(av.getFont()); - ypos += av.charHeight; + ypos += charHeight; if (av.hasHiddenColumns()) { @@ -188,9 +196,9 @@ public class SeqCanvas extends JComponent if (value != -1) { int x = LABEL_WEST - fm.stringWidth(String.valueOf(value)) - - av.charWidth / 2; - g.drawString(value + "", x, (ypos + (i * av.charHeight)) - - (av.charHeight / 5)); + - charWidth / 2; + g.drawString(value + "", x, (ypos + (i * charHeight)) + - (charHeight / 5)); } } } @@ -209,7 +217,7 @@ public class SeqCanvas extends JComponent */ void drawEastScale(Graphics g, int startx, int endx, int ypos) { - ypos += av.charHeight; + ypos += charHeight; if (av.hasHiddenColumns()) { @@ -240,8 +248,8 @@ public class SeqCanvas extends JComponent if (value != -1) { - g.drawString(String.valueOf(value), 0, (ypos + (i * av.charHeight)) - - (av.charHeight / 5)); + g.drawString(String.valueOf(value), 0, (ypos + (i * charHeight)) + - (charHeight / 5)); } } } @@ -265,10 +273,9 @@ public class SeqCanvas extends JComponent } fastpainting = true; fastPaint = true; - - gg.copyArea(horizontal * av.charWidth, vertical * av.charHeight, - imgWidth, imgHeight, -horizontal * av.charWidth, -vertical - * av.charHeight); + updateViewport(); + gg.copyArea(horizontal * charWidth, vertical * charHeight, imgWidth, + imgHeight, -horizontal * charWidth, -vertical * charHeight); int sr = av.startRes; int er = av.endRes; @@ -280,7 +287,7 @@ public class SeqCanvas extends JComponent if (horizontal > 0) // scrollbar pulled right, image to the left { er++; - transX = (er - sr - horizontal) * av.charWidth; + transX = (er - sr - horizontal) * charWidth; sr = er - horizontal; } else if (horizontal < 0) @@ -297,7 +304,7 @@ public class SeqCanvas extends JComponent } else { - transY = imgHeight - (vertical * av.charHeight); + transY = imgHeight - (vertical * charHeight); } } else if (vertical < 0) @@ -330,6 +337,7 @@ public class SeqCanvas extends JComponent // Set this to false to force a full panel paint public void paintComponent(Graphics g) { + updateViewport(); BufferedImage lcimg = img; // take reference since other threads may null // img and call later. super.paintComponent(g); @@ -348,8 +356,8 @@ public class SeqCanvas extends JComponent imgWidth = getWidth(); imgHeight = getHeight(); - imgWidth -= (imgWidth % av.charWidth); - imgHeight -= (imgHeight % av.charHeight); + imgWidth -= (imgWidth % charWidth); + imgHeight -= (imgHeight % charHeight); if ((imgWidth < 1) || (imgHeight < 1)) { @@ -412,17 +420,17 @@ public class SeqCanvas extends JComponent LABEL_EAST = 0; LABEL_WEST = 0; - if (av.scaleRightWrapped) + if (av.getScaleRightWrapped()) { LABEL_EAST = fm.stringWidth(getMask()); } - if (av.scaleLeftWrapped) + if (av.getScaleLeftWrapped()) { LABEL_WEST = fm.stringWidth(getMask()); } - return (cwidth - LABEL_EAST - LABEL_WEST) / av.charWidth; + return (cwidth - LABEL_EAST - LABEL_WEST) / charWidth; } /** @@ -466,28 +474,29 @@ public class SeqCanvas extends JComponent public void drawWrappedPanel(Graphics g, int canvasWidth, int canvasHeight, int startRes) { + updateViewport(); AlignmentI al = av.getAlignment(); FontMetrics fm = getFontMetrics(av.getFont()); - if (av.scaleRightWrapped) + if (av.getScaleRightWrapped()) { LABEL_EAST = fm.stringWidth(getMask()); } - if (av.scaleLeftWrapped) + if (av.getScaleLeftWrapped()) { LABEL_WEST = fm.stringWidth(getMask()); } - int hgap = av.charHeight; - if (av.scaleAboveWrapped) + int hgap = charHeight; + if (av.getScaleAboveWrapped()) { - hgap += av.charHeight; + hgap += charHeight; } - int cWidth = (canvasWidth - LABEL_EAST - LABEL_WEST) / av.charWidth; - int cHeight = av.getAlignment().getHeight() * av.charHeight; + int cWidth = (canvasWidth - LABEL_EAST - LABEL_WEST) / charWidth; + int cHeight = av.getAlignment().getHeight() * charHeight; av.setWrappedWidth(cWidth); @@ -514,12 +523,12 @@ public class SeqCanvas extends JComponent g.setFont(av.getFont()); g.setColor(Color.black); - if (av.scaleLeftWrapped) + if (av.getScaleLeftWrapped()) { drawWestScale(g, startRes, endx, ypos); } - if (av.scaleRightWrapped) + if (av.getScaleRightWrapped()) { g.translate(canvasWidth - LABEL_EAST, 0); drawEastScale(g, startRes, endx, ypos); @@ -528,12 +537,12 @@ public class SeqCanvas extends JComponent g.translate(LABEL_WEST, 0); - if (av.scaleAboveWrapped) + if (av.getScaleAboveWrapped()) { drawNorthScale(g, startRes, endx, ypos); } - if (av.hasHiddenColumns() && av.showHiddenMarkers) + if (av.hasHiddenColumns() && av.getShowHiddenMarkers()) { g.setColor(Color.blue); int res; @@ -548,12 +557,12 @@ public class SeqCanvas extends JComponent continue; } - gg.fillPolygon(new int[] - { res * av.charWidth - av.charHeight / 4, - res * av.charWidth + av.charHeight / 4, res * av.charWidth }, - new int[] - { ypos - (av.charHeight / 2), ypos - (av.charHeight / 2), - ypos - (av.charHeight / 2) + 8 }, 3); + gg.fillPolygon( + new int[] { res * charWidth - charHeight / 4, + res * charWidth + charHeight / 4, res * charWidth }, + new int[] { ypos - (charHeight / 2), + ypos - (charHeight / 2), ypos - (charHeight / 2) + 8 }, + 3); } } @@ -564,11 +573,11 @@ public class SeqCanvas extends JComponent if (clip == null) { - g.setClip(0, 0, cWidth * av.charWidth, canvasHeight); + g.setClip(0, 0, cWidth * charWidth, canvasHeight); } else { - g.setClip(0, (int) clip.getBounds().getY(), cWidth * av.charWidth, + g.setClip(0, (int) clip.getBounds().getY(), cWidth * charWidth, (int) clip.getBounds().getHeight()); } @@ -582,8 +591,8 @@ public class SeqCanvas extends JComponent annotations = new AnnotationPanel(av); } - annotations.renderer.drawComponent(annotations, av, g, - -1, startRes, endx + 1); + annotations.renderer.drawComponent(annotations, av, g, -1, + startRes, endx + 1); g.translate(0, -cHeight - ypos - 3); } g.setClip(clip); @@ -629,9 +638,9 @@ public class SeqCanvas extends JComponent * DOCUMENT ME! */ public void drawPanel(Graphics g1, int startRes, int endRes, - int startSeq, - int endSeq, int offset) + int startSeq, int endSeq, int offset) { + updateViewport(); if (!av.hasHiddenColumns()) { draw(g1, startRes, endRes, startSeq, endSeq, offset); @@ -644,9 +653,8 @@ public class SeqCanvas extends JComponent int blockStart = startRes; int blockEnd = endRes; - for (int i = 0; regions != null && i < regions.size(); i++) + for (int[] region : regions) { - int[] region = regions.get(i); int hideStart = region[0]; int hideEnd = region[1]; @@ -658,7 +666,7 @@ public class SeqCanvas extends JComponent blockEnd = hideStart - 1; - g1.translate(screenY * av.charWidth, 0); + g1.translate(screenY * charWidth, 0); draw(g1, blockStart, blockEnd, startSeq, endSeq, offset); @@ -666,12 +674,12 @@ public class SeqCanvas extends JComponent { g1.setColor(Color.blue); - g1.drawLine((blockEnd - blockStart + 1) * av.charWidth - 1, - 0 + offset, (blockEnd - blockStart + 1) * av.charWidth - - 1, (endSeq - startSeq) * av.charHeight + offset); + g1.drawLine((blockEnd - blockStart + 1) * charWidth - 1, + 0 + offset, (blockEnd - blockStart + 1) * charWidth - 1, + (endSeq - startSeq) * charHeight + offset); } - g1.translate(-screenY * av.charWidth, 0); + g1.translate(-screenY * charWidth, 0); screenY += blockEnd - blockStart + 1; blockStart = hideEnd + 1; } @@ -679,10 +687,10 @@ public class SeqCanvas extends JComponent if (screenY <= (endRes - startRes)) { blockEnd = blockStart + (endRes - startRes) - screenY; - g1.translate(screenY * av.charWidth, 0); + g1.translate(screenY * charWidth, 0); draw(g1, blockStart, blockEnd, startSeq, endSeq, offset); - g1.translate(-screenY * av.charWidth, 0); + g1.translate(-screenY * charWidth, 0); } } @@ -690,11 +698,11 @@ public class SeqCanvas extends JComponent // int startRes, int endRes, int startSeq, int endSeq, int x, int y, // int x1, int x2, int y1, int y2, int startx, int starty, - void draw(Graphics g, int startRes, int endRes, int startSeq, int endSeq, - int offset) + private void draw(Graphics g, int startRes, int endRes, int startSeq, + int endSeq, int offset) { g.setFont(av.getFont()); - sr.prepare(g, av.renderGaps); + sr.prepare(g, av.isRenderGaps()); SequenceI nextSeq; @@ -710,12 +718,12 @@ public class SeqCanvas extends JComponent continue; } sr.drawSequence(nextSeq, av.getAlignment().findAllGroups(nextSeq), - startRes, endRes, offset + ((i - startSeq) * av.charHeight)); + startRes, endRes, offset + ((i - startSeq) * charHeight)); if (av.isShowSequenceFeatures()) { fr.drawSequence(g, nextSeq, startRes, endRes, offset - + ((i - startSeq) * av.charHeight)); + + ((i - startSeq) * charHeight)); } // / Highlight search Results once all sequences have been drawn @@ -730,8 +738,8 @@ public class SeqCanvas extends JComponent { sr.drawHighlightedText(nextSeq, visibleResults[r], visibleResults[r + 1], (visibleResults[r] - startRes) - * av.charWidth, offset - + ((i - startSeq) * av.charHeight)); + * charWidth, offset + + ((i - startSeq) * charHeight)); } } } @@ -739,9 +747,8 @@ public class SeqCanvas extends JComponent if (av.cursorMode && cursorY == i && cursorX >= startRes && cursorX <= endRes) { - sr.drawCursor(nextSeq, cursorX, - (cursorX - startRes) * av.charWidth, offset - + ((i - startSeq) * av.charHeight)); + sr.drawCursor(nextSeq, cursorX, (cursorX - startRes) * charWidth, + offset + ((i - startSeq) * charHeight)); } } @@ -767,7 +774,7 @@ public class SeqCanvas extends JComponent int sy = -1; int ex = -1; int groupIndex = -1; - int visWidth = (endRes - startRes + 1) * av.charWidth; + int visWidth = (endRes - startRes + 1) * charWidth; if ((group == null) && (av.getAlignment().getGroups().size() > 0)) { @@ -787,16 +794,16 @@ public class SeqCanvas extends JComponent for (i = startSeq; i < endSeq; i++) { - sx = (group.getStartRes() - startRes) * av.charWidth; - sy = offset + ((i - startSeq) * av.charHeight); - ex = (((group.getEndRes() + 1) - group.getStartRes()) * av.charWidth) - 1; + sx = (group.getStartRes() - startRes) * charWidth; + sy = offset + ((i - startSeq) * charHeight); + ex = (((group.getEndRes() + 1) - group.getStartRes()) * charWidth) - 1; if (sx + ex < 0 || sx > visWidth) { continue; } - if ((sx <= (endRes - startRes) * av.charWidth) + if ((sx <= (endRes - startRes) * charWidth) && group.getSequences(null).contains( av.getAlignment().getSequenceAt(i))) { @@ -804,7 +811,7 @@ public class SeqCanvas extends JComponent && !group.getSequences(null).contains( av.getAlignment().getSequenceAt(i + 1))) { - bottom = sy + av.charHeight; + bottom = sy + charHeight; } if (!inGroup) @@ -822,8 +829,8 @@ public class SeqCanvas extends JComponent if (group == av.getSelectionGroup()) { g.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, - BasicStroke.JOIN_ROUND, 3f, new float[] - { 5f, 3f }, 0f)); + BasicStroke.JOIN_ROUND, 3f, new float[] { 5f, 3f }, + 0f)); g.setColor(Color.RED); } else @@ -858,9 +865,9 @@ public class SeqCanvas extends JComponent ex = visWidth; } - else if (sx + ex >= (endRes - startRes + 1) * av.charWidth) + else if (sx + ex >= (endRes - startRes + 1) * charWidth) { - ex = (endRes - startRes + 1) * av.charWidth; + ex = (endRes - startRes + 1) * charWidth; } if (top != -1) @@ -882,7 +889,7 @@ public class SeqCanvas extends JComponent if (inGroup) { - sy = offset + ((i - startSeq) * av.charHeight); + sy = offset + ((i - startSeq) * charHeight); if (sx >= 0 && sx < visWidth) { g.drawLine(sx, oldY, sx, sy); @@ -903,9 +910,9 @@ public class SeqCanvas extends JComponent { ex = visWidth; } - else if (sx + ex >= (endRes - startRes + 1) * av.charWidth) + else if (sx + ex >= (endRes - startRes + 1) * charWidth) { - ex = (endRes - startRes + 1) * av.charWidth; + ex = (endRes - startRes + 1) * charWidth; } if (top != -1) @@ -932,8 +939,7 @@ public class SeqCanvas extends JComponent break; } - group = av.getAlignment().getGroups() - .get(groupIndex); + group = av.getAlignment().getGroups().get(groupIndex); } while (groupIndex < av.getAlignment().getGroups().size());