import jalview.renderer.AwtRenderPanelI;
/**
- * DOCUMENT ME!
- *
+ * AnnotationPanel displays visible portion of annotation rows below unwrapped alignment
* @author $author$
* @version $Revision$
*/
public BufferedImage image;
- public BufferedImage fadedImage;
+ public volatile BufferedImage fadedImage;
Graphics2D gg;
*/
public int adjustPanelHeight()
{
- int height = calcPanelHeight();
+ int height = av.calcPanelHeight();
this.setPreferredSize(new Dimension(1, height));
if (ap != null)
{
}
/**
- * calculate the height for visible annotation, revalidating bounds where
- * necessary ABSTRACT GUI METHOD
- *
- * @return total height of annotation
- */
- public int calcPanelHeight()
- {
- // setHeight of panels
- AlignmentAnnotation[] aa = av.getAlignment().getAlignmentAnnotation();
- int height = 0;
-
- if (aa != null)
- {
- for (int i = 0; i < aa.length; i++)
- {
- if (aa[i] == null)
- {
- System.err.println("Null annotation row: ignoring.");
- continue;
- }
- if (!aa[i].visible)
- {
- continue;
- }
-
- aa[i].height = 0;
-
- if (aa[i].hasText)
- {
- aa[i].height += av.charHeight;
- }
-
- if (aa[i].hasIcons)
- {
- aa[i].height += 16;
- }
-
- if (aa[i].graph > 0)
- {
- aa[i].height += aa[i].graphHeight;
- }
-
- if (aa[i].height == 0)
- {
- aa[i].height = 20;
- }
-
- height += aa[i].height;
- }
- }
- if (height == 0)
- {
- // set minimum
- height = 20;
- }
- return height;
- }
-
- /**
* DOCUMENT ME!
*
* @param evt
aa[activeRow].validateRangeAndDisplay();
adjustPanelHeight();
+ ap.alignmentChanged();
repaint();
return;
}
}
-
+ private volatile boolean imageFresh=false;
/**
* DOCUMENT ME!
*
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);
}
repaint();
}
-
+ private volatile boolean lastImageGood=false;
/**
* DOCUMENT ME!
*
*/
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);
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;
}
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