X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Frenderer%2Fseqfeatures%2FFeatureRenderer.java;h=f8e2cefa0ab217810e5b37362de46ed4ffc1d048;hb=3ab582bfeeab1563bedf60e97994e63e672d2e31;hp=362ef5eca4a1513f1c9ef9f3ddcb436559140c9d;hpb=b13f521553582ef2fbfd7815ae25e23284babdea;p=jalview.git diff --git a/src/jalview/renderer/seqfeatures/FeatureRenderer.java b/src/jalview/renderer/seqfeatures/FeatureRenderer.java index 362ef5e..f8e2cef 100644 --- a/src/jalview/renderer/seqfeatures/FeatureRenderer.java +++ b/src/jalview/renderer/seqfeatures/FeatureRenderer.java @@ -1,7 +1,29 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9.0b2) + * Copyright (C) 2015 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 . + * 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; @@ -10,8 +32,7 @@ import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; -public class FeatureRenderer extends - jalview.viewmodel.seqfeatures.FeatureRendererModel +public class FeatureRenderer extends FeatureRendererModel { FontMetrics fm; @@ -30,6 +51,18 @@ public class FeatureRenderer extends 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(); @@ -142,24 +175,24 @@ public class FeatureRenderer extends 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()) { @@ -226,7 +259,7 @@ public class FeatureRenderer extends } else { - return ((Integer) currentColour).intValue(); + return currentColour.intValue(); } } @@ -293,26 +326,24 @@ public class FeatureRenderer extends // 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; @@ -320,59 +351,51 @@ public class FeatureRenderer extends 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); } } @@ -380,7 +403,7 @@ getColour( } - if (transparency != 1.0f && g != null && transparencyAvailable) + if (transparency != 1.0f && g != null) { Graphics2D g2 = (Graphics2D) g; g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, @@ -388,24 +411,12 @@ getColour( } } - 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;