package jalview.appletgui;
import jalview.renderer.OverviewRenderer;
+import jalview.renderer.OverviewResColourFinder;
import jalview.viewmodel.OverviewDimensions;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
+import java.awt.image.BufferedImage;
+@SuppressWarnings("serial")
public class OverviewCanvas extends Component
{
// This is set true if the alignment view changes whilst
private AlignViewport av;
- // Can set different properties in this seqCanvas than
- // main visible SeqCanvas
- private SequenceRenderer sr;
+ private boolean showSequenceFeatures;
+
+ private boolean showAnnotation;
+
+ private jalview.api.FeatureRenderer featureRenderer;
private jalview.renderer.seqfeatures.FeatureRenderer fr;
private Frame nullFrame;
- public OverviewCanvas(OverviewDimensions overviewDims,
+ private OverviewPanel panel;
+
+ public OverviewCanvas(OverviewPanel panel,
+ OverviewDimensions overviewDims,
AlignViewport alignvp)
{
+ this.panel = panel;
od = overviewDims;
av = alignvp;
nullFrame = new Frame();
nullFrame.addNotify();
- sr = new SequenceRenderer(av);
- sr.graphics = nullFrame.getGraphics();
- sr.renderGaps = false;
- sr.forOverview = true;
fr = new jalview.renderer.seqfeatures.FeatureRenderer(av);
}
}
public void draw(boolean showSequenceFeatures, boolean showAnnotation,
- FeatureRenderer transferRenderer)
+ jalview.api.FeatureRenderer featureRenderer)
{
- miniMe = null;
+ this.showSequenceFeatures = showSequenceFeatures;
+ this.showAnnotation = showAnnotation;
+ this.featureRenderer = featureRenderer;
if (showSequenceFeatures)
{
- fr.transferSettings(transferRenderer);
+ fr.transferSettings(featureRenderer);
}
setPreferredSize(new Dimension(od.getWidth(), od.getHeight()));
- or = new OverviewRenderer(sr, fr, od);
- miniMe = nullFrame.createImage(od.getWidth(), od.getHeight());
+ or = new OverviewRenderer(panel.ap, fr, od, av.getAlignment(),
+ av.getResidueShading(), new OverviewResColourFinder());
offscreen = nullFrame.createImage(od.getWidth(), od.getHeight());
-
- miniMe = or.draw(od.getRows(av.getAlignment()),
+ or.draw(od.getRows(av.getAlignment()),
od.getColumns(av.getAlignment()));
+ }
+
+ @Override
+ public void update(Graphics g)
+ {
+ paint(g);
+ }
+
+ @Override
+ public void paint(Graphics g)
+ {
+ if (miniMe != null)
+ {
+ Graphics og = offscreen.getGraphics();
+ og.drawImage(miniMe, 0, 0, this);
+ og.setColor(Color.red);
+ od.drawBox(og);
+ g.drawImage(offscreen, 0, 0, this);
+ og.dispose();
+ }
+ }
+ /**
+ * Nulls references to protect against potential memory leaks
+ */
+ void dispose()
+ {
+ od = null;
+ }
+
+ public void finalizeDraw(BufferedImage miniMe)
+ {
Graphics mg = miniMe.getGraphics();
// checks for conservation annotation to make sure overview works for DNA
{
mg.translate(0, od.getSequencesHeight());
or.drawGraph(mg, av.getAlignmentConservationAnnotation(),
- av.getCharWidth(), od.getGraphHeight(),
- od.getColumns(av.getAlignment()));
+ od.getGraphHeight(), od.getColumns(av.getAlignment()));
mg.translate(0, -od.getSequencesHeight());
}
- System.gc();
if (restart)
{
restart = false;
- draw(showSequenceFeatures, showAnnotation, transferRenderer);
+ draw(showSequenceFeatures, showAnnotation, featureRenderer);
}
else
{
}
}
- @Override
- public void update(Graphics g)
- {
- paint(g);
- }
-
- @Override
- public void paint(Graphics g)
- {
- Graphics og = offscreen.getGraphics();
- if (miniMe != null)
- {
- og.drawImage(miniMe, 0, 0, this);
- og.setColor(Color.red);
- od.drawBox(og);
- g.drawImage(offscreen, 0, 0, this);
- }
- }
-
}