X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FSeqCanvas.java;h=bf54c667b4177c3f7341bb26de413e671b1e705f;hb=be32c14cd8e48fe0a207cd7030cb9cd46f894678;hp=eaa3a501251888160f22220e98b25ebb348ba858;hpb=10e637daad8983c41db8679baabea5563d7371f4;p=jalview.git diff --git a/src/jalview/appletgui/SeqCanvas.java b/src/jalview/appletgui/SeqCanvas.java index eaa3a50..bf54c66 100755 --- a/src/jalview/appletgui/SeqCanvas.java +++ b/src/jalview/appletgui/SeqCanvas.java @@ -61,6 +61,15 @@ public class SeqCanvas extends Panel fr = new FeatureRenderer(av); sr = new SequenceRenderer(av); PaintRefresher.Register(this, av.getSequenceSetId()); + updateViewport(); + } + + int avcharHeight = 0, avcharWidth = 0; + + private void updateViewport() + { + avcharHeight = av.getCharHeight(); + avcharWidth = av.getCharWidth(); } public AlignViewport getViewport() @@ -78,7 +87,7 @@ public class SeqCanvas extends Panel return sr; } - void drawNorthScale(Graphics g, int startx, int endx, int ypos) + private void drawNorthScale(Graphics g, int startx, int endx, int ypos) { int scalestartx = startx - startx % 10 + 10; @@ -93,20 +102,20 @@ public class SeqCanvas extends Panel 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) * avcharWidth, + ypos - (avcharHeight / 2)); - g.drawLine(((i - startx - 1) * av.charWidth) + (av.charWidth / 2), - (ypos + 2) - (av.charHeight / 2), - ((i - startx - 1) * av.charWidth) + (av.charWidth / 2), + g.drawLine(((i - startx - 1) * avcharWidth) + (avcharWidth / 2), + (ypos + 2) - (avcharHeight / 2), + ((i - startx - 1) * avcharWidth) + (avcharWidth / 2), ypos - 2); } } - void drawWestScale(Graphics g, int startx, int endx, int ypos) + private void drawWestScale(Graphics g, int startx, int endx, int ypos) { FontMetrics fm = getFontMetrics(av.getFont()); - ypos += av.charHeight; + ypos += avcharHeight; if (av.hasHiddenColumns()) { startx = av.getColumnSelection().adjustForHiddenColumns(startx); @@ -143,16 +152,16 @@ public class SeqCanvas extends Panel 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)); + - avcharWidth / 2; + g.drawString(value + "", x, (ypos + (i * avcharHeight)) + - (avcharHeight / 5)); } } } - void drawEastScale(Graphics g, int startx, int endx, int ypos) + private void drawEastScale(Graphics g, int startx, int endx, int ypos) { - ypos += av.charHeight; + ypos += avcharHeight; if (av.hasHiddenColumns()) { @@ -183,8 +192,8 @@ public class SeqCanvas extends Panel if (value != -1) { - g.drawString(String.valueOf(value), 0, (ypos + (i * av.charHeight)) - - (av.charHeight / 5)); + g.drawString(String.valueOf(value), 0, (ypos + (i * avcharHeight)) + - (avcharHeight / 5)); } } } @@ -198,6 +207,8 @@ public class SeqCanvas extends Panel return; } + updateViewport(); + // Its possible on certain browsers that the call to fastpaint // is faster than it can paint, so this check here catches // this possibility @@ -209,16 +220,16 @@ public class SeqCanvas extends Panel lastsr = av.startRes; fastPaint = true; - gg.copyArea(horizontal * av.charWidth, vertical * av.charHeight, - imgWidth - horizontal * av.charWidth, imgHeight - vertical - * av.charHeight, -horizontal * av.charWidth, -vertical - * av.charHeight); + gg.copyArea(horizontal * avcharWidth, vertical * avcharHeight, imgWidth + - horizontal * avcharWidth, + imgHeight - vertical * avcharHeight, -horizontal * avcharWidth, + -vertical * avcharHeight); int sr = av.startRes, er = av.endRes, ss = av.startSeq, es = av.endSeq, transX = 0, transY = 0; if (horizontal > 0) // scrollbar pulled right, image to the left { - transX = (er - sr - horizontal) * av.charWidth; + transX = (er - sr - horizontal) * avcharWidth; sr = er - horizontal; } else if (horizontal < 0) @@ -235,7 +246,7 @@ public class SeqCanvas extends Panel } else { - transY = imgHeight - vertical * av.charHeight; + transY = imgHeight - vertical * avcharHeight; } } else if (vertical < 0) @@ -269,6 +280,7 @@ public class SeqCanvas extends Panel paint(g); } + @Override public void paint(Graphics g) { @@ -288,12 +300,13 @@ public class SeqCanvas extends Panel return; } + updateViewport(); // this draws the whole of the alignment imgWidth = this.getSize().width; imgHeight = this.getSize().height; - imgWidth -= imgWidth % av.charWidth; - imgHeight -= imgHeight % av.charHeight; + imgWidth -= imgWidth % avcharWidth; + imgHeight -= imgHeight % avcharHeight; if (imgWidth < 1 || imgHeight < 1) { @@ -328,24 +341,24 @@ public class SeqCanvas extends Panel public int getWrappedCanvasWidth(int cwidth) { - cwidth -= cwidth % av.charWidth; + cwidth -= cwidth % av.getCharWidth(); FontMetrics fm = getFontMetrics(av.getFont()); 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) / av.getCharWidth(); } /** @@ -375,31 +388,31 @@ public class SeqCanvas extends Panel return mask; } - public void drawWrappedPanel(Graphics g, int canvasWidth, + private void drawWrappedPanel(Graphics g, int canvasWidth, int canvasHeight, int startRes) { 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 = avcharHeight; + if (av.getScaleAboveWrapped()) { - hgap += av.charHeight; + hgap += avcharHeight; } - int cWidth = (canvasWidth - LABEL_EAST - LABEL_WEST) / av.charWidth; - int cHeight = av.getAlignment().getHeight() * av.charHeight; + int cWidth = (canvasWidth - LABEL_EAST - LABEL_WEST) / avcharWidth; + int cHeight = av.getAlignment().getHeight() * avcharHeight; av.setWrappedWidth(cWidth); @@ -426,12 +439,12 @@ public class SeqCanvas extends Panel 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); @@ -440,11 +453,11 @@ public class SeqCanvas extends Panel 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; @@ -460,24 +473,24 @@ public class SeqCanvas extends Panel } gg.fillPolygon(new int[] - { res * av.charWidth - av.charHeight / 4, - res * av.charWidth + av.charHeight / 4, res * av.charWidth }, + { res * avcharWidth - avcharHeight / 4, + res * avcharWidth + avcharHeight / 4, res * avcharWidth }, new int[] - { ypos - (av.charHeight / 2), ypos - (av.charHeight / 2), - ypos - (av.charHeight / 2) + 8 }, 3); + { ypos - (avcharHeight / 2), ypos - (avcharHeight / 2), + ypos - (avcharHeight / 2) + 8 }, 3); } } if (g.getClip() == null) { - g.setClip(0, 0, cWidth * av.charWidth, canvasHeight); + g.setClip(0, 0, cWidth * avcharWidth, canvasHeight); } drawPanel(g, startRes, endx, 0, al.getHeight(), ypos); g.setClip(null); - if (av.showAnnotation) + if (av.isShowAnnotation()) { g.translate(0, cHeight + ypos + 4); if (annotations == null) @@ -501,7 +514,7 @@ public class SeqCanvas extends Panel int getAnnotationHeight() { - if (!av.showAnnotation) + if (!av.isShowAnnotation()) { return 0; } @@ -514,7 +527,8 @@ public class SeqCanvas extends Panel return annotations.adjustPanelHeight(); } - void drawPanel(Graphics g1, int startRes, int endRes, int startSeq, + private void drawPanel(Graphics g1, int startRes, int endRes, + int startSeq, int endSeq, int offset) { @@ -545,20 +559,20 @@ public class SeqCanvas extends Panel blockEnd = hideStart - 1; - g1.translate(screenY * av.charWidth, 0); + g1.translate(screenY * avcharWidth, 0); draw(g1, blockStart, blockEnd, startSeq, endSeq, offset); if (av.getShowHiddenMarkers()) { g1.setColor(Color.blue); - g1.drawLine((blockEnd - blockStart + 1) * av.charWidth - 1, - 0 + offset, (blockEnd - blockStart + 1) * av.charWidth - - 1, (endSeq - startSeq) * av.charHeight + g1.drawLine((blockEnd - blockStart + 1) * avcharWidth - 1, + 0 + offset, (blockEnd - blockStart + 1) * avcharWidth + - 1, (endSeq - startSeq) * avcharHeight + offset); } - g1.translate(-screenY * av.charWidth, 0); + g1.translate(-screenY * avcharWidth, 0); screenY += blockEnd - blockStart + 1; blockStart = hideEnd + 1; } @@ -566,10 +580,10 @@ public class SeqCanvas extends Panel if (screenY <= (endRes - startRes)) { blockEnd = blockStart + (endRes - startRes) - screenY; - g1.translate(screenY * av.charWidth, 0); + g1.translate(screenY * avcharWidth, 0); draw(g1, blockStart, blockEnd, startSeq, endSeq, offset); - g1.translate(-screenY * av.charWidth, 0); + g1.translate(-screenY * avcharWidth, 0); } } @@ -581,8 +595,8 @@ public class SeqCanvas extends Panel int offset) { g.setFont(av.getFont()); - sr.prepare(g, av.renderGaps); - + sr.prepare(g, av.isRenderGaps()); + updateViewport(); SequenceI nextSeq; // / First draw the sequences @@ -597,12 +611,12 @@ public class SeqCanvas extends Panel } sr.drawSequence(nextSeq, av.getAlignment().findAllGroups(nextSeq), - startRes, endRes, offset + ((i - startSeq) * av.charHeight)); + startRes, endRes, offset + ((i - startSeq) * avcharHeight)); if (av.isShowSequenceFeatures()) { fr.drawSequence(g, nextSeq, startRes, endRes, offset - + ((i - startSeq) * av.charHeight)); + + ((i - startSeq) * avcharHeight)); } // / Highlight search Results once all sequences have been drawn @@ -617,8 +631,8 @@ public class SeqCanvas extends Panel { sr.drawHighlightedText(nextSeq, visibleResults[r], visibleResults[r + 1], (visibleResults[r] - startRes) - * av.charWidth, offset - + ((i - startSeq) * av.charHeight)); + * avcharWidth, offset + + ((i - startSeq) * avcharHeight)); } } } @@ -626,9 +640,8 @@ public class SeqCanvas extends Panel 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) * avcharWidth, + offset + ((i - startSeq) * avcharHeight)); } } @@ -640,7 +653,7 @@ public class SeqCanvas extends Panel } - void drawGroupsBoundaries(Graphics g, int startRes, int endRes, + private void drawGroupsBoundaries(Graphics g, int startRes, int endRes, int startSeq, int endSeq, int offset) { // @@ -673,16 +686,16 @@ public class SeqCanvas extends Panel 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) * avcharWidth; + sy = offset + ((i - startSeq) * avcharHeight); + ex = (((group.getEndRes() + 1) - group.getStartRes()) * avcharWidth) - 1; if (sx + ex < 0 || sx > imgWidth) { continue; } - if ((sx <= (endRes - startRes) * av.charWidth) + if ((sx <= (endRes - startRes) * avcharWidth) && group.getSequences(null).contains( av.getAlignment().getSequenceAt(i))) { @@ -691,7 +704,7 @@ public class SeqCanvas extends Panel .contains( av.getAlignment().getSequenceAt(i + 1)))) { - bottom = sy + av.charHeight; + bottom = sy + avcharHeight; } if (!inGroup) @@ -741,9 +754,9 @@ public class SeqCanvas extends Panel ex = imgWidth; } - else if (sx + ex >= (endRes - startRes + 1) * av.charWidth) + else if (sx + ex >= (endRes - startRes + 1) * avcharWidth) { - ex = (endRes - startRes + 1) * av.charWidth; + ex = (endRes - startRes + 1) * avcharWidth; } if (top != -1) @@ -765,7 +778,7 @@ public class SeqCanvas extends Panel if (inGroup) { - sy = offset + ((i - startSeq) * av.charHeight); + sy = offset + ((i - startSeq) * avcharHeight); if (sx >= 0 && sx < imgWidth) { g.drawLine(sx, oldY, sx, sy); @@ -786,9 +799,9 @@ public class SeqCanvas extends Panel { ex = imgWidth; } - else if (sx + ex >= (endRes - startRes + 1) * av.charWidth) + else if (sx + ex >= (endRes - startRes + 1) * avcharWidth) { - ex = (endRes - startRes + 1) * av.charWidth; + ex = (endRes - startRes + 1) * avcharWidth; } if (top != -1)