X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fgui%2FAnnotationPanel.java;h=03fbf281ef00a7f61ec4c8b323421448a176f355;hb=edc9fd41915430e69daf3bac4c3fc0451bb0ed48;hp=e00483d67156a77153e5525fd0fecef8746d6956;hpb=657cc1b42f3b48c900ce5cacdd1495f772791561;p=jalview.git diff --git a/src/jalview/gui/AnnotationPanel.java b/src/jalview/gui/AnnotationPanel.java index e00483d..03fbf28 100755 --- a/src/jalview/gui/AnnotationPanel.java +++ b/src/jalview/gui/AnnotationPanel.java @@ -66,7 +66,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, public BufferedImage image; - public BufferedImage fadedImage; + public volatile BufferedImage fadedImage; Graphics2D gg; @@ -715,7 +715,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, } } - + private volatile boolean imageFresh=false; /** * DOCUMENT ME! * @@ -758,9 +758,11 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, fm = gg.getFontMetrics(); gg.setColor(Color.white); gg.fillRect(0, 0, imgWidth, image.getHeight()); + imageFresh=true; } drawComponent(gg, av.startRes, av.endRes + 1); + imageFresh=false; g.drawImage(image, 0, 0, this); } @@ -807,7 +809,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, repaint(); } - + private volatile boolean lastImageGood=false; /** * DOCUMENT ME! * @@ -820,18 +822,21 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, */ public void drawComponent(Graphics g, int startRes, int endRes) { + BufferedImage oldFaded=fadedImage; if (av.isCalcInProgress()) { if (image == null) { + lastImageGood=false; return; } // We'll keep a record of the old image, // and draw a faded image until the calculation // has completed - if (fadedImage == null || fadedImage.getWidth() != imgWidth - || fadedImage.getHeight() != image.getHeight()) + if (lastImageGood && (fadedImage == null || fadedImage.getWidth() != imgWidth + || fadedImage.getHeight() != image.getHeight())) { +// System.err.println("redraw faded image ("+(fadedImage==null ? "null image" : "") + " lastGood="+lastImageGood+")"); fadedImage = new BufferedImage(imgWidth, image.getHeight(), BufferedImage.TYPE_INT_RGB); @@ -845,10 +850,16 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, fadedG.drawImage(image, 0, 0, this); } + // make sure we don't overwrite the last good faded image until all calculations have finished + lastImageGood=false; } else { + if (fadedImage!=null) + { + oldFaded=fadedImage; + } fadedImage = null; } @@ -874,7 +885,11 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, return; } - renderer.drawComponent(this, av, g, activeRow, startRes, endRes); + lastImageGood = renderer.drawComponent(this, av, g, activeRow, startRes, endRes); + if (!lastImageGood && fadedImage==null) + { + fadedImage=oldFaded; + } } @Override