X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FOverviewPanel.java;h=36a4575e784cf274252c1fdc274561943f99e7e2;hb=51728d3951398f9c12d7017c776953f17322cc68;hp=de0dbe55bac73488d4bd7a12e5fdf9b55f279334;hpb=4d7f98a6dd54d9863ba449ec79dcd95d25ed863d;p=jalview.git diff --git a/src/jalview/gui/OverviewPanel.java b/src/jalview/gui/OverviewPanel.java index de0dbe5..36a4575 100755 --- a/src/jalview/gui/OverviewPanel.java +++ b/src/jalview/gui/OverviewPanel.java @@ -295,14 +295,25 @@ public class OverviewPanel extends JPanel implements Runnable 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; @@ -338,8 +349,13 @@ public class OverviewPanel extends JPanel implements Runnable continue; } + // long start = System.currentTimeMillis(); for (col = 0; col < width; col++) { + if (resizeAgain) + { + break; + } if ((int) (col * sampleCol) == lastcol && (int) (row * sampleRow) == lastrow) { @@ -373,6 +389,8 @@ public class OverviewPanel extends JPanel implements Runnable miniMe.setRGB(col, row, color); } + // System.out.println(String.format("Row %d with width %d took %dms", + // row, width, System.currentTimeMillis() - start)); } if (av.getAlignmentConservationAnnotation() != null) @@ -380,6 +398,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); @@ -395,13 +417,17 @@ public class OverviewPanel extends JPanel implements Runnable resizing = false; - setBoxPosition(); - if (resizeAgain) { resizeAgain = false; updateOverviewImage(); } + else + { + lastMiniMe = miniMe; + } + + setBoxPosition(); } /** @@ -456,6 +482,8 @@ public class OverviewPanel extends JPanel implements Runnable repaint(); } + private BufferedImage lastMiniMe = null; + /** * DOCUMENT ME! * @@ -465,19 +493,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); - } }