1 package jalview.appletgui;
\r
3 import jalview.datamodel.*;
\r
4 import jalview.schemes.*;
\r
7 public class SequenceRenderer
\r
11 boolean renderGaps = true;
\r
12 SequenceGroup currentSequenceGroup = null;
\r
13 SequenceGroup [] allGroups = null;
\r
17 public SequenceRenderer(AlignViewport av)
\r
23 public void renderGaps(boolean b)
\r
28 public Color getResidueBoxColour(ColourSchemeI cs, SequenceI seq, int i)
\r
30 getBoxColour(cs, seq, i);
\r
31 return resBoxColour;
\r
34 void getBoxColour(ColourSchemeI cs, SequenceI seq, int i)
\r
37 resBoxColour = cs.findColour(seq.getSequence(i, i + 1), i);
\r
39 resBoxColour = Color.white;
\r
42 public void drawSequence(Graphics g,SequenceI seq,SequenceGroup [] sg, int start, int end, int x1, int y1, int width, int height)
\r
48 drawBoxes(seq, start, end, x1, y1, (int) width, height);
\r
50 fm = g.getFontMetrics();
\r
51 drawText(seq,start,end,x1,y1,(int)width,height);
\r
55 public void drawBoxes(SequenceI seq,int start, int end, int x1, int y1, int width, int height) {
\r
57 int length = seq.getLength();
\r
60 int curWidth = width;
\r
62 Color tempColour = null;
\r
63 while (i <= end && i < length)
\r
65 if(inCurrentSequenceGroup(i))
\r
67 if( currentSequenceGroup.getDisplayBoxes())
\r
68 getBoxColour(currentSequenceGroup.cs, seq, i);
\r
70 resBoxColour = Color.white;
\r
72 else if(av.getShowBoxes())
\r
73 getBoxColour(av.getGlobalColourScheme(), seq, i);
\r
75 resBoxColour = Color.white;
\r
78 if (resBoxColour != tempColour)
\r
80 if(tempColour!=null)
\r
81 graphics.fillRect(x1+width*(curStart-start),y1,curWidth,height);
\r
82 graphics.setColor(resBoxColour);
\r
86 tempColour = resBoxColour;
\r
96 graphics.fillRect(x1+width*(curStart-start),y1,curWidth,height);
\r
99 public void drawText(SequenceI seq,int start, int end, int x1, int y1, int width, int height)
\r
101 int pady = height/5;
\r
104 // Need to find the sequence position here.
\r
106 String sequence = seq.getSequence();
\r
107 for (int i = start; i <= end; i++)
\r
109 graphics.setColor(Color.black);
\r
110 if(i<sequence.length())
\r
111 s = sequence.charAt(i);
\r
115 if(!renderGaps && jalview.util.Comparison.isGap(s))
\r
119 if (inCurrentSequenceGroup(i))
\r
121 if(!currentSequenceGroup.getDisplayText())
\r
124 if (currentSequenceGroup.getColourText())
\r
126 getBoxColour(currentSequenceGroup.cs, seq, i);
\r
127 graphics.setColor(resBoxColour.darker());
\r
132 if(!av.getShowText())
\r
135 if(av.getColourText())
\r
137 getBoxColour(av.getGlobalColourScheme(), seq, i);
\r
138 if(av.getShowBoxes())
\r
139 graphics.setColor(resBoxColour.darker());
\r
141 graphics.setColor(resBoxColour);
\r
145 charOffset = (width - fm.charWidth(s))/2;
\r
146 graphics.drawString(String.valueOf(s),
\r
147 charOffset + x1 + width * (i - start),
\r
148 y1 + height - pady);
\r
154 boolean inCurrentSequenceGroup(int res)
\r
156 if(allGroups ==null)
\r
159 for(int i=0; i<allGroups.length; i++)
\r
160 if(allGroups[i].getStartRes()<=res && allGroups[i].getEndRes()>=res)
\r
162 currentSequenceGroup = allGroups[i];
\r
169 public void drawHighlightedText(SequenceI seq,int start, int end, int x1, int y1, int width, int height)
\r
171 int pady = height/5;
\r
173 graphics.setColor(Color.black);
\r
174 graphics.fillRect(x1,y1,width*(end-start+1),height);
\r
175 graphics.setColor(Color.white);
\r
178 // Need to find the sequence position here.
\r
179 for (int i = start; i <= end; i++)
\r
181 if(i<seq.getLength())
\r
182 s = seq.getSequence().charAt(i);
\r
184 charOffset = (width - fm.charWidth(s))/2;
\r
185 graphics.drawString(String.valueOf(s), charOffset + x1 + width * (i - start), y1 + height - pady);
\r