JAL-2015 JAL-1956 rollout of FeatureColourI in place of
[jalview.git] / src / jalview / renderer / seqfeatures / FeatureRenderer.java
index 362ef5e..bc00cc4 100644 (file)
@@ -1,3 +1,23 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ * 
+ * This file is part of Jalview.
+ * 
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *  
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
 package jalview.renderer.seqfeatures;
 
 import jalview.datamodel.SequenceFeature;
@@ -30,6 +50,8 @@ public class FeatureRenderer extends
 
   boolean av_validCharWidth, av_isShowSeqFeatureHeight;
 
+  private Integer currentColour;
+
   protected void updateAvConfig()
   {
     av_charHeight = av.getCharHeight();
@@ -142,24 +164,24 @@ public class FeatureRenderer extends
         charOffset = (av_charWidth - fm.charWidth(s)) / 2;
         g.drawString(String.valueOf(s), charOffset
                 + (av_charWidth * (i - start)), pady);
-
       }
     }
   }
 
   BufferedImage offscreenImage;
 
+  @Override
   public Color findFeatureColour(Color initialCol, SequenceI seq, int res)
   {
     return new Color(findFeatureColour(initialCol.getRGB(), seq, res));
   }
 
   /**
-   * This is used by the Molecule Viewer and Overview to get the accurate
-   * colourof the rendered sequence
+   * This is used by the Molecule Viewer and Overview to get the accurate colour
+   * of the rendered sequence
    */
-  public synchronized int findFeatureColour(int initialCol, final SequenceI seq,
-          int column)
+  public synchronized int findFeatureColour(int initialCol,
+          final SequenceI seq, int column)
   {
     if (!av.isShowSequenceFeatures())
     {
@@ -226,7 +248,7 @@ public class FeatureRenderer extends
       }
       else
       {
-        return ((Integer) currentColour).intValue();
+        return currentColour.intValue();
       }
     }
 
@@ -293,26 +315,24 @@ public class FeatureRenderer extends
       // current feature to render
       for (sfindex = 0; sfindex < sfSize; sfindex++)
       {
-        if (!lastSequenceFeatures[sfindex].type.equals(type))
+        final SequenceFeature sequenceFeature = lastSequenceFeatures[sfindex];
+        if (!sequenceFeature.type.equals(type))
         {
           continue;
         }
 
         if (featureGroups != null
-                && lastSequenceFeatures[sfindex].featureGroup != null
-                && lastSequenceFeatures[sfindex].featureGroup.length() != 0
-                && featureGroups
-                        .containsKey(lastSequenceFeatures[sfindex].featureGroup)
-                && !featureGroups
-.get(
-                        lastSequenceFeatures[sfindex].featureGroup)
+                && sequenceFeature.featureGroup != null
+                && sequenceFeature.featureGroup.length() != 0
+                && featureGroups.containsKey(sequenceFeature.featureGroup)
+                && !featureGroups.get(sequenceFeature.featureGroup)
                         .booleanValue())
         {
           continue;
         }
 
         if (!offscreenRender
-                && (lastSequenceFeatures[sfindex].getBegin() > epos || lastSequenceFeatures[sfindex]
+                && (sequenceFeature.getBegin() > epos || sequenceFeature
                         .getEnd() < spos))
         {
           continue;
@@ -320,59 +340,51 @@ public class FeatureRenderer extends
 
         if (offscreenRender && offscreenImage == null)
         {
-          if (lastSequenceFeatures[sfindex].begin <= start
-                  && lastSequenceFeatures[sfindex].end >= start)
+          if (sequenceFeature.begin <= start
+                  && sequenceFeature.end >= start)
           {
             // this is passed out to the overview and other sequence renderers
             // (e.g. molecule viewer) to get displayed colour for rendered
             // sequence
-            currentColour = new Integer(
-getColour(
-                    lastSequenceFeatures[sfindex]).getRGB());
+            currentColour = new Integer(getColour(sequenceFeature).getRGB());
             // used to be retreived from av.featuresDisplayed
             // currentColour = av.featuresDisplayed
             // .get(sequenceFeatures[sfindex].type);
 
           }
         }
-        else if (lastSequenceFeatures[sfindex].type
-                .equals("disulfide bond"))
+        else if (sequenceFeature.type.equals("disulfide bond"))
         {
-
-          renderFeature(g, seq,
-                  seq.findIndex(lastSequenceFeatures[sfindex].begin) - 1,
-                  seq.findIndex(lastSequenceFeatures[sfindex].begin) - 1,
-                  getColour(lastSequenceFeatures[sfindex])
+          renderFeature(g, seq, seq.findIndex(sequenceFeature.begin) - 1,
+                  seq.findIndex(sequenceFeature.begin) - 1,
+                  getColour(sequenceFeature)
                   // new Color(((Integer) av.featuresDisplayed
                   // .get(sequenceFeatures[sfindex].type)).intValue())
                   , start, end, y1);
-          renderFeature(g, seq,
-                  seq.findIndex(lastSequenceFeatures[sfindex].end) - 1,
-                  seq.findIndex(lastSequenceFeatures[sfindex].end) - 1,
-                  getColour(lastSequenceFeatures[sfindex])
+          renderFeature(g, seq, seq.findIndex(sequenceFeature.end) - 1,
+                  seq.findIndex(sequenceFeature.end) - 1,
+                  getColour(sequenceFeature)
                   // new Color(((Integer) av.featuresDisplayed
                   // .get(sequenceFeatures[sfindex].type)).intValue())
                   , start, end, y1);
 
         }
-        else if (showFeature(lastSequenceFeatures[sfindex]))
+        else if (showFeature(sequenceFeature))
         {
           if (av_isShowSeqFeatureHeight
-                  && lastSequenceFeatures[sfindex].score != Float.NaN)
+                  && !Float.isNaN(sequenceFeature.score))
           {
             renderScoreFeature(g, seq,
-                    seq.findIndex(lastSequenceFeatures[sfindex].begin) - 1,
-                    seq.findIndex(lastSequenceFeatures[sfindex].end) - 1,
-                    getColour(lastSequenceFeatures[sfindex]), start, end,
-                    y1, normaliseScore(lastSequenceFeatures[sfindex]));
+                    seq.findIndex(sequenceFeature.begin) - 1,
+                    seq.findIndex(sequenceFeature.end) - 1,
+                    getColour(sequenceFeature), start, end, y1,
+                    normaliseScore(sequenceFeature));
           }
           else
           {
-            renderFeature(g, seq,
-                    seq.findIndex(lastSequenceFeatures[sfindex].begin) - 1,
-                    seq.findIndex(lastSequenceFeatures[sfindex].end) - 1,
-                    getColour(lastSequenceFeatures[sfindex]), start, end,
-                    y1);
+            renderFeature(g, seq, seq.findIndex(sequenceFeature.begin) - 1,
+                    seq.findIndex(sequenceFeature.end) - 1,
+                    getColour(sequenceFeature), start, end, y1);
           }
         }
 
@@ -406,6 +418,7 @@ getColour(
    * discover and display.
    * 
    */
+  @Override
   public void featuresAdded()
   {
     lastSeq = null;