X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Frenderer%2FAnnotationRenderer.java;h=65631e34b33f15110b81611e81bb6b773694d6dd;hb=c932f0e85a8852824cdd8ce790af68682732c85c;hp=c61606ef41ffbdc2eab0a7f758a4ddbcd4c3cdf6;hpb=042832306c7e7aa0484079f3bab1e141b2944de5;p=jalview.git diff --git a/src/jalview/renderer/AnnotationRenderer.java b/src/jalview/renderer/AnnotationRenderer.java index c61606e..65631e3 100644 --- a/src/jalview/renderer/AnnotationRenderer.java +++ b/src/jalview/renderer/AnnotationRenderer.java @@ -20,6 +20,18 @@ */ package jalview.renderer; +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Image; +import java.awt.geom.AffineTransform; +import java.awt.image.ImageObserver; +import java.util.BitSet; +import java.util.Hashtable; + import jalview.analysis.AAFrequency; import jalview.analysis.CodingUtils; import jalview.analysis.Rna; @@ -30,24 +42,14 @@ import jalview.datamodel.Annotation; import jalview.datamodel.ColumnSelection; import jalview.datamodel.HiddenColumns; import jalview.datamodel.ProfilesI; +import jalview.renderer.api.AnnotationRendererFactoryI; +import jalview.renderer.api.AnnotationRowRendererI; import jalview.schemes.ColourSchemeI; import jalview.schemes.NucleotideColourScheme; import jalview.schemes.ResidueProperties; import jalview.schemes.ZappoColourScheme; import jalview.util.Platform; -import java.awt.BasicStroke; -import java.awt.Color; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.Image; -import java.awt.geom.AffineTransform; -import java.awt.image.ImageObserver; -import java.util.BitSet; -import java.util.Hashtable; - public class AnnotationRenderer { private static final int UPPER_TO_LOWER = 'a' - 'A'; // 32 @@ -149,11 +151,13 @@ public class AnnotationRenderer */ public void dispose() { + hiddenColumns = null; hconsensus = null; complementConsensus = null; hStrucConsensus = null; fadedImage = null; annotationPanel = null; + rendererFactoryI = null; } void drawStemAnnot(Graphics g, Annotation[] row_annotations, int lastSSX, @@ -225,7 +229,7 @@ public class AnnotationRenderer int iconOffset, int startRes, int column, boolean validRes, boolean validEnd) { - // System.out.println(nonCanColor); + // jalview.bin.Console.outPrintln(nonCanColor); g.setColor(nonCanColor); int sCol = (lastSSX / charWidth) @@ -241,7 +245,7 @@ public class AnnotationRenderer boolean diffdownstream = !validRes || !validEnd || row_annotations[column] == null || !dc.equals(row_annotations[column].displayCharacter); - // System.out.println("Column "+column+" diff up: "+diffupstream+" + // jalview.bin.Console.outPrintln("Column "+column+" diff up: "+diffupstream+" // down:"+diffdownstream); // If a closing base pair half of the stem, display a backward arrow if (column > 0 && Rna.isClosingParenthesis(dc)) @@ -312,6 +316,7 @@ public class AnnotationRenderer useClip = false; } + rendererFactoryI = AnnotationRendererFactory.getRendererFactory(); updateFromAlignViewport(av); } @@ -416,6 +421,10 @@ public class AnnotationRenderer return null; } + boolean rna = false; + + private AnnotationRendererFactoryI rendererFactoryI; + /** * Render the annotation rows associated with an alignment. * @@ -459,8 +468,8 @@ public class AnnotationRenderer boolean validRes = false; boolean validEnd = false; boolean labelAllCols = false; -// boolean centreColLabels; -// boolean centreColLabelsDef = av.isCentreColumnLabels(); + // boolean centreColLabels; + // boolean centreColLabelsDef = av.isCentreColumnLabels(); boolean scaleColLabel = false; final AlignmentAnnotation consensusAnnot = av .getAlignmentConsensusAnnotation(); @@ -506,7 +515,7 @@ public class AnnotationRenderer { continue; } -// centreColLabels = row.centreColLabels || centreColLabelsDef; + // centreColLabels = row.centreColLabels || centreColLabelsDef; labelAllCols = row.showAllColLabels; scaleColLabel = row.scaleColLabel; lastSS = ' '; @@ -775,7 +784,7 @@ public class AnnotationRenderer { // int nb_annot = x - temp; - // System.out.println("\t type :"+lastSS+"\t x :"+x+"\t nbre + // jalview.bin.Console.outPrintln("\t type :"+lastSS+"\t x :"+x+"\t nbre // annot :"+nb_annot); switch (lastSS) { @@ -997,7 +1006,7 @@ public class AnnotationRenderer case 'y': case 'Z': case 'z': - // System.out.println(lastSS); + // jalview.bin.Console.outPrintln(lastSS); Color nonCanColor = getNotCanonicalColor(lastSS); drawNotCanonicalAnnot(g, nonCanColor, row_annotations, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd); @@ -1062,6 +1071,32 @@ public class AnnotationRenderer row.graphMin, row.graphMax, y, renderHistogram, renderProfile, normaliseProfile); } + else + { + AnnotationRowRendererI renderer = rendererFactoryI + .getRendererFor(row); + if (renderer != null) + { + renderer.renderRow(g, charWidth, charHeight, hasHiddenColumns, + av, hiddenColumns, columnSelection, row, + row_annotations, startRes, endRes, row.graphMin, + row.graphMax, y); + } + if (debugRedraw) + { + if (renderer == null) + { + System.err + .println("No renderer found for " + row.toString()); + } + else + { + jalview.bin.Console.errPrintln( + "rendered with " + renderer.getClass().toString()); + } + } + + } } } else @@ -1087,17 +1122,17 @@ public class AnnotationRenderer { if (clipst) { - System.err.println( + jalview.bin.Console.errPrintln( "Start clip at : " + yfrom + " (index " + f_i + ")"); } if (clipend) { - System.err.println( + jalview.bin.Console.errPrintln( "End clip at : " + yto + " (index " + f_to + ")"); } } ; - System.err.println("Annotation Rendering time:" + jalview.bin.Console.errPrintln("Annotation Rendering time:" + (System.currentTimeMillis() - stime)); } ; @@ -1265,8 +1300,7 @@ public class AnnotationRenderer break; } - if (aa_annotations[column] == null - || aa_annotations[column - 1] == null) + if (aa_annotations[column] == null) { x++; continue; @@ -1281,6 +1315,25 @@ public class AnnotationRenderer g.setColor(aa_annotations[column].colour); } + if (aa_annotations[column - 1] == null + && aa_annotations.length > column + 1 + && aa_annotations[column + 1] == null) + { + // standalone value + y1 = y - (int) (((aa_annotations[column].value - min) / range) + * graphHeight); + g.drawLine(x * charWidth + charWidth / 4, y1, + x * charWidth + 3 * charWidth / 4, y1); + x++; + continue; + } + + if (aa_annotations[column - 1] == null) + { + x++; + continue; + } + y1 = y - (int) (((aa_annotations[column - 1].value - min) / range) * graphHeight); y2 = y - (int) (((aa_annotations[column].value - min) / range) @@ -1402,7 +1455,7 @@ public class AnnotationRenderer // lm is not necessary - we can just use fm - could be off by no more // than 0.5 px // LineMetrics lm = g.getFontMetrics(ofont).getLineMetrics("Q", g); - // System.out.println(asc + " " + dec + " " + (asc - lm.getAscent()) + // jalview.bin.Console.outPrintln(asc + " " + dec + " " + (asc - lm.getAscent()) // + " " + (dec - lm.getDescent())); double asc = fm.getAscent(); @@ -1515,6 +1568,8 @@ public class AnnotationRenderer .deriveFont(AffineTransform.getScaleInstance(sx, sy)); g.setFont(font); g.drawChars(dc, 0, dc.length, x * charWidth, hght); + g.setFont(ofont); + ht += newHeight; } } @@ -1694,7 +1749,7 @@ public class AnnotationRenderer return new Color(0, 80, 255); default: - System.out.println("This is not a interaction : " + lastss); + jalview.bin.Console.outPrintln("This is not a interaction : " + lastss); return null; }