Merge branch 'develop' into features/JAL-2446NCList
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Wed, 22 Mar 2017 16:46:57 +0000 (16:46 +0000)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Wed, 22 Mar 2017 16:46:57 +0000 (16:46 +0000)
Conflicts:
src/jalview/gui/SeqCanvas.java
src/jalview/renderer/seqfeatures/FeatureRenderer.java

1  2 
src/jalview/gui/OverviewPanel.java
src/jalview/renderer/seqfeatures/FeatureRenderer.java
src/jalview/viewmodel/seqfeatures/FeatureRendererModel.java

@@@ -198,9 -201,11 +201,12 @@@ public class OverviewPanel extends JPan
      float sampleCol = alwidth / (float) od.getWidth();
      float sampleRow = alheight / (float) od.getSequencesHeight();
  
++    long start = System.currentTimeMillis();
      buildImage(sampleRow, sampleCol);
  
-     if (av.isShowAnnotation())
+     // check for conservation annotation to make sure overview works for DNA too
+     if (av.isShowAnnotation()
+             && (av.getAlignmentConservationAnnotation() != null))
      {
        renderer.updateFromAlignViewport(av);
        for (int col = 0; col < od.getWidth() && !resizeAgain; col++)
  
        }
      }
++    System.out.println("Overview took "
++            + (System.currentTimeMillis() - start) + "ms");
      System.gc();
  
      resizing = false;
@@@ -30,8 -31,6 +31,7 @@@ import java.awt.Color
  import java.awt.FontMetrics;
  import java.awt.Graphics;
  import java.awt.Graphics2D;
- import java.awt.image.BufferedImage;
 +import java.util.List;
  
  public class FeatureRenderer extends FeatureRendererModel
  {
                transparency));
      }
  
-     if (!offscreenRender)
-     {
-       spos = lastSeq.findPosition(start);
-       epos = lastSeq.findPosition(end);
-     }
+     int startPos = seq.findPosition(start);
+     int endPos = seq.findPosition(end);
 -    int sfSize = sequenceFeatures.length;
+     Color drawnColour = null;
  
-     sfSize = lastSequenceFeatures.length;
+     /*
+      * iterate over features in ordering of their rendering (last is on top)
+      */
      for (int renderIndex = 0; renderIndex < renderOrder.length; renderIndex++)
      {
        String type = renderOrder[renderIndex];
          continue;
        }
  
--      // loop through all features in sequence to find
--      // current feature to render
-       // for (sfindex = 0; sfindex < sfSize; sfindex++)
-       // {
-       // final SequenceFeature sequenceFeature = lastSequenceFeatures[sfindex];
-       int from = offscreenRender ? start : spos;
-       int to = offscreenRender ? start : epos;
-       List<SequenceFeature> overlaps = seq.findFeatures(type, from, to);
 -      for (int sfindex = 0; sfindex < sfSize; sfindex++)
++      List<SequenceFeature> overlaps = seq.findFeatures(type, startPos, endPos);
 +      for (SequenceFeature sequenceFeature : overlaps)
        {
-         if (!sequenceFeature.type.equals(type))
-         {
-           continue;
-         }
-         if (featureGroupNotShown(sequenceFeature))
-         {
-           continue;
-         }
 -        final SequenceFeature sequenceFeature = sequenceFeatures[sfindex];
 -        if (!sequenceFeature.type.equals(type))
 -        {
 -          continue;
 -        }
 -
          /*
-          * check feature overlaps the visible part of the alignment, 
-          * unless doing offscreenRender (to the Overview window or a 
-          * structure viewer) which is not limited 
+          * a feature type may be flagged as shown but the group 
+          * an instance of it belongs to may be hidden
           */
-         if (!offscreenRender
-                 && (sequenceFeature.getBegin() > epos || sequenceFeature
-                         .getEnd() < spos))
+         if (featureGroupNotShown(sequenceFeature))
          {
            continue;
          }
          }
          else if (showFeature(sequenceFeature))
          {
-           if (av_isShowSeqFeatureHeight
++          /*
++           * showing feature score by height of colour
++           * is not implemented as a selectable option 
++           *
+           if (av.isShowSequenceFeaturesHeight()
                    && !Float.isNaN(sequenceFeature.score))
            {
-             renderScoreFeature(g, seq,
+             boolean drawn = renderScoreFeature(g, seq,
                      seq.findIndex(sequenceFeature.begin) - 1,
-                     seq.findIndex(sequenceFeature.end) - 1,
-                     featureColour, start, end, y1,
-                     normaliseScore(sequenceFeature));
+                     seq.findIndex(sequenceFeature.end) - 1, featureColour,
+                     start, end, y1, normaliseScore(sequenceFeature),
+                     colourOnly);
+             if (drawn)
+             {
+               drawnColour = featureColour;
+             }
            }
            else
            {
-             renderFeature(g, seq, seq.findIndex(sequenceFeature.begin) - 1,
-                     seq.findIndex(sequenceFeature.end) - 1,
-                     featureColour, start, end, y1);
-           }
++          */
+             boolean drawn = renderFeature(g, seq,
+                     seq.findIndex(sequenceFeature.begin) - 1,
+                     seq.findIndex(sequenceFeature.end) - 1, featureColour,
+                     start, end, y1, colourOnly);
+             if (drawn)
+             {
+               drawnColour = featureColour;
+             }
 -          }
++          /*}*/
          }
        }
      }
@@@ -562,6 -564,6 +564,13 @@@ public abstract class FeatureRendererMo
      return fc.getColor(feature);
    }
  
++  /**
++   * Answers true unless the feature has a graduated colour scheme and the
++   * feature value lies outside the current threshold for display
++   * 
++   * @param sequenceFeature
++   * @return
++   */
    protected boolean showFeature(SequenceFeature sequenceFeature)
    {
      FeatureColourI fc = getFeatureStyle(sequenceFeature.type);