import jalview.api.AlignmentColsCollectionI;
import jalview.api.AlignmentRowsCollectionI;
import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
import jalview.datamodel.Annotation;
+import jalview.datamodel.SequenceGroup;
import jalview.datamodel.SequenceI;
import jalview.renderer.seqfeatures.FeatureColourFinder;
import jalview.renderer.seqfeatures.FeatureRenderer;
// transparency of hidden cols/seqs overlay
private final float TRANSPARENCY = 0.5f;
- private FeatureColourFinder finder;
+ private final Color HIDDEN_COLOUR = Color.DARK_GRAY.darker();
- private jalview.api.SequenceRenderer sr;
+ private FeatureColourFinder finder;
// image to render on
private BufferedImage miniMe;
// flag to indicate whether to halt drawing
private volatile boolean redraw = false;
- public OverviewRenderer(jalview.api.SequenceRenderer seqRenderer,
- FeatureRenderer fr, OverviewDimensions od)
+ // reference to alignment, needed to get sequence groups
+ private AlignmentI al;
+
+ private ResidueShaderI shader;
+
+ private OverviewResColourFinder resColFinder;
+
+ public OverviewRenderer(FeatureRenderer fr, OverviewDimensions od,
+ AlignmentI alignment,
+ ResidueShaderI resshader, OverviewResColourFinder colFinder)
{
- sr = seqRenderer;
finder = new FeatureColourFinder(fr);
+ resColFinder = colFinder;
+
+ al = alignment;
+ shader = resshader;
pixelsPerCol = od.getPixelsPerCol();
pixelsPerSeq = od.getPixelsPerSeq();
// get details of this alignment row
SequenceI seq = rows.getSequence(alignmentRow);
-
+
+ // rate limiting step when rendering overview for lots of groups
+ SequenceGroup[] allGroups = al.findAllGroups(seq);
+
// calculate where this row extends to in pixels
int endRow = Math.min(Math.round((seqIndex + 1) * pixelsPerSeq) - 1,
miniMe.getHeight() - 1);
}
// calculate where this column extends to in pixels
- int endCol = Math.min(
- Math.round((colIndex + 1) * pixelsPerCol) - 1,
+ int endCol = Math.min(Math.round((colIndex + 1) * pixelsPerCol) - 1,
miniMe.getWidth() - 1);
// don't do expensive colour determination if we're not going to use it
// panel
if (pixelCol <= endCol)
{
- rgbcolor = getColumnColourFromSequence(seq,
- alignmentCol,
- finder);
+ rgbcolor = getColumnColourFromSequence(allGroups, seq,
+ alignmentCol, finder);
// fill in the appropriate number of pixels
for (int row = pixelRow; row <= endRow; ++row)
* FeatureColourFinder to use
* @return colour of sequence at this position, as RGB
*/
- private int getColumnColourFromSequence(jalview.datamodel.SequenceI seq,
+ private int getColumnColourFromSequence(SequenceGroup[] allGroups,
+ jalview.datamodel.SequenceI seq,
int lastcol, FeatureColourFinder fcfinder)
{
Color color = Color.white;
if ((seq != null) && (seq.getLength() > lastcol))
{
- color = sr.getResidueColour(seq, lastcol, fcfinder);
+ color = resColFinder.getResidueColour(true, shader, allGroups, seq,
+ lastcol,
+ fcfinder);
}
return color.getRGB();
int colIndex = 0;
int pixelCol = 0;
- Color hidden = Color.DARK_GRAY.darker();
+ Color hidden = resColFinder.getHiddenColour();
Graphics2D g2d = (Graphics2D) hiddenImage.getGraphics();
}
else
{
- int endCol = Math.min(
- Math.round((colIndex + 1) * pixelsPerCol) - 1,
+ int endCol = Math.min(Math.round((colIndex + 1) * pixelsPerCol) - 1,
miniMe.getWidth() - 1);
if (annotations[alignmentCol] != null)
g.setColor(annotations[alignmentCol].colour);
}
- height = (int) ((annotations[alignmentCol].value / anno.graphMax) * y);
+ height = (int) ((annotations[alignmentCol].value / anno.graphMax)
+ * y);
if (height > y)
{
height = y;