JAL-3454 tidy comments
[jalview.git] / src / jalview / appletgui / OverviewCanvas.java
index a0466d3..7f4e962 100644 (file)
@@ -21,6 +21,7 @@
 package jalview.appletgui;
 
 import jalview.renderer.OverviewRenderer;
+import jalview.renderer.OverviewResColourFinder;
 import jalview.viewmodel.OverviewDimensions;
 
 import java.awt.Color;
@@ -29,7 +30,9 @@ import java.awt.Dimension;
 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
@@ -48,27 +51,29 @@ public class OverviewCanvas extends Component
 
   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);
   }
 
@@ -108,47 +113,23 @@ public class OverviewCanvas extends Component
   }
 
   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()),
-            od.getColumns(av.getAlignment()));
-
-    Graphics mg = miniMe.getGraphics();
-
-    // checks for conservation annotation to make sure overview works for DNA
-    // too
-    if (showAnnotation)
-    {
-      mg.translate(0, od.getSequencesHeight());
-      or.drawGraph(mg, av.getAlignmentConservationAnnotation(),
-              av.getCharWidth(), od.getGraphHeight(),
-              od.getColumns(av.getAlignment()));
-      mg.translate(0, -od.getSequencesHeight());
-    }
-    System.gc();
-
-    if (restart)
-    {
-      restart = false;
-      draw(showSequenceFeatures, showAnnotation, transferRenderer);
-    }
-    else
-    {
-      updaterunning = false;
-    }
+    or.drawMiniMe();
   }
 
   @Override
@@ -160,13 +141,43 @@ public class OverviewCanvas extends Component
   @Override
   public void paint(Graphics g)
   {
-    Graphics og = offscreen.getGraphics();
     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)
+  {
+    if (restart)
+    {
+      restart = false;
+      draw(showSequenceFeatures, showAnnotation, featureRenderer);
+    }
+    else
+    {
+      this.miniMe = miniMe;
+      // checks for conservation annotation to make sure overview works for DNA
+      // too
+      if (showAnnotation)
+      {
+        or.drawGraph(av.getAlignmentConservationAnnotation());
+      }
+      updaterunning = false;
+      repaint();
     }
   }