X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FOverviewPanel.java;h=1c4869020584fe486e04eef37cd45ab2aebee0a0;hb=fbc92d8f171f75002890bfa0ea1f436f7125d3b5;hp=39a232a57c3ce4bfae1fa46ccd1623c9a23fd2bb;hpb=be32c14cd8e48fe0a207cd7030cb9cd46f894678;p=jalview.git diff --git a/src/jalview/gui/OverviewPanel.java b/src/jalview/gui/OverviewPanel.java index 39a232a..1c48690 100755 --- a/src/jalview/gui/OverviewPanel.java +++ b/src/jalview/gui/OverviewPanel.java @@ -92,7 +92,7 @@ public class OverviewPanel extends JPanel implements Runnable sr.renderGaps = false; sr.forOverview = true; fr = new FeatureRenderer(ap); - + // scale the initial size of overviewpanel to shape of alignment float initialScale = (float) av.getAlignment().getWidth() / (float) av.getAlignment().getHeight(); @@ -292,15 +292,28 @@ public class OverviewPanel extends JPanel implements Runnable int color = Color.white.getRGB(); int row, col; jalview.datamodel.SequenceI seq; + final boolean hasHiddenRows = av.hasHiddenRows(), hasHiddenCols = av + .hasHiddenColumns(); boolean hiddenRow = false; + // get hidden row and hidden column map once at beginning. + // clone featureRenderer settings to avoid race conditions... if state is + // updated just need to refresh again for (row = 0; row < sequencesHeight; row++) { + if (resizeAgain) + { + break; + } if ((int) (row * sampleRow) == lastrow) { // No need to recalculate the colours, // Just copy from the row above for (col = 0; col < width; col++) { + if (resizeAgain) + { + break; + } miniMe.setRGB(col, row, miniMe.getRGB(col, row - 1)); } continue; @@ -309,7 +322,7 @@ public class OverviewPanel extends JPanel implements Runnable lastrow = (int) (row * sampleRow); hiddenRow = false; - if (av.hasHiddenRows()) + if (hasHiddenRows) { seq = av.getAlignment().getHiddenSequences() .getHiddenSequence(lastrow); @@ -338,6 +351,10 @@ public class OverviewPanel extends JPanel implements Runnable for (col = 0; col < width; col++) { + if (resizeAgain) + { + break; + } if ((int) (col * sampleCol) == lastcol && (int) (row * sampleRow) == lastrow) { @@ -362,8 +379,8 @@ public class OverviewPanel extends JPanel implements Runnable } if (hiddenRow - || (av.hasHiddenColumns() && !av.getColumnSelection() - .isVisible(lastcol))) + || (hasHiddenCols && !av.getColumnSelection().isVisible( + lastcol))) { color = new Color(color).darker().darker().getRGB(); } @@ -378,6 +395,10 @@ public class OverviewPanel extends JPanel implements Runnable renderer.updateFromAlignViewport(av); for (col = 0; col < width; col++) { + if (resizeAgain) + { + break; + } lastcol = (int) (col * sampleCol); { mg.translate(col, sequencesHeight); @@ -393,13 +414,17 @@ public class OverviewPanel extends JPanel implements Runnable resizing = false; - setBoxPosition(); - if (resizeAgain) { resizeAgain = false; updateOverviewImage(); } + else + { + lastMiniMe = miniMe; + } + + setBoxPosition(); } /** @@ -454,6 +479,8 @@ public class OverviewPanel extends JPanel implements Runnable repaint(); } + private BufferedImage lastMiniMe = null; + /** * DOCUMENT ME! * @@ -463,19 +490,32 @@ public class OverviewPanel extends JPanel implements Runnable @Override public void paintComponent(Graphics g) { - if (resizing) + if (resizing || resizeAgain) { - g.setColor(Color.white); + if (lastMiniMe == null) + { + g.setColor(Color.white); + g.fillRect(0, 0, getWidth(), getHeight()); + } + else + { + g.drawImage(lastMiniMe, 0, 0, getWidth(), getHeight(), this); + } + g.setColor(new Color(100, 100, 100, 25)); g.fillRect(0, 0, getWidth(), getHeight()); } - else if (miniMe != null) + else if (lastMiniMe != null) { - g.drawImage(miniMe, 0, 0, this); + g.drawImage(lastMiniMe, 0, 0, this); + if (lastMiniMe != miniMe) + { + g.setColor(new Color(100, 100, 100, 25)); + g.fillRect(0, 0, getWidth(), getHeight()); + } } - + // TODO: render selected regions g.setColor(Color.red); g.drawRect(boxX, boxY, boxWidth, boxHeight); g.drawRect(boxX + 1, boxY + 1, boxWidth - 2, boxHeight - 2); - } }