From edc9fd41915430e69daf3bac4c3fc0451bb0ed48 Mon Sep 17 00:00:00 2001 From: jprocter Date: Thu, 14 Jun 2012 11:36:03 +0100 Subject: [PATCH] JAL-1118 - hack to try and get rid of flicker. consider moving greyed out image rendering to after we call the panel renderer. --- src/jalview/gui/AnnotationPanel.java | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/jalview/gui/AnnotationPanel.java b/src/jalview/gui/AnnotationPanel.java index 85a31f7..03fbf28 100755 --- a/src/jalview/gui/AnnotationPanel.java +++ b/src/jalview/gui/AnnotationPanel.java @@ -809,7 +809,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, repaint(); } - + private volatile boolean lastImageGood=false; /** * DOCUMENT ME! * @@ -822,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); @@ -847,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; } @@ -876,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 -- 1.7.10.2