3 import jalview.datamodel.*;
\r
4 import jalview.schemes.*;
\r
8 public class SequenceRenderer
\r
12 boolean renderGaps = true;
\r
13 SequenceGroup currentSequenceGroup = null;
\r
14 SequenceGroup [] allGroups = null;
\r
18 public SequenceRenderer(AlignViewport av)
\r
24 public void renderGaps(boolean b)
\r
29 public Color getResidueBoxColour(ColourSchemeI cs, SequenceI seq, int i)
\r
31 getBoxColour(cs, seq, i);
\r
32 return resBoxColour;
\r
35 void getBoxColour(ColourSchemeI cs, SequenceI seq, int i)
\r
38 resBoxColour = cs.findColour(seq.getSequence(i, i + 1), i);
\r
40 resBoxColour = Color.white;
\r
43 public void drawSequence(Graphics g,SequenceI seq,SequenceGroup [] sg, int start, int end, int x1, int y1, int width, int height)
\r
49 drawBoxes(seq, start, end, x1, y1, (int) width, height);
\r
51 fm = g.getFontMetrics();
\r
52 drawText(seq,start,end,x1,y1,(int)width,height);
\r
56 public void drawBoxes(SequenceI seq,int start, int end, int x1, int y1, int width, int height) {
\r
58 int length = seq.getLength();
\r
61 int curWidth = width;
\r
63 Color tempColour = null;
\r
64 while (i <= end && i < length)
\r
66 if(inCurrentSequenceGroup(i))
\r
68 if( currentSequenceGroup.getDisplayBoxes())
\r
69 getBoxColour(currentSequenceGroup.cs, seq, i);
\r
71 else if(av.getShowBoxes())
\r
72 getBoxColour(av.getGlobalColourScheme(), seq, i);
\r
74 resBoxColour = Color.white;
\r
77 if (resBoxColour != tempColour)
\r
79 if(tempColour!=null)
\r
80 graphics.fillRect(x1+width*(curStart-start),y1,curWidth,height);
\r
81 graphics.setColor(resBoxColour);
\r
85 tempColour = resBoxColour;
\r
95 graphics.fillRect(x1+width*(curStart-start),y1,curWidth,height);
\r
98 public void drawText(SequenceI seq,int start, int end, int x1, int y1, int width, int height)
\r
100 int pady = height/5;
\r
103 // Need to find the sequence position here.
\r
105 graphics.setColor(Color.black);
\r
106 String sequence = seq.getSequence();
\r
107 for (int i = start; i <= end; i++)
\r
109 if(i<sequence.length())
\r
110 s = sequence.charAt(i);
\r
114 if(!renderGaps && jalview.util.Comparison.isGap(s))
\r
118 if (inCurrentSequenceGroup(i))
\r
120 if(!currentSequenceGroup.getDisplayText())
\r
123 if (currentSequenceGroup.getColourText())
\r
125 getBoxColour(currentSequenceGroup.cs, seq, i);
\r
126 graphics.setColor(resBoxColour.darker());
\r
131 if(!av.getShowText())
\r
134 if(av.getColourText())
\r
136 getBoxColour(av.getGlobalColourScheme(), seq, i);
\r
137 if(av.getShowBoxes())
\r
138 graphics.setColor(resBoxColour.darker());
\r
140 graphics.setColor(resBoxColour);
\r
144 charOffset = (width - fm.charWidth(s))/2;
\r
145 graphics.drawString(String.valueOf(s),
\r
146 charOffset + x1 + width * (i - start),
\r
147 y1 + height - pady);
\r
153 boolean inCurrentSequenceGroup(int res)
\r
155 if(allGroups ==null)
\r
158 for(int i=0; i<allGroups.length; i++)
\r
159 if(allGroups[i].getStartRes()<=res && allGroups[i].getEndRes()>=res)
\r
161 currentSequenceGroup = allGroups[i];
\r
168 public void drawHighlightedText(SequenceI seq,int start, int end, int x1, int y1, int width, int height)
\r
170 int pady = height/5;
\r
172 graphics.setColor(Color.BLACK);
\r
173 graphics.fillRect(x1,y1,width*(end-start+1),height);
\r
174 graphics.setColor(Color.white);
\r
177 // Need to find the sequence position here.
\r
178 for (int i = start; i <= end; i++)
\r
180 if(i<seq.getLength())
\r
181 s = seq.getSequence().charAt(i);
\r
183 charOffset = (width - fm.charWidth(s))/2;
\r
184 graphics.drawString(String.valueOf(s), charOffset + x1 + width * (i - start), y1 + height - pady);
\r