Merge branch 'bug/JAL-2691_nomultimermapping' into documentation/JAL-2675_release2102b1
[jalview.git] / src / jalview / renderer / OverviewRenderer.java
index 2f8f5fe..992a1b2 100644 (file)
@@ -23,7 +23,9 @@ package jalview.renderer;
 import jalview.api.AlignmentColsCollectionI;
 import jalview.api.AlignmentRowsCollectionI;
 import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
 import jalview.datamodel.Annotation;
+import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.renderer.seqfeatures.FeatureColourFinder;
 import jalview.renderer.seqfeatures.FeatureRenderer;
@@ -40,9 +42,9 @@ public class OverviewRenderer
   // transparency of hidden cols/seqs overlay
   private final float TRANSPARENCY = 0.5f;
 
-  private FeatureColourFinder finder;
+  private final Color HIDDEN_COLOUR = Color.DARK_GRAY.darker();
 
-  private jalview.api.SequenceRenderer sr;
+  private FeatureColourFinder finder;
 
   // image to render on
   private BufferedImage miniMe;
@@ -56,11 +58,22 @@ public class OverviewRenderer
   // flag to indicate whether to halt drawing
   private volatile boolean redraw = false;
 
-  public OverviewRenderer(jalview.api.SequenceRenderer seqRenderer,
-          FeatureRenderer fr, OverviewDimensions od)
+  // reference to alignment, needed to get sequence groups
+  private AlignmentI al;
+
+  private ResidueShaderI shader;
+
+  private OverviewResColourFinder resColFinder;
+
+  public OverviewRenderer(FeatureRenderer fr, OverviewDimensions od,
+          AlignmentI alignment,
+          ResidueShaderI resshader, OverviewResColourFinder colFinder)
   {
-    sr = seqRenderer;
     finder = new FeatureColourFinder(fr);
+    resColFinder = colFinder;
+
+    al = alignment;
+    shader = resshader;
 
     pixelsPerCol = od.getPixelsPerCol();
     pixelsPerSeq = od.getPixelsPerSeq();
@@ -93,7 +106,10 @@ public class OverviewRenderer
     
       // get details of this alignment row
       SequenceI seq = rows.getSequence(alignmentRow);
-    
+
+      // rate limiting step when rendering overview for lots of groups
+      SequenceGroup[] allGroups = al.findAllGroups(seq);
+
       // calculate where this row extends to in pixels
       int endRow = Math.min(Math.round((seqIndex + 1) * pixelsPerSeq) - 1,
               miniMe.getHeight() - 1);
@@ -116,9 +132,8 @@ public class OverviewRenderer
         // panel
         if (pixelCol <= endCol)
         {
-          rgbcolor = getColumnColourFromSequence(seq,
-                  alignmentCol,
-                  finder);
+          rgbcolor = getColumnColourFromSequence(allGroups, seq,
+                  alignmentCol, finder);
     
           // fill in the appropriate number of pixels
           for (int row = pixelRow; row <= endRow; ++row)
@@ -152,14 +167,17 @@ public class OverviewRenderer
    *          FeatureColourFinder to use
    * @return colour of sequence at this position, as RGB
    */
-  private int getColumnColourFromSequence(jalview.datamodel.SequenceI seq,
+  private int getColumnColourFromSequence(SequenceGroup[] allGroups,
+          jalview.datamodel.SequenceI seq,
           int lastcol, FeatureColourFinder fcfinder)
   {
     Color color = Color.white;
 
     if ((seq != null) && (seq.getLength() > lastcol))
     {
-      color = sr.getResidueColour(seq, lastcol, fcfinder);
+      color = resColFinder.getResidueColour(true, shader, allGroups, seq,
+              lastcol,
+              fcfinder);
     }
 
     return color.getRGB();
@@ -212,7 +230,7 @@ public class OverviewRenderer
     int colIndex = 0;
     int pixelCol = 0;
 
-    Color hidden = Color.DARK_GRAY.darker();
+    Color hidden = resColFinder.getHiddenColour();
 
     Graphics2D g2d = (Graphics2D) hiddenImage.getGraphics();