Jalview Imported Sources
[jalview.git] / src / jalview / gui / GraphRenderer.java
1 package jalview.gui;\r
2 \r
3 import jalview.datamodel.*;\r
4 import jalview.schemes.*;\r
5 import jalview.util.*;\r
6 \r
7 import java.awt.*;\r
8 import java.awt.geom.*;\r
9 import java.util.*;\r
10 \r
11 public class GraphRenderer implements RendererI {\r
12     protected Color   color = Color.black;\r
13     protected Color   maroon = new Color(200,0,50);\r
14 \r
15     public Color getResidueBoxColour(ColourSchemeI cs, SequenceI seq, int i) {\r
16         Color c = cs.findColour(seq,seq.getSequence(i,i+1),i,null);\r
17         return c;\r
18     }\r
19 \r
20     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) {\r
21 \r
22         int i      = start;\r
23         int length = seq.getLength();\r
24 \r
25         Color currentColor = Color.white;\r
26 \r
27         g.setColor(Color.black);\r
28 \r
29         int prev = -1;\r
30 \r
31         while (i <= end && i < length) {\r
32             char c = seq.getCharAt(i);\r
33 \r
34             if (c != '-') {\r
35             Vector values = (Vector)pid.elementAt(i-start);\r
36             int val = ((Integer)values.elementAt(seqnum)).intValue();\r
37 \r
38             int frac = (int)(100*val/(av.getPIDWindow()+1));\r
39 \r
40 //          if (frac > 95) {\r
41  //               g.setColor(maroon);\r
42   //          } else if (frac > 90) {\r
43 //              g.setColor(Color.red);\r
44 //          } else if (frac > 80) {\r
45 //              g.setColor(Color.orange);\r
46 //          } else if (frac > 70) {\r
47 //              g.setColor(Color.pink);\r
48 //          } else if (frac > 50) {\r
49 //              g.setColor(Color.yellow);\r
50 //          } else if (frac > 30) {\r
51 //              g.setColor(Color.lightGray);\r
52 //          }\r
53 \r
54             int baseline = av.getPIDBaseline();\r
55 \r
56             frac -= baseline;\r
57 \r
58             if (frac < 0) {\r
59               frac = 0;\r
60             }\r
61             if (baseline == 100) {\r
62                 baseline = 99;\r
63             }\r
64 \r
65              Graphics2D g2d = (Graphics2D)g;\r
66 \r
67              g2d.setColor(new Color(255*frac/(100-baseline),50*frac/(100-baseline),50*frac/(100-baseline)));\r
68 \r
69              //g.setColor(new Color(255*frac/(100-baseline),50*frac/(100-baseline),255-50*frac/(100-baseline)));\r
70              //g.fillRect(x1+(int)(width*(i-start)),y1+height - (int)(frac*height/(100-baseline)),\r
71                            //width,                      (int)(frac*height/(100-baseline)));\r
72 \r
73              int[] xpoints = new int[4];\r
74              int[] ypoints = new int[4];\r
75 \r
76              if (prev == -1) {\r
77                prev = y1 + height - (int)(frac*height/(100-baseline));\r
78              }\r
79 \r
80              //   1----2\r
81              //   |    |\r
82              //   4----3\r
83 \r
84              xpoints[0] = (x1+ (int)(width*(i-start)));\r
85              ypoints[0] = prev;\r
86 \r
87              xpoints[1] = (x1 + (int)(width*(i-start+1)));\r
88              ypoints[1] = y1 + height - (int)(frac*height/(100-baseline));\r
89 \r
90              xpoints[3] = (x1 + (int)(width*(i-start)));;\r
91              ypoints[3] = y1 + height;\r
92 \r
93              xpoints[2] = (x1  + (int)(width*(i-start+1)));\r
94              ypoints[2] = y1 + height;\r
95 \r
96              Polygon poly = new Polygon();\r
97 \r
98              poly.xpoints = xpoints;\r
99              poly.ypoints = ypoints;\r
100              poly.npoints = 4;\r
101 \r
102              g2d.fill(poly);\r
103 \r
104              if (width > 5) {\r
105                  g.setColor(Color.black);\r
106                  g.drawString(seq.getSequence().substring(i,i+1),x1+(int)(width*(i-start)),y1+height);\r
107              } else {\r
108                  g.setColor(Color.black);\r
109 \r
110                  if (prev != -1) {\r
111 \r
112               g.drawLine(x1+(int)(width*(i-start)-width/2),  prev,\r
113                          x1+(int)(width*(i-start+1)-width/2),y1+height - (int)(frac*height/(100-baseline)));\r
114               } else {\r
115               g.drawLine(x1+(int)(width*(i-start)),  y1+height - (int)(frac*height/(100-baseline)),\r
116                          x1+(int)(width*(i-start+1)),y1+height - (int)(frac*height/(100-baseline)));\r
117               }\r
118 \r
119             }\r
120             prev = ypoints[1];\r
121             }  else {\r
122               prev = -1;\r
123             }\r
124             i++;\r
125         }\r
126     }\r
127 \r
128 }\r