X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Frenderer%2Fseqfeatures%2FFeatureRenderer.java;h=9751e0b179d657e1b9bfa6ba57458a707177cb2d;hb=f300e30df117ff4be7d1df5c781161efd0285e5f;hp=9988076f7fbc5821164145e182003d6b9907863a;hpb=5b833c4ea17f7e45fe1532b36219fcbfba3c0e4a;p=jalview.git diff --git a/src/jalview/renderer/seqfeatures/FeatureRenderer.java b/src/jalview/renderer/seqfeatures/FeatureRenderer.java index 9988076..9751e0b 100644 --- a/src/jalview/renderer/seqfeatures/FeatureRenderer.java +++ b/src/jalview/renderer/seqfeatures/FeatureRenderer.java @@ -42,6 +42,13 @@ public class FeatureRenderer extends FeatureRendererModel private static final AlphaComposite NO_TRANSPARENCY = AlphaComposite .getInstance(AlphaComposite.SRC_OVER, 1.0f); + /* + * persistent list used by JalviewJS; not threadsafe for Java + */ + private List overlaps = (Platform.isJS() + ? new ArrayList<>() + : null); + /** * Constructor given a viewport * @@ -95,9 +102,6 @@ public class FeatureRenderer extends FeatureRendererModel char s = '\0'; for (int i = featureStart; i <= featureEnd; i++) { - - // colourOnly is just for Overview -- no need to check this again - if (!colourOnly && Comparison.isGap(s = seq.getCharAt(i))) { continue; @@ -223,13 +227,6 @@ public class FeatureRenderer extends FeatureRendererModel @Override public Color findFeatureColour(SequenceI seq, int column, Graphics g) { - // BH 2019.08.01 - // this is already checked in FeatureColorFinder - // if (!av.isShowSequenceFeatures()) - // { - // return null; - // } - // column is 'base 1' but getCharAt is an array index (ie from 0) if (Comparison.isGap(seq.getCharAt(column - 1))) { @@ -266,8 +263,7 @@ public class FeatureRenderer extends FeatureRendererModel * applies), or null if no feature is drawn in the range given. * * @param g - * the graphics context to draw on (may be null only if t == 1 from - * colourOnly==true) + * the graphics context to draw on (null if no transparency applies) * @param seq * @param start * start column @@ -284,7 +280,6 @@ public class FeatureRenderer extends FeatureRendererModel final SequenceI seq, int start, int end, int y1, boolean colourOnly) { - // from SeqCanvas and OverviewRender /* * if columns are all gapped, or sequence has no features, nothing to do */ @@ -300,11 +295,10 @@ public class FeatureRenderer extends FeatureRendererModel updateFeatures(); - if (transparency != 1f) // g cannot be null here if trans == 1f - BH // && g - // != null) + if (transparency != 1f) { - ((Graphics2D) g).setComposite( - AlphaComposite.getInstance(AlphaComposite.SRC_OVER, + Graphics2D g2 = (Graphics2D) g; + g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, transparency)); } @@ -332,7 +326,7 @@ public class FeatureRenderer extends FeatureRendererModel filterFeaturesForDisplay(overlaps); } - for (int i = overlaps.size(); --i >= 0;) + for (int i = 0, j = overlaps.size(); i < j; i++) { SequenceFeature sf = overlaps.get(i); Color featureColour = getColor(sf, fc); @@ -439,10 +433,6 @@ public class FeatureRenderer extends FeatureRendererModel findAllFeatures(); } - private List overlaps = (Platform.isJS() - ? new ArrayList<>() - : null); - /** * Returns the sequence feature colour rendered at the given column position, * or null if none found. The feature of highest render order (i.e. on top) is @@ -454,12 +444,6 @@ public class FeatureRenderer extends FeatureRendererModel * colour for features enclosing a gapped column. Check for gap before calling * if different behaviour is wanted. * - * BH 2019.07.30 - * - * Adds a result ArrayList to parameters in order to avoid an unnecessary - * construction of that for every pixel checked. - * - * * @param seq * @param column * (1..) @@ -484,6 +468,10 @@ public class FeatureRenderer extends FeatureRendererModel continue; } + /* + * field overlaps is used by JalviewJS to avoid object creation; + * not thread-safe for Java (Javascript is single-threaded) + */ if (overlaps != null) { overlaps.clear();