X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Frenderer%2Fseqfeatures%2FFeatureColourFinder.java;h=1db200429191e04666f47f8769a3c9c96b1adb00;hb=baee331692f533011f566ba30a7a711f3326320f;hp=0c18d399ff48f17485674a47e48269a84910aa2f;hpb=5a5663e814e0af0dbe6061a257fb4fb1baebd4e3;p=jalview.git diff --git a/src/jalview/renderer/seqfeatures/FeatureColourFinder.java b/src/jalview/renderer/seqfeatures/FeatureColourFinder.java index 0c18d39..1db2004 100644 --- a/src/jalview/renderer/seqfeatures/FeatureColourFinder.java +++ b/src/jalview/renderer/seqfeatures/FeatureColourFinder.java @@ -47,6 +47,10 @@ public class FeatureColourFinder * transparency, this class provides a dummy 'offscreen' graphics context * where multiple feature colours can be overlaid and the combined colour read * back. + *

+ * This method is not thread-safe when transparency is applied, since a shared + * BufferedImage would be used by all threads to hold the composite colour at + * a position. Each thread should use a separate instance of this class. * * @param defaultColour * @param seq @@ -57,17 +61,11 @@ public class FeatureColourFinder public Color findFeatureColour(Color defaultColour, SequenceI seq, int column) { - if (!((FeatureRendererModel) featureRenderer).hasRenderOrder()) + if (noFeaturesDisplayed()) { return defaultColour; } - FeaturesDisplayedI displayed = featureRenderer.getFeaturesDisplayed(); - if (displayed == null || displayed.getVisibleFeatureCount() == 0) - { - return defaultColour; // nothing to see here folks - } - Graphics g = null; /* @@ -95,4 +93,32 @@ public class FeatureColourFinder } return c; } + + /** + * Answers true if feature display is turned off, or there are no features + * configured to be visible + * + * @return + */ + boolean noFeaturesDisplayed() + { + if (featureRenderer == null + || !featureRenderer.getViewport().isShowSequenceFeatures()) + { + return true; + } + + if (!((FeatureRendererModel) featureRenderer).hasRenderOrder()) + { + return true; + } + + FeaturesDisplayedI displayed = featureRenderer.getFeaturesDisplayed(); + if (displayed == null || displayed.getVisibleFeatureCount() == 0) + { + return true; + } + + return false; + } }