JAL-2388 Add missed optimisation
[jalview.git] / src / jalview / renderer / OverviewRenderer.java
index 75b8198..9291ca6 100644 (file)
@@ -26,6 +26,7 @@ import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.Annotation;
 import jalview.datamodel.SequenceI;
 import jalview.renderer.seqfeatures.FeatureColourFinder;
+import jalview.renderer.seqfeatures.FeatureRenderer;
 import jalview.viewmodel.OverviewDimensions;
 
 import java.awt.Color;
@@ -48,10 +49,11 @@ public class OverviewRenderer
   private float pixelsPerSeq;
 
   public OverviewRenderer(jalview.api.SequenceRenderer seqRenderer,
-          FeatureColourFinder colfinder, OverviewDimensions od)
+          FeatureRenderer fr, OverviewDimensions od)
+  // FeatureColourFinder colfinder, OverviewDimensions od)
   {
     sr = seqRenderer;
-    finder = colfinder;
+    finder = new FeatureColourFinder(fr); // colfinder;
 
     pixelsPerCol = od.getPixelsPerCol();
     pixelsPerSeq = od.getPixelsPerSeq();
@@ -93,20 +95,27 @@ public class OverviewRenderer
                 Math.round((colIndex + 1) * pixelsPerCol) - 1,
                 miniMe.getWidth() - 1);
 
-        // determine the colour based on the sequence and column position
-        rgbcolor = getColumnColourFromSequence(seq,
-                hidden || cols.isHidden(alignmentCol), alignmentCol, finder);
-
-        // fill in the appropriate number of pixels
-        for (int row = pixelRow; row <= endRow; ++row)
+        // don't do expensive colour determination if we're not going to use it
+        // NB this is important to avoid performance issues in the overview
+        // panel
+        if (pixelCol <= endCol)
         {
-          for (int col = pixelCol; col <= endCol; ++col)
+          // determine the colour based on the sequence and column position
+          rgbcolor = getColumnColourFromSequence(seq,
+                  hidden || cols.isHidden(alignmentCol), alignmentCol,
+                  finder);
+
+          // fill in the appropriate number of pixels
+          for (int row = pixelRow; row <= endRow; ++row)
           {
-            miniMe.setRGB(col, row, rgbcolor);
+            for (int col = pixelCol; col <= endCol; ++col)
+            {
+              miniMe.setRGB(col, row, rgbcolor);
+            }
           }
-        }
 
-        pixelCol = endCol + 1;
+          pixelCol = endCol + 1;
+        }
         colIndex++;
       }
       pixelRow = endRow + 1;