1 package jalview.renderer.seqfeatures;
3 import jalview.api.FeatureRenderer;
4 import jalview.api.FeaturesDisplayedI;
5 import jalview.datamodel.SequenceI;
6 import jalview.viewmodel.seqfeatures.FeatureRendererModel;
9 import java.awt.Graphics;
10 import java.awt.image.BufferedImage;
13 * A helper class to find feature colour using an associated FeatureRenderer
18 public class FeatureColourFinder
21 * the class we delegate feature finding to
23 private FeatureRenderer featureRenderer;
26 * a 1-pixel image on which features can be drawn, for the case where
27 * transparency allows 'see-through' of multiple feature colours
29 private BufferedImage offscreenImage;
36 public FeatureColourFinder(FeatureRenderer fr)
39 offscreenImage = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
43 * Answers the feature colour to show for the given sequence and column
44 * position. This delegates to the FeatureRenderer to find the colour, which
45 * will depend on feature location, visibility, ordering, colour scheme, and
46 * whether or not transparency is applied. For feature rendering with
47 * transparency, this class provides a dummy 'offscreen' graphics context
48 * where multiple feature colours can be overlaid and the combined colour read
51 * @param defaultColour
54 * alignment column position (base zero)
57 public Color findFeatureColour(Color defaultColour, SequenceI seq,
60 if (!((FeatureRendererModel) featureRenderer).hasRenderOrder())
65 FeaturesDisplayedI displayed = featureRenderer.getFeaturesDisplayed();
66 if (displayed == null || displayed.getVisibleFeatureCount() == 0)
68 return defaultColour; // nothing to see here folks
74 * if transparency applies, provide a notional 1x1 graphics context
75 * that has been primed with the default colour
77 if (featureRenderer.getTransparency() != 1f)
79 g = offscreenImage.getGraphics();
80 if (defaultColour != null)
82 offscreenImage.setRGB(0, 0, defaultColour.getRGB());
86 Color c = featureRenderer.findFeatureColour(seq, column, g);
94 c = new Color(offscreenImage.getRGB(0, 0));