JAL-2629 add basic parameter adjustment to hmmsearch/align
[jalview.git] / src / jalview / renderer / seqfeatures / FeatureRenderer.java
index 02cfd05..9f57510 100644 (file)
@@ -37,12 +37,6 @@ public class FeatureRenderer extends FeatureRendererModel
   private static final AlphaComposite NO_TRANSPARENCY = AlphaComposite
           .getInstance(AlphaComposite.SRC_OVER, 1.0f);
 
-  protected SequenceI lastSeq;
-
-  private volatile SequenceFeature[] lastSequenceFeatures;
-
-  int sfSize;
-
   /**
    * Constructor given a viewport
    * 
@@ -104,8 +98,7 @@ public class FeatureRenderer extends FeatureRendererModel
 
       g.setColor(featureColour);
 
-      g.fillRect((i - start) * charWidth, y1, charWidth,
-              charHeight);
+      g.fillRect((i - start) * charWidth, y1, charWidth, charHeight);
 
       if (colourOnly || !validCharWidth)
       {
@@ -114,8 +107,8 @@ public class FeatureRenderer extends FeatureRendererModel
 
       g.setColor(Color.white);
       int charOffset = (charWidth - fm.charWidth(s)) / 2;
-      g.drawString(String.valueOf(s), charOffset
-              + (charWidth * (i - start)), pady);
+      g.drawString(String.valueOf(s),
+              charOffset + (charWidth * (i - start)), pady);
     }
     return true;
   }
@@ -203,8 +196,8 @@ public class FeatureRenderer extends FeatureRendererModel
 
       g.setColor(Color.black);
       int charOffset = (charWidth - fm.charWidth(s)) / 2;
-      g.drawString(String.valueOf(s), charOffset
-              + (charWidth * (i - start)), pady);
+      g.drawString(String.valueOf(s),
+              charOffset + (charWidth * (i - start)), pady);
     }
     return true;
   }
@@ -221,35 +214,19 @@ public class FeatureRenderer extends FeatureRendererModel
     }
 
     SequenceFeature[] sequenceFeatures = seq.getSequenceFeatures();
-    if (seq != lastSeq)
-    {
-      lastSeq = seq;
-      lastSequenceFeatures = sequenceFeatures;
-      if (lastSequenceFeatures != null)
-      {
-        sfSize = lastSequenceFeatures.length;
-      }
-    }
-    else
-    {
-      if (lastSequenceFeatures != sequenceFeatures)
-      {
-        lastSequenceFeatures = sequenceFeatures;
-        if (lastSequenceFeatures != null)
-        {
-          sfSize = lastSequenceFeatures.length;
-        }
-      }
-    }
 
-    if (lastSequenceFeatures == null || sfSize == 0)
+    if (sequenceFeatures == null || sequenceFeatures.length == 0)
     {
       return null;
     }
 
-    if (Comparison.isGap(lastSeq.getCharAt(column)))
+    if (Comparison.isGap(seq.getCharAt(column)))
     {
-      return Color.white;
+      /*
+       * returning null allows the colour scheme to provide gap colour
+       * - normally white, but can be customised otherwise
+       */
+      return null;
     }
 
     Color renderedColour = null;
@@ -266,7 +243,7 @@ public class FeatureRenderer extends FeatureRendererModel
        * transparency case - draw all visible features in render order to
        * build up a composite colour on the graphics context
        */
-      renderedColour = drawSequence(g, lastSeq, column, column, 0, true);
+      renderedColour = drawSequence(g, seq, column, column, 0, true);
     }
     return renderedColour;
   }
@@ -303,13 +280,6 @@ public class FeatureRenderer extends FeatureRendererModel
 
     updateFeatures();
 
-    if (lastSeq == null || seq != lastSeq
-            || sequenceFeatures != lastSequenceFeatures)
-    {
-      lastSeq = seq;
-      lastSequenceFeatures = sequenceFeatures;
-    }
-
     if (transparency != 1f && g != null)
     {
       Graphics2D g2 = (Graphics2D) g;
@@ -317,10 +287,10 @@ public class FeatureRenderer extends FeatureRendererModel
               transparency));
     }
 
-    int startPos = lastSeq.findPosition(start);
-    int endPos = lastSeq.findPosition(end);
+    int startPos = seq.findPosition(start);
+    int endPos = seq.findPosition(end);
 
-    sfSize = lastSequenceFeatures.length;
+    int sfSize = sequenceFeatures.length;
     Color drawnColour = null;
 
     /*
@@ -338,7 +308,7 @@ public class FeatureRenderer extends FeatureRendererModel
       // current feature to render
       for (int sfindex = 0; sfindex < sfSize; sfindex++)
       {
-        final SequenceFeature sequenceFeature = lastSequenceFeatures[sfindex];
+        final SequenceFeature sequenceFeature = sequenceFeatures[sfindex];
         if (!sequenceFeature.type.equals(type))
         {
           continue;
@@ -364,6 +334,12 @@ public class FeatureRenderer extends FeatureRendererModel
         }
 
         Color featureColour = getColour(sequenceFeature);
+        if (featureColour == null)
+        {
+          // score feature outwith threshold for colouring
+          continue;
+        }
+
         boolean isContactFeature = sequenceFeature.isContactFeature();
 
         if (isContactFeature)
@@ -381,7 +357,7 @@ public class FeatureRenderer extends FeatureRendererModel
             drawnColour = featureColour;
           }
         }
-        else if (showFeature(sequenceFeature))
+        else
         {
           if (av.isShowSequenceFeaturesHeight()
                   && !Float.isNaN(sequenceFeature.score))
@@ -433,8 +409,7 @@ public class FeatureRenderer extends FeatureRendererModel
   protected boolean featureGroupNotShown(
           final SequenceFeature sequenceFeature)
   {
-    return featureGroups != null
-            && sequenceFeature.featureGroup != null
+    return featureGroups != null && sequenceFeature.featureGroup != null
             && sequenceFeature.featureGroup.length() != 0
             && featureGroups.containsKey(sequenceFeature.featureGroup)
             && !featureGroups.get(sequenceFeature.featureGroup)
@@ -449,7 +424,6 @@ public class FeatureRenderer extends FeatureRendererModel
   @Override
   public void featuresAdded()
   {
-    lastSeq = null;
     findAllFeatures();
   }
 
@@ -470,7 +444,7 @@ public class FeatureRenderer extends FeatureRendererModel
     {
       return null;
     }
-  
+
     /*
      * check for new feature added while processing
      */
@@ -480,7 +454,8 @@ public class FeatureRenderer extends FeatureRendererModel
      * inspect features in reverse renderOrder (the last in the array is 
      * displayed on top) until we find one that is rendered at the position
      */
-    for (int renderIndex = renderOrder.length - 1; renderIndex >= 0; renderIndex--)
+    for (int renderIndex = renderOrder.length
+            - 1; renderIndex >= 0; renderIndex--)
     {
       String type = renderOrder[renderIndex];
       if (!showFeatureOfType(type))
@@ -518,7 +493,7 @@ public class FeatureRenderer extends FeatureRendererModel
         }
       }
     }
-  
+
     /*
      * no displayed feature found at position
      */