JAL-1551 spotlessApply
[jalview.git] / src / jalview / renderer / seqfeatures / FeatureRenderer.java
index a1980c7..2d16fcd 100644 (file)
  */
 package jalview.renderer.seqfeatures;
 
+import java.awt.AlphaComposite;
+import java.awt.Color;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.util.List;
+
 import jalview.api.AlignViewportI;
 import jalview.api.FeatureColourI;
 import jalview.datamodel.ContiguousI;
@@ -32,13 +39,6 @@ import jalview.util.Comparison;
 import jalview.util.ReverseListIterator;
 import jalview.viewmodel.seqfeatures.FeatureRendererModel;
 
-import java.awt.AlphaComposite;
-import java.awt.Color;
-import java.awt.FontMetrics;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.util.List;
-
 public class FeatureRenderer extends FeatureRendererModel
 {
   private static final AlphaComposite NO_TRANSPARENCY = AlphaComposite
@@ -112,6 +112,10 @@ public class FeatureRenderer extends FeatureRendererModel
         continue;
       }
 
+      /*
+       * JAL-3045 text is always drawn over features, even if
+       * 'Show Text' is unchecked in the format menu
+       */
       g.setColor(Color.white);
       int charOffset = (charWidth - fm.charWidth(s)) / 2;
       g.drawString(String.valueOf(s),
@@ -319,7 +323,7 @@ public class FeatureRenderer extends FeatureRendererModel
       List<SequenceFeature> overlaps = seq.getFeatures().findFeatures(
               visiblePositions.getBegin(), visiblePositions.getEnd(), type);
 
-      if (fc.isSimpleColour())
+      if (overlaps.size() > 1 && fc.isSimpleColour())
       {
         filterFeaturesForDisplay(overlaps);
       }
@@ -354,8 +358,8 @@ public class FeatureRenderer extends FeatureRendererModel
         }
 
         int featureStartCol = seq.findIndex(visibleStart);
-        int featureEndCol = sf.begin == sf.end ? featureStartCol : seq
-                .findIndex(visibleEnd);
+        int featureEndCol = sf.begin == sf.end ? featureStartCol
+                : seq.findIndex(visibleEnd);
 
         // Color featureColour = getColour(sequenceFeature);
 
@@ -396,14 +400,13 @@ public class FeatureRenderer extends FeatureRendererModel
           else
           {
           */
-            boolean drawn = renderFeature(g, seq,
-                    featureStartCol - 1,
-                    featureEndCol - 1, featureColour,
-                    start, end, y1, colourOnly);
-            if (drawn)
-            {
-              drawnColour = featureColour;
-            }
+          boolean drawn = renderFeature(g, seq, featureStartCol - 1,
+                  featureEndCol - 1, featureColour, start, end, y1,
+                  colourOnly);
+          if (drawn)
+          {
+            drawnColour = featureColour;
+          }
           /*}*/
         }
       }
@@ -459,8 +462,7 @@ public class FeatureRenderer extends FeatureRendererModel
     for (int pos = visibleStart; pos <= visibleEnd; pos++)
     {
       int column = seq.findIndex(pos);
-      MappedFeatures mf = fr2
-              .findComplementFeaturesAtResidue(seq, pos);
+      MappedFeatures mf = fr2.findComplementFeaturesAtResidue(seq, pos);
       if (mf != null)
       {
         for (SequenceFeature sf : mf.features)
@@ -535,10 +537,15 @@ public class FeatureRenderer extends FeatureRendererModel
         continue;
       }
 
+      /*
+       * find features of this type, and the colour of the _last_ one
+       * (the one that would be drawn on top) that has a colour
+       */
       List<SequenceFeature> overlaps = seq.findFeatures(column, column,
               type);
-      for (SequenceFeature sequenceFeature : overlaps)
+      for (int i = overlaps.size() - 1; i >= 0; i--)
       {
+        SequenceFeature sequenceFeature = overlaps.get(i);
         if (!featureGroupNotShown(sequenceFeature))
         {
           Color col = getColour(sequenceFeature);
@@ -568,8 +575,8 @@ public class FeatureRenderer extends FeatureRendererModel
     AlignViewportI complement = av.getCodingComplement();
     AlignFrame af = Desktop.getAlignFrameFor(complement);
     FeatureRendererModel fr2 = af.getFeatureRenderer();
-    MappedFeatures mf = fr2.findComplementFeaturesAtResidue(
-            seq, seq.findPosition(column - 1));
+    MappedFeatures mf = fr2.findComplementFeaturesAtResidue(seq,
+            seq.findPosition(column - 1));
     if (mf == null)
     {
       return null;