JAL-3210 Improvements to eclipse detection. New src tree and SwingJS updated from...
[jalview.git] / src / jalview / appletgui / OverviewCanvas.java
index 07f5919..7f4e962 100644 (file)
@@ -30,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
@@ -49,13 +51,23 @@ public class OverviewCanvas extends Component
 
   private AlignViewport av;
 
+  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;
 
@@ -101,46 +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(fr, od, av.getAlignment(),
+    or = new OverviewRenderer(panel.ap, fr, od, av.getAlignment(),
             av.getResidueShading(), new OverviewResColourFinder());
-    miniMe = nullFrame.createImage(od.getWidth(), od.getHeight());
     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(),
-              od.getGraphHeight(), od.getColumns(av.getAlignment()));
-      mg.translate(0, -od.getSequencesHeight());
-    }
-
-    if (restart)
-    {
-      restart = false;
-      draw(showSequenceFeatures, showAnnotation, transferRenderer);
-    }
-    else
-    {
-      updaterunning = false;
-    }
+    or.drawMiniMe();
   }
 
   @Override
@@ -152,13 +141,14 @@ 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();
     }
   }
 
@@ -170,4 +160,25 @@ public class OverviewCanvas extends Component
     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();
+    }
+  }
+
 }