+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
package jalview.renderer.seqfeatures;
+import jalview.api.AlignViewportI;
import jalview.datamodel.SequenceFeature;
import jalview.datamodel.SequenceI;
+import jalview.viewmodel.seqfeatures.FeatureRendererModel;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
-public class FeatureRenderer extends
- jalview.viewmodel.seqfeatures.FeatureRendererModel
+public class FeatureRenderer extends FeatureRendererModel
{
FontMetrics fm;
boolean av_validCharWidth, av_isShowSeqFeatureHeight;
+ private Integer currentColour;
+
+ /**
+ * Constructor given a viewport
+ *
+ * @param viewport
+ */
+ public FeatureRenderer(AlignViewportI viewport)
+ {
+ this.av = viewport;
+ }
+
protected void updateAvConfig()
{
av_charHeight = av.getCharHeight();
charOffset = (av_charWidth - fm.charWidth(s)) / 2;
g.drawString(String.valueOf(s), charOffset
+ (av_charWidth * (i - start)), pady);
-
}
}
}
BufferedImage offscreenImage;
+ @Override
public Color findFeatureColour(Color initialCol, SequenceI seq, int res)
{
return new Color(findFeatureColour(initialCol.getRGB(), seq, res));
}
/**
- * This is used by the Molecule Viewer and Overview to get the accurate
- * colourof the rendered sequence
+ * This is used by the Molecule Viewer and Overview to get the accurate colour
+ * of the rendered sequence
*/
- public synchronized int findFeatureColour(int initialCol, final SequenceI seq,
- int column)
+ public synchronized int findFeatureColour(int initialCol,
+ final SequenceI seq, int column)
{
if (!av.isShowSequenceFeatures())
{
}
else
{
- return ((Integer) currentColour).intValue();
+ return currentColour.intValue();
}
}
// current feature to render
for (sfindex = 0; sfindex < sfSize; sfindex++)
{
- if (!lastSequenceFeatures[sfindex].type.equals(type))
+ final SequenceFeature sequenceFeature = lastSequenceFeatures[sfindex];
+ if (!sequenceFeature.type.equals(type))
{
continue;
}
if (featureGroups != null
- && lastSequenceFeatures[sfindex].featureGroup != null
- && lastSequenceFeatures[sfindex].featureGroup.length() != 0
- && featureGroups
- .containsKey(lastSequenceFeatures[sfindex].featureGroup)
- && !featureGroups
-.get(
- lastSequenceFeatures[sfindex].featureGroup)
+ && sequenceFeature.featureGroup != null
+ && sequenceFeature.featureGroup.length() != 0
+ && featureGroups.containsKey(sequenceFeature.featureGroup)
+ && !featureGroups.get(sequenceFeature.featureGroup)
.booleanValue())
{
continue;
}
if (!offscreenRender
- && (lastSequenceFeatures[sfindex].getBegin() > epos || lastSequenceFeatures[sfindex]
+ && (sequenceFeature.getBegin() > epos || sequenceFeature
.getEnd() < spos))
{
continue;
if (offscreenRender && offscreenImage == null)
{
- if (lastSequenceFeatures[sfindex].begin <= start
- && lastSequenceFeatures[sfindex].end >= start)
+ if (sequenceFeature.begin <= start
+ && sequenceFeature.end >= start)
{
// this is passed out to the overview and other sequence renderers
// (e.g. molecule viewer) to get displayed colour for rendered
// sequence
- currentColour = new Integer(
-getColour(
- lastSequenceFeatures[sfindex]).getRGB());
+ currentColour = new Integer(getColour(sequenceFeature).getRGB());
// used to be retreived from av.featuresDisplayed
// currentColour = av.featuresDisplayed
// .get(sequenceFeatures[sfindex].type);
}
}
- else if (lastSequenceFeatures[sfindex].type
- .equals("disulfide bond"))
+ else if (sequenceFeature.type.equals("disulfide bond"))
{
-
- renderFeature(g, seq,
- seq.findIndex(lastSequenceFeatures[sfindex].begin) - 1,
- seq.findIndex(lastSequenceFeatures[sfindex].begin) - 1,
- getColour(lastSequenceFeatures[sfindex])
+ renderFeature(g, seq, seq.findIndex(sequenceFeature.begin) - 1,
+ seq.findIndex(sequenceFeature.begin) - 1,
+ getColour(sequenceFeature)
// new Color(((Integer) av.featuresDisplayed
// .get(sequenceFeatures[sfindex].type)).intValue())
, start, end, y1);
- renderFeature(g, seq,
- seq.findIndex(lastSequenceFeatures[sfindex].end) - 1,
- seq.findIndex(lastSequenceFeatures[sfindex].end) - 1,
- getColour(lastSequenceFeatures[sfindex])
+ renderFeature(g, seq, seq.findIndex(sequenceFeature.end) - 1,
+ seq.findIndex(sequenceFeature.end) - 1,
+ getColour(sequenceFeature)
// new Color(((Integer) av.featuresDisplayed
// .get(sequenceFeatures[sfindex].type)).intValue())
, start, end, y1);
}
- else if (showFeature(lastSequenceFeatures[sfindex]))
+ else if (showFeature(sequenceFeature))
{
if (av_isShowSeqFeatureHeight
- && lastSequenceFeatures[sfindex].score != Float.NaN)
+ && !Float.isNaN(sequenceFeature.score))
{
renderScoreFeature(g, seq,
- seq.findIndex(lastSequenceFeatures[sfindex].begin) - 1,
- seq.findIndex(lastSequenceFeatures[sfindex].end) - 1,
- getColour(lastSequenceFeatures[sfindex]), start, end,
- y1, normaliseScore(lastSequenceFeatures[sfindex]));
+ seq.findIndex(sequenceFeature.begin) - 1,
+ seq.findIndex(sequenceFeature.end) - 1,
+ getColour(sequenceFeature), start, end, y1,
+ normaliseScore(sequenceFeature));
}
else
{
- renderFeature(g, seq,
- seq.findIndex(lastSequenceFeatures[sfindex].begin) - 1,
- seq.findIndex(lastSequenceFeatures[sfindex].end) - 1,
- getColour(lastSequenceFeatures[sfindex]), start, end,
- y1);
+ renderFeature(g, seq, seq.findIndex(sequenceFeature.begin) - 1,
+ seq.findIndex(sequenceFeature.end) - 1,
+ getColour(sequenceFeature), start, end, y1);
}
}
}
- if (transparency != 1.0f && g != null && transparencyAvailable)
+ if (transparency != 1.0f && g != null)
{
Graphics2D g2 = (Graphics2D) g;
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,
}
}
- boolean transparencyAvailable = true;
-
- protected void setTransparencyAvailable(boolean isTransparencyAvailable)
- {
- transparencyAvailable = isTransparencyAvailable;
- }
-
- @Override
- public boolean isTransparencyAvailable()
- {
- return transparencyAvailable;
- }
-
/**
* Called when alignment in associated view has new/modified features to
* discover and display.
*
*/
+ @Override
public void featuresAdded()
{
lastSeq = null;