/*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9)
- * Copyright (C) 2015 The Jalview Authors
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
*
* This file is part of Jalview.
*
*/
package jalview.appletgui;
-import jalview.api.FeatureRenderer;
import jalview.datamodel.SequenceGroup;
import jalview.datamodel.SequenceI;
-import jalview.schemes.ColourSchemeI;
+import jalview.renderer.ResidueShaderI;
+import jalview.renderer.seqfeatures.FeatureColourFinder;
import java.awt.Color;
import java.awt.Font;
public class SequenceRenderer implements jalview.api.SequenceRenderer
{
+ final static int CHAR_TO_UPPER = 'A' - 'a';
+
AlignViewport av;
FontMetrics fm;
this.renderGaps = renderGaps;
}
- public Color getResidueBoxColour(SequenceI seq, int i)
+ protected Color getResidueBoxColour(SequenceI seq, int i)
{
allGroups = av.getAlignment().findAllGroups(seq);
{
if (currentSequenceGroup.getDisplayBoxes())
{
- getBoxColour(currentSequenceGroup.cs, seq, i);
+ getBoxColour(currentSequenceGroup.getGroupColourScheme(), seq, i);
}
}
else if (av.getShowBoxes())
{
- getBoxColour(av.getGlobalColourScheme(), seq, i);
+ getBoxColour(av.getResidueShading(), seq, i);
}
return resBoxColour;
*
* @param seq
* @param position
- * @param fr
+ * @param finder
* @return
*/
@Override
public Color getResidueColour(final SequenceI seq, int position,
- FeatureRenderer fr)
+ FeatureColourFinder finder)
{
// TODO replace 8 or so code duplications with calls to this method
// (refactored as needed)
Color col = getResidueBoxColour(seq, position);
- if (fr != null)
+ if (finder != null)
{
- col = fr.findFeatureColour(col, seq, position);
+ col = finder.findFeatureColour(col, seq, position);
}
return col;
}
- void getBoxColour(ColourSchemeI cs, SequenceI seq, int i)
+ void getBoxColour(ResidueShaderI shader, SequenceI seq, int i)
{
- if (cs != null)
+ if (shader.getColourScheme() != null)
{
- resBoxColour = cs.findColour(seq.getCharAt(i), i, seq);
+ resBoxColour = shader.findColour(seq.getCharAt(i), i, seq);
}
else if (forOverview
&& !jalview.util.Comparison.isGap(seq.getCharAt(i)))
int length = seq.getLength();
int curStart = -1;
- int curWidth = av.getCharWidth(), avCharWidth = av.getCharWidth(), avCharHeight = av
- .getCharHeight();
+ int curWidth = av.getCharWidth(), avCharWidth = av.getCharWidth(),
+ avCharHeight = av.getCharHeight();
Color tempColour = null;
while (i <= end)
{
if (currentSequenceGroup.getDisplayBoxes())
{
- getBoxColour(currentSequenceGroup.cs, seq, i);
+ getBoxColour(currentSequenceGroup.getGroupColourScheme(), seq,
+ i);
}
}
else if (av.getShowBoxes())
{
- getBoxColour(av.getGlobalColourScheme(), seq, i);
+ getBoxColour(av.getResidueShading(), seq, i);
}
}
if (currentSequenceGroup.getColourText())
{
- getBoxColour(currentSequenceGroup.cs, seq, i);
+ getBoxColour(currentSequenceGroup.getGroupColourScheme(), seq, i);
graphics.setColor(resBoxColour.darker());
}
if (currentSequenceGroup.getShowNonconserved())
{
- s = getDisplayChar(srep, i, s, '.');
+ s = getDisplayChar(srep, i, s, '.', currentSequenceGroup);
}
}
else
if (av.getColourText())
{
- getBoxColour(av.getGlobalColourScheme(), seq, i);
+ getBoxColour(av.getResidueShading(), seq, i);
if (av.getShowBoxes())
{
graphics.setColor(resBoxColour.darker());
}
if (av.getShowUnconserved())
{
- s = getDisplayChar(srep, i, s, '.');
+ s = getDisplayChar(srep, i, s, '.', null);
}
}
}
charOffset = (avCharWidth - fm.charWidth(s)) / 2;
- graphics.drawString(String.valueOf(s), charOffset + avCharWidth
- * (i - start), y1);
+ graphics.drawString(String.valueOf(s),
+ charOffset + avCharWidth * (i - start), y1);
}
}
- private char getDisplayChar(final boolean usesrep, int position, char s,
- char c)
+ /**
+ * Returns 'conservedChar' to represent the given position if the sequence
+ * character at that position is equal to the consensus (ignoring case), else
+ * returns the sequence character
+ *
+ * @param usesrep
+ * @param position
+ * @param sequenceChar
+ * @param conservedChar
+ * @return
+ */
+ private char getDisplayChar(final boolean usesrep, int position,
+ char sequenceChar, char conservedChar, SequenceGroup currentGroup)
{
// TODO - use currentSequenceGroup rather than alignment
// currentSequenceGroup.getConsensus()
- char conschar = (usesrep) ? av.getAlignment().getSeqrep()
- .getCharAt(position)
- : av.getAlignmentConsensusAnnotation().annotations[position].displayCharacter
- .charAt(0);
- if (!jalview.util.Comparison.isGap(conschar) && s == conschar)
+ char conschar = (usesrep) ? (currentGroup == null
+ || position < currentGroup.getStartRes()
+ || position > currentGroup.getEndRes()
+ ? av.getAlignment().getSeqrep().getCharAt(position)
+ : (currentGroup.getSeqrep() != null
+ ? currentGroup.getSeqrep().getCharAt(position)
+ : av.getAlignment().getSeqrep()
+ .getCharAt(position)))
+ : (currentGroup != null && currentGroup.getConsensus() != null
+ && position >= currentGroup.getStartRes()
+ && position <= currentGroup.getEndRes()
+ && currentGroup
+ .getConsensus().annotations.length > position)
+ ? currentGroup
+ .getConsensus().annotations[position].displayCharacter
+ .charAt(0)
+ : av.getAlignmentConsensusAnnotation().annotations[position].displayCharacter
+ .charAt(0);
+ if (!jalview.util.Comparison.isGap(conschar)
+ && (sequenceChar == conschar
+ || sequenceChar + CHAR_TO_UPPER == conschar))
{
- s = c;
+ sequenceChar = conservedChar;
}
- return s;
+ return sequenceChar;
}
boolean inCurrentSequenceGroup(int res)
return false;
}
- public void drawHighlightedText(SequenceI seq, int start, int end,
- int x1, int y1)
+ public void drawHighlightedText(SequenceI seq, int start, int end, int x1,
+ int y1)
{
int avCharWidth = av.getCharWidth(), avCharHeight = av.getCharHeight();
int pady = avCharHeight / 5;
int charOffset = 0;
graphics.setColor(Color.black);
- graphics.fillRect(x1, y1, avCharWidth * (end - start + 1), avCharHeight);
+ graphics.fillRect(x1, y1, avCharWidth * (end - start + 1),
+ avCharHeight);
graphics.setColor(Color.white);
char s = '~';
}
charOffset = (avCharWidth - fm.charWidth(s)) / 2;
- graphics.drawString(String.valueOf(s), charOffset + x1
- + avCharWidth * (i - start), y1 + avCharHeight - pady);
+ graphics.drawString(String.valueOf(s),
+ charOffset + x1 + avCharWidth * (i - start),
+ y1 + avCharHeight - pady);
}
}
}