X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=inline;f=src%2Fjalview%2Fgui%2FSeqCanvas.java;h=5165aeae93f56e7d59856b7fbd17d637136066d6;hb=1e9f882c52f5b95d198c42973e7b2b1ce2b420df;hp=0d27354dd8a2ef5054ff71459834e4c73d7ecb32;hpb=51ca42a8c4525c6871e3c8ea529b6cb8a59bb10f;p=jalview.git diff --git a/src/jalview/gui/SeqCanvas.java b/src/jalview/gui/SeqCanvas.java index 0d27354..5165aea 100755 --- a/src/jalview/gui/SeqCanvas.java +++ b/src/jalview/gui/SeqCanvas.java @@ -75,7 +75,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI private final SequenceRenderer seqRdr; - boolean fastPaint = false; + private boolean fastPaint = false; private boolean fastpainting = false; @@ -371,19 +371,20 @@ public class SeqCanvas extends JPanel implements ViewportListenerI @Override public void paintComponent(Graphics g) { - + if (av.getAlignPanel().getHoldRepaint()) + { + return; + } int charHeight = av.getCharHeight(); int charWidth = av.getCharWidth(); - int width = getWidth(); - int height = getHeight(); - - width -= (width % charWidth); - height -= (height % charHeight); + int availWidth = getWidth(); + int availHeight = getHeight(); - // BH 2019 can't possibly fastPaint if either width or height is 0 + availWidth -= (availWidth % charWidth); + availHeight -= (availHeight % charHeight); - if (width == 0 || height == 0) + if (availWidth == 0 || availHeight == 0) { return; } @@ -394,28 +395,6 @@ public class SeqCanvas extends JPanel implements ViewportListenerI int endRes = ranges.getEndRes(); int endSeq = ranges.getEndSeq(); - // [JAL-3226] problem that JavaScript (or Java) may consolidate multiple - // repaint() requests in unpredictable ways. In this case, the issue was - // that in response to a CTRL-C/CTRL-V paste request, in Java a fast - // repaint request preceded two full requests, thus resulting - // in a full request for paint. In constrast, in JavaScript, the three - // requests were bundled together into one, so the fastPaint flag was - // still present for the second and third request. - // - // This resulted in incomplete painting. - // - // The solution was to set seqCanvas.fastPaint and idCanvas.fastPaint false - // in PaintRefresher when the target to be painted is one of those two - // components. - // - // BH 2019.04.22 - // - // An initial idea; can be removed once we determine this issue is closed: - // if (av.isFastPaintDisabled()) - // { - // fastPaint = false; - // } - Rectangle vis, clip; if (img != null && (fastPaint @@ -433,10 +412,11 @@ public class SeqCanvas extends JPanel implements ViewportListenerI // img is a cached version of the last view we drew. // If we have no img or the size has changed, make a new one. // - if (img == null || width != img.getWidth() - || height != img.getHeight()) + if (img == null || availWidth != img.getWidth() + || availHeight != img.getHeight()) { - img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + img = new BufferedImage(availWidth, availHeight, + BufferedImage.TYPE_INT_RGB); } Graphics2D gg = (Graphics2D) img.getGraphics(); @@ -449,11 +429,11 @@ public class SeqCanvas extends JPanel implements ViewportListenerI } gg.setColor(Color.white); - gg.fillRect(0, 0, img.getWidth(), img.getHeight()); + gg.fillRect(0, 0, availWidth, availHeight); if (av.getWrapAlignment()) { - drawWrappedPanel(gg, width, height, ranges.getStartRes()); + drawWrappedPanel(gg, availWidth, availHeight, ranges.getStartRes()); } else { @@ -521,32 +501,31 @@ public class SeqCanvas extends JPanel implements ViewportListenerI } /** - * Returns the visible width of the canvas in residues, after allowing for - * East or West scales (if shown) + * Using the current font, determine fields labelWidthEast and labelWidthWest, + * and return the number of residues that can fill the remaining width * - * @param canvasWidth + * @param w * the width in pixels (possibly including scales) * - * @return + * @return the visible width in residues, after allowing for East or West + * scales (if shown) + * */ - public int getWrappedCanvasWidth(int canvasWidth) + public int getWrappedCanvasWidth(int w) { int charWidth = av.getCharWidth(); FontMetrics fm = getFontMetrics(av.getFont()); - int labelWidth = 0; - - if (av.getScaleRightWrapped() || av.getScaleLeftWrapped()) - { - labelWidth = getLabelWidth(fm); - } + int labelWidth = (av.getScaleRightWrapped() || av.getScaleLeftWrapped() + ? getLabelWidth(fm) + : 0); labelWidthEast = av.getScaleRightWrapped() ? labelWidth : 0; labelWidthWest = av.getScaleLeftWrapped() ? labelWidth : 0; - return (canvasWidth - labelWidthEast - labelWidthWest) / charWidth; + return (w - labelWidthEast - labelWidthWest) / charWidth; } /** @@ -572,6 +551,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI maxWidth = Math.max(maxWidth, alignment.getSequenceAt(i).getEnd()); } + // quick int log10 int length = 0; for (int i = maxWidth; i > 0; i /= 10) { @@ -586,18 +566,18 @@ public class SeqCanvas extends JPanel implements ViewportListenerI * window * * @param g - * @param canvasWidth + * @param availWidth * available width in pixels - * @param canvasHeight + * @param availHeight * available height in pixels * @param startColumn * the first column (0...) of the alignment to draw */ - public void drawWrappedPanel(Graphics g, int canvasWidth, - int canvasHeight, final int startColumn) + public void drawWrappedPanel(Graphics g, int availWidth, int availHeight, + final int startColumn) { - int wrappedWidthInResidues = calculateWrappedGeometry(canvasWidth, - canvasHeight); + int wrappedWidthInResidues = calculateWrappedGeometry(availWidth, + availHeight); av.setWrappedWidth(wrappedWidthInResidues); @@ -607,7 +587,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI // we need to call this again to make sure the startColumn + // wrappedWidthInResidues values are used to calculate wrappedVisibleWidths // correctly. - calculateWrappedGeometry(canvasWidth, canvasHeight); + calculateWrappedGeometry(availWidth, availHeight); /* * draw one width at a time (excluding any scales shown), @@ -622,7 +602,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI { int endColumn = Math .min(maxWidth, start + wrappedWidthInResidues - 1); - drawWrappedWidth(g, ypos, start, endColumn, canvasHeight); + drawWrappedWidth(g, ypos, start, endColumn, availHeight); ypos += wrappedRepeatHeightPx; start += wrappedWidthInResidues; currentWidth++; @@ -641,11 +621,11 @@ public class SeqCanvas extends JPanel implements ViewportListenerI *