Merge branch 'feature/2588' into merge/develop_feature/2588_JAL-2588
[jalview.git] / src / jalview / renderer / OverviewRenderer.java
index 77c3700..2e2bc37 100644 (file)
@@ -29,7 +29,6 @@ import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.renderer.seqfeatures.FeatureColourFinder;
 import jalview.renderer.seqfeatures.FeatureRenderer;
-import jalview.util.Comparison;
 import jalview.viewmodel.OverviewDimensions;
 
 import java.awt.Color;
@@ -40,8 +39,6 @@ public class OverviewRenderer
 {
   private FeatureColourFinder finder;
 
-  private jalview.api.SequenceRenderer sr;
-
   // image to render on
   private BufferedImage miniMe;
 
@@ -59,12 +56,14 @@ public class OverviewRenderer
 
   private ResidueShaderI shader;
 
-  public OverviewRenderer(jalview.api.SequenceRenderer seqRenderer,
-          FeatureRenderer fr, OverviewDimensions od, AlignmentI alignment,
+  private ResidueColourFinder resColFinder;
+
+  public OverviewRenderer(FeatureRenderer fr, OverviewDimensions od,
+          AlignmentI alignment,
           ResidueShaderI resshader)
   {
-    sr = seqRenderer;
     finder = new FeatureColourFinder(fr);
+    resColFinder = new OverviewResColourFinder();
 
     al = alignment;
     shader = resshader;
@@ -118,8 +117,7 @@ public class OverviewRenderer
         }
 
         // calculate where this column extends to in pixels
-        int endCol = Math.min(
-                Math.round((colIndex + 1) * pixelsPerCol) - 1,
+        int endCol = Math.min(Math.round((colIndex + 1) * pixelsPerCol) - 1,
                 miniMe.getWidth() - 1);
 
         // don't do expensive colour determination if we're not going to use it
@@ -162,7 +160,9 @@ public class OverviewRenderer
 
     if ((seq != null) && (seq.getLength() > lastcol))
     {
-      color = getResidueColour(allGroups, seq, lastcol, fcfinder);
+      color = resColFinder.getResidueColour(true, shader, allGroups, seq,
+              lastcol,
+              fcfinder);
     }
 
     if (isHidden)
@@ -173,83 +173,6 @@ public class OverviewRenderer
     return color.getRGB();
   }
 
-  private Color getResidueColour(SequenceGroup[] allGroups,
-          final SequenceI seq, int position,
-          FeatureColourFinder finder)
-  {
-    Color col = getResidueBoxColour(allGroups, seq, position);
-
-    if (finder != null)
-    {
-      col = finder.findFeatureColour(col, seq, position);
-    }
-    return col;
-  }
-
-  protected Color getResidueBoxColour(SequenceGroup[] allGroups,
-          SequenceI seq, int i)
-  {
-
-    ResidueShaderI currentShader;
-
-    SequenceGroup currentSequenceGroup = inCurrentSequenceGroup(allGroups,
-            i);
-    if (currentSequenceGroup != null)
-    {
-      currentShader = currentSequenceGroup.getGroupColourScheme();
-    }
-    else
-    {
-      currentShader = shader;
-    }
-
-    return getBoxColour(currentShader, seq, i);
-  }
-
-  SequenceGroup inCurrentSequenceGroup(SequenceGroup[] allGroups, int res)
-  {
-    if (allGroups == null)
-    {
-      return null;
-    }
-
-    for (int i = 0; i < allGroups.length; i++)
-    {
-      if ((allGroups[i].getStartRes() <= res)
-              && (allGroups[i].getEndRes() >= res))
-      {
-        return (allGroups[i]);
-      }
-    }
-
-    return null;
-  }
-
-  Color getBoxColour(ResidueShaderI shader, SequenceI seq, int i)
-  {
-    Color resBoxColour = Color.white;
-    char currentChar = seq.getCharAt(i);
-
-    if (shader.getColourScheme() != null)
-    {
-      if (Comparison.isGap(currentChar)
-              && !shader.getColourScheme().hasGapColour())
-      {
-        resBoxColour = Color.lightGray;
-      }
-      else
-      {
-        resBoxColour = shader.findColour(currentChar, i, seq);
-      }
-    }
-    else if (Comparison.isGap(currentChar))
-    {
-      resBoxColour = Color.lightGray;
-    }
-
-    return resBoxColour;
-  }
-
   /**
    * Draw the alignment annotation in the overview panel
    * 
@@ -286,8 +209,7 @@ public class OverviewRenderer
       }
       else
       {
-        int endCol = Math.min(
-                Math.round((colIndex + 1) * pixelsPerCol) - 1,
+        int endCol = Math.min(Math.round((colIndex + 1) * pixelsPerCol) - 1,
                 miniMe.getWidth() - 1);
 
         if (annotations[alignmentCol] != null)
@@ -301,7 +223,8 @@ public class OverviewRenderer
             g.setColor(annotations[alignmentCol].colour);
           }
 
-          height = (int) ((annotations[alignmentCol].value / anno.graphMax) * y);
+          height = (int) ((annotations[alignmentCol].value / anno.graphMax)
+                  * y);
           if (height > y)
           {
             height = y;