X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Frenderer%2Fseqfeatures%2FFeatureRenderer.java;h=9f575103e0ee8c013b906928dae680ee51c5421b;hb=bd4ab013e64863bbbffa93c58953051e11cfb236;hp=02cfd05535f4366298b3af56bf412f2aa926dff2;hpb=5a5663e814e0af0dbe6061a257fb4fb1baebd4e3;p=jalview.git diff --git a/src/jalview/renderer/seqfeatures/FeatureRenderer.java b/src/jalview/renderer/seqfeatures/FeatureRenderer.java index 02cfd05..9f57510 100644 --- a/src/jalview/renderer/seqfeatures/FeatureRenderer.java +++ b/src/jalview/renderer/seqfeatures/FeatureRenderer.java @@ -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 */