Merge branch 'develop' into feature/JAL-3390hideUnmappedStructure
[jalview.git] / src / jalview / renderer / seqfeatures / FeatureRenderer.java
index 78f4989..a1980c7 100644 (file)
@@ -22,7 +22,8 @@ package jalview.renderer.seqfeatures;
 
 import jalview.api.AlignViewportI;
 import jalview.api.FeatureColourI;
-import jalview.datamodel.Range;
+import jalview.datamodel.ContiguousI;
+import jalview.datamodel.MappedFeatures;
 import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
 import jalview.gui.AlignFrame;
@@ -275,9 +276,9 @@ public class FeatureRenderer extends FeatureRendererModel
     /*
      * if columns are all gapped, or sequence has no features, nothing to do
      */
-    Range visiblePositions = seq.findPositions(start+1, end+1);
-    if (visiblePositions == null || (!seq.getFeatures().hasFeatures()
-            && !av.isShowComplementFeatures()))
+    ContiguousI visiblePositions = seq.findPositions(start + 1, end + 1);
+    if (visiblePositions == null || !seq.getFeatures().hasFeatures()
+            && !av.isShowComplementFeatures())
     {
       return null;
     }
@@ -446,23 +447,30 @@ public class FeatureRenderer extends FeatureRendererModel
    */
   Color drawComplementFeatures(final Graphics g, final SequenceI seq,
           int start, int end, int y1, boolean colourOnly,
-          Range visiblePositions, Color drawnColour)
+          ContiguousI visiblePositions, Color drawnColour)
   {
     AlignViewportI comp = av.getCodingComplement();
     FeatureRenderer fr2 = Desktop.getAlignFrameFor(comp)
             .getFeatureRenderer();
-    for (int pos = visiblePositions.start; pos <= visiblePositions.end; pos++)
+
+    final int visibleStart = visiblePositions.getBegin();
+    final int visibleEnd = visiblePositions.getEnd();
+
+    for (int pos = visibleStart; pos <= visibleEnd; pos++)
     {
       int column = seq.findIndex(pos);
-      List<SequenceFeature> features = fr2
+      MappedFeatures mf = fr2
               .findComplementFeaturesAtResidue(seq, pos);
-      for (SequenceFeature sf : features)
+      if (mf != null)
       {
-        FeatureColourI fc = fr2.getFeatureStyle(sf.getType());
-        Color featureColour = fr2.getColor(sf, fc);
-        renderFeature(g, seq, column - 1, column - 1, featureColour,
-                start, end, y1, colourOnly);
-        drawnColour = featureColour;
+        for (SequenceFeature sf : mf.features)
+        {
+          FeatureColourI fc = fr2.getFeatureStyle(sf.getType());
+          Color featureColour = fr2.getColor(sf, fc);
+          renderFeature(g, seq, column - 1, column - 1, featureColour,
+                  start, end, y1, colourOnly);
+          drawnColour = featureColour;
+        }
       }
     }
     return drawnColour;
@@ -560,11 +568,14 @@ public class FeatureRenderer extends FeatureRendererModel
     AlignViewportI complement = av.getCodingComplement();
     AlignFrame af = Desktop.getAlignFrameFor(complement);
     FeatureRendererModel fr2 = af.getFeatureRenderer();
-    List<SequenceFeature> features = fr2.findComplementFeaturesAtResidue(
+    MappedFeatures mf = fr2.findComplementFeaturesAtResidue(
             seq, seq.findPosition(column - 1));
-
+    if (mf == null)
+    {
+      return null;
+    }
     ReverseListIterator<SequenceFeature> it = new ReverseListIterator<>(
-            features);
+            mf.features);
     while (it.hasNext())
     {
       SequenceFeature sf = it.next();