package jalview.gui; import jalview.datamodel.*; import jalview.schemes.*; import jalview.util.*; import java.awt.*; import java.awt.geom.*; import java.util.*; public class GraphRenderer implements RendererI { protected Color color = Color.black; protected Color maroon = new Color(200,0,50); public Color getResidueBoxColour(ColourSchemeI cs, SequenceI seq, int i) { Color c = cs.findColour(seq,seq.getSequence(i,i+1),i,null); return c; } public void drawSequence(Graphics g,ColourSchemeI cs,SequenceI seq,int start, int end, int x1, int y1, double width, int height,boolean showScores, boolean displayBoxes, boolean displayText,Vector pid, int seqnum,AlignViewport av) { int i = start; int length = seq.getLength(); Color currentColor = Color.white; g.setColor(Color.black); int prev = -1; while (i <= end && i < length) { char c = seq.getCharAt(i); if (c != '-') { Vector values = (Vector)pid.elementAt(i-start); int val = ((Integer)values.elementAt(seqnum)).intValue(); int frac = (int)(100*val/(av.getPIDWindow()+1)); // if (frac > 95) { // g.setColor(maroon); // } else if (frac > 90) { // g.setColor(Color.red); // } else if (frac > 80) { // g.setColor(Color.orange); // } else if (frac > 70) { // g.setColor(Color.pink); // } else if (frac > 50) { // g.setColor(Color.yellow); // } else if (frac > 30) { // g.setColor(Color.lightGray); // } int baseline = av.getPIDBaseline(); frac -= baseline; if (frac < 0) { frac = 0; } if (baseline == 100) { baseline = 99; } Graphics2D g2d = (Graphics2D)g; g2d.setColor(new Color(255*frac/(100-baseline),50*frac/(100-baseline),50*frac/(100-baseline))); //g.setColor(new Color(255*frac/(100-baseline),50*frac/(100-baseline),255-50*frac/(100-baseline))); //g.fillRect(x1+(int)(width*(i-start)),y1+height - (int)(frac*height/(100-baseline)), //width, (int)(frac*height/(100-baseline))); int[] xpoints = new int[4]; int[] ypoints = new int[4]; if (prev == -1) { prev = y1 + height - (int)(frac*height/(100-baseline)); } // 1----2 // | | // 4----3 xpoints[0] = (x1+ (int)(width*(i-start))); ypoints[0] = prev; xpoints[1] = (x1 + (int)(width*(i-start+1))); ypoints[1] = y1 + height - (int)(frac*height/(100-baseline)); xpoints[3] = (x1 + (int)(width*(i-start)));; ypoints[3] = y1 + height; xpoints[2] = (x1 + (int)(width*(i-start+1))); ypoints[2] = y1 + height; Polygon poly = new Polygon(); poly.xpoints = xpoints; poly.ypoints = ypoints; poly.npoints = 4; g2d.fill(poly); if (width > 5) { g.setColor(Color.black); g.drawString(seq.getSequence().substring(i,i+1),x1+(int)(width*(i-start)),y1+height); } else { g.setColor(Color.black); if (prev != -1) { g.drawLine(x1+(int)(width*(i-start)-width/2), prev, x1+(int)(width*(i-start+1)-width/2),y1+height - (int)(frac*height/(100-baseline))); } else { g.drawLine(x1+(int)(width*(i-start)), y1+height - (int)(frac*height/(100-baseline)), x1+(int)(width*(i-start+1)),y1+height - (int)(frac*height/(100-baseline))); } } prev = ypoints[1]; } else { prev = -1; } i++; } } }