JAL-3253-applet JAL-3383 Overview speed up -- see Issue comments.
[jalview.git] / src / jalview / renderer / seqfeatures / FeatureRenderer.java
index 13885b4..bed72c5 100644 (file)
@@ -33,6 +33,7 @@ import java.awt.Color;
 import java.awt.FontMetrics;
 import java.awt.Graphics;
 import java.awt.Graphics2D;
+import java.util.ArrayList;
 import java.util.List;
 
 public class FeatureRenderer extends FeatureRendererModel
@@ -417,6 +418,8 @@ public class FeatureRenderer extends FeatureRendererModel
     findAllFeatures();
   }
 
+  private List<SequenceFeature> overlaps = new ArrayList<>();
+
   /**
    * Returns the sequence feature colour rendered at the given column position,
    * or null if none found. The feature of highest render order (i.e. on top) is
@@ -428,12 +431,17 @@ public class FeatureRenderer extends FeatureRendererModel
    * colour for features enclosing a gapped column. Check for gap before calling
    * if different behaviour is wanted.
    * 
+   * BH 2019.07.30 
+   * 
+   * Adds a result ArrayList to parameters in order to avoid an unnecessary construction of that for every pixel checked.
+   * 
+   * 
    * @param seq
    * @param column
    *          (1..)
    * @return
    */
-  Color findFeatureColour(SequenceI seq, int column)
+  private Color findFeatureColour(SequenceI seq, int column)
   {
     /*
      * check for new feature added while processing
@@ -453,16 +461,19 @@ public class FeatureRenderer extends FeatureRendererModel
         continue;
       }
 
-      List<SequenceFeature> overlaps = seq.findFeatures(column, column,
-              type);
-      for (SequenceFeature sequenceFeature : overlaps)
+      overlaps.clear();
+      seq.findFeatures(column, type, overlaps);
+      if (overlaps.size() > 0)
       {
-        if (!featureGroupNotShown(sequenceFeature))
+        for (SequenceFeature sequenceFeature : overlaps)
         {
-          Color col = getColour(sequenceFeature);
-          if (col != null)
+          if (!featureGroupNotShown(sequenceFeature))
           {
-            return col;
+            Color col = getColour(sequenceFeature);
+            if (col != null)
+            {
+              return col;
+            }
           }
         }
       }