new Dimension(10, av.getCharHeight() + fm.getDescent()));
idwidthAdjuster.invalidate();
scalePanelHolder.invalidate();
- getIdPanel().getIdCanvas().gg = null;
+ // BH 2018 getIdPanel().getIdCanvas().gg = null;
getSeqPanel().seqCanvas.img = null;
getAnnotationPanel().adjustPanelHeight();
*/
ViewportRanges ranges = av.getRanges();
setScrollValues(ranges.getStartRes(), ranges.getStartSeq());
+ super.paintComponent(g);
}
/**
public volatile BufferedImage fadedImage;
- Graphics2D gg;
+ // private Graphics2D gg;
public FontMetrics fm;
}
private volatile boolean imageFresh = false;
+ private Rectangle visibleRect = new Rectangle(), clipBounds = new Rectangle();
/**
* DOCUMENT ME!
@Override
public void paintComponent(Graphics g)
{
- super.paintComponent(g);
-
+
+ // BH: note that this method is generally recommended to
+ // call super.paintComponent(g). Otherwise, the children of this
+ // component will not be rendered. That is not needed here
+ // because AnnotationPanel does not have any children. It is
+ // just a JPanel contained in a JViewPort.
+
+ computeVisibleRect(visibleRect);
+
g.setColor(Color.white);
- g.fillRect(0, 0, getWidth(), getHeight());
+ g.fillRect(0, 0, visibleRect.width, visibleRect.height);
if (image != null)
{
- if (fastPaint || (getVisibleRect().width != g.getClipBounds().width)
- || (getVisibleRect().height != g.getClipBounds().height))
+ // BH 2018 optimizing generation of new Rectangle().
+ if (fastPaint || (visibleRect.width != (clipBounds = g.getClipBounds(clipBounds)).width)
+ || (visibleRect.height != clipBounds.height))
{
- g.drawImage(image, 0, 0, this);
+
+
+ g.drawImage(image, 0, 0, this);
fastPaint = false;
return;
}
{
return;
}
+ Graphics2D gg;
if (image == null || imgWidth != image.getWidth(this)
|| image.getHeight(this) != getHeight())
{
gg.setColor(Color.white);
gg.fillRect(0, 0, imgWidth, image.getHeight());
imageFresh = true;
+ } else {
+ gg = (Graphics2D) image.getGraphics();
+
}
drawComponent(gg, av.getRanges().getStartRes(),
av.getRanges().getEndRes() + 1);
+ gg.dispose();
imageFresh = false;
g.drawImage(image, 0, 0, this);
}
*/
public void fastPaint(int horizontal)
{
- if ((horizontal == 0) || gg == null
+ if ((horizontal == 0) || image == null
|| av.getAlignment().getAlignmentAnnotation() == null
|| av.getAlignment().getAlignmentAnnotation().length < 1
|| av.isCalcInProgress())
int er = av.getRanges().getEndRes() + 1;
int transX = 0;
+ Graphics2D gg = (Graphics2D) image.getGraphics();
+
gg.copyArea(0, 0, imgWidth, getHeight(),
-horizontal * av.getCharWidth(), 0);
gg.translate(-transX, 0);
+ gg.dispose();
+
fastPaint = true;
// Call repaint on alignment panel so that repaints from other alignment
ap = null;
image = null;
fadedImage = null;
- gg = null;
+// gg = null;
_mwl = null;
/*
BufferedImage image;
- Graphics2D gg;
+// Graphics2D gg;
int imgHeight = 0;
/*
* for now, not attempting fast paint of wrapped ids...
*/
- if (gg == null || av.getWrapAlignment())
+ if (image == null || av.getWrapAlignment())
{
repaint();
ViewportRanges ranges = av.getRanges();
+ Graphics2D gg = image.createGraphics();
gg.copyArea(0, 0, getWidth(), imgHeight, 0,
-vertical * av.getCharHeight());
gg.translate(0, -transY);
+ gg.dispose();
+
fastPaint = true;
// Call repaint on alignment panel so that repaints from other alignment
BufferedImage.TYPE_INT_RGB);
}
- gg = (Graphics2D) image.getGraphics();
+ Graphics2D gg = image.createGraphics();
// Fill in the background
gg.setColor(Color.white);
gg.fillRect(0, 0, getWidth(), imgHeight);
drawIds(gg, av, av.getRanges().getStartSeq(), av.getRanges().getEndSeq(), searchResults);
+
+ gg.dispose();
g.drawImage(image, 0, 0, this);
}