+ // if there is annotation, scale the alignment and annotation separately
+ if (od.getGraphHeight() > 0)
+ {
+ BufferedImage topImage = lastMiniMe.getSubimage(0, 0,
+ od.getWidth(), od.getSequencesHeight());
+ BufferedImage bottomImage = lastMiniMe.getSubimage(0,
+ od.getSequencesHeight(), od.getWidth(),
+ od.getGraphHeight());
+
+ // must be done at this point as we rely on using old width/height
+ // above, and new width/height below
+ od.setWidth(getWidth());
+ od.setHeight(getHeight());
+
+ // stick the images back together so lastMiniMe is consistent in the
+ // event of a repaint - BUT probably not thread safe
+ lastMiniMe = new BufferedImage(od.getWidth(), od.getHeight(),
+ BufferedImage.TYPE_INT_RGB);
+ Graphics lg = lastMiniMe.getGraphics();
+ lg.drawImage(topImage, 0, 0, od.getWidth(),
+ od.getSequencesHeight(), null);
+ lg.drawImage(bottomImage, 0, od.getSequencesHeight(),
+ od.getWidth(), od.getGraphHeight(), this);
+ lg.dispose();
+ }
+ else
+ {
+ od.setWidth(getWidth());
+ od.setHeight(getHeight());
+ }
+
+ // scale lastMiniMe to the new size
+ g.drawImage(lastMiniMe, 0, 0, getWidth(), getHeight(), this);
+
+ // make sure the box is in the right place
+ od.setBoxPosition(av.getAlignment().getHiddenSequences(),
+ av.getAlignment().getHiddenColumns());
+ }
+ else // not a resize
+ {
+ if (alpha != 0) // this is a timer triggered dissolve
+ {
+ Graphics2D g2d = (Graphics2D) g.create();
+
+ // draw the original image
+ g2d.drawImage(veryLastMiniMe, 0, 0, getWidth(), getHeight(),
+ this);
+
+ // draw the new image on top with varying degrees of transparency
+ g2d.setComposite(AlphaComposite.SrcOver.derive(1f - alpha));
+ g2d.drawImage(lastMiniMe, 0, 0, getWidth(), getHeight(), this);
+
+ g2d.dispose();
+ }
+ else
+ {
+ // fall back to normal behaviour
+ g.drawImage(lastMiniMe, 0, 0, getWidth(), getHeight(), this);
+ }
+ }