\r
import java.awt.*;\r
import javax.swing.*;\r
-import java.util.*;\r
+import java.awt.event.*;\r
import jalview.datamodel.*;\r
import jalview.schemes.*;\r
import jalview.analysis.*;\r
\r
public class SeqCanvas extends JPanel\r
{\r
+ ColourSchemeI globalColorScheme = null;\r
Image img;\r
Graphics gg;\r
int imgWidth;\r
int chunkHeight;\r
int chunkWidth;\r
\r
- ColourSchemeI cs = new ZappoColourScheme();\r
\r
public SeqCanvas(AlignViewport av)\r
{\r
this.av = av;\r
setLayout(new BorderLayout());\r
+\r
}\r
\r
- public void drawScale(int startx, int endx,double charWidth, int charHeight,int ypos) {\r
+ public void drawScale(int startx, int endx,int charWidth, int charHeight,int ypos) {\r
int scalestartx = startx - startx%10 + 10;\r
\r
gg.setColor(Color.black);\r
int endx = av.getEndRes();\r
int endy = av.getEndSeq();\r
\r
- double charWidth = av.getCharWidth();\r
- int charHeight = av.getCharHeight();\r
+ int charWidth = av.getCharWidth();\r
+ int charHeight = av.getCharHeight();\r
\r
- chunkWidth = (int)(getWidth()/charWidth);\r
+ chunkWidth = getWidth()/charWidth;\r
chunkHeight = (da.getHeight() + 2)*charHeight;\r
\r
av.setChunkHeight(chunkHeight);\r
{\r
// This is dragging horizontal scrollbar to the right\r
\r
- int delx = (int)((startx - oldstartx) * charWidth);\r
- int delx2 = (int)((oldendx - startx + 1) * charWidth);\r
+ int delx = (startx - oldstartx) * charWidth;\r
+ int delx2 = (oldendx - startx + 1) * charWidth;\r
\r
gg.copyArea(delx,0,delx2,AlignmentUtil.getPixelHeight(starty,endy,charHeight),-delx,0);\r
\r
{\r
// Horizontal scrollbar pulled to the left\r
\r
- int delx = (int)((oldstartx - startx) * charWidth);\r
- int delx2 = (int)((endx - oldstartx +1) * charWidth);\r
+ int delx = (oldstartx - startx) * charWidth;\r
+ int delx2 = (endx - oldstartx +1) * charWidth;\r
\r
gg.copyArea(0,0,delx2,AlignmentUtil.getPixelHeight(starty,endy,charHeight),delx,0);\r
\r
int dely = AlignmentUtil.getPixelHeight(oldstarty,starty,charHeight);\r
int dely2 = AlignmentUtil.getPixelHeight(starty,oldendy,charHeight);\r
\r
- gg.copyArea(0,dely,(int)((endx-startx+1)*charWidth),dely2,0,-dely);\r
+ gg.copyArea(0,dely,(endx-startx+1)*charWidth,dely2,0,-dely);\r
\r
if (starty > oldendy) {\r
drawPanel(gg,startx,endx,starty,endy,startx,starty,0);\r
int dely = AlignmentUtil.getPixelHeight(endy,oldendy,charHeight);\r
int dely2 = AlignmentUtil.getPixelHeight(oldstarty,endy,charHeight);\r
\r
- gg.copyArea(0,0,(int)((endx-startx+1)*charWidth),dely2,0,dely);\r
+ gg.copyArea(0,0,(endx-startx+1)*charWidth,dely2,0,dely);\r
\r
if (oldstarty > endy) {\r
drawPanel(gg,startx,endx,starty,endy,startx,starty,0);\r
oldendy = endy;\r
}\r
\r
- if ((oldendy -oldstarty) > (int)((getWidth() / av.getCharWidth()))) {\r
+ if ((oldendy -oldstarty) > (getWidth() / av.getCharWidth())) {\r
System.out.println("LIMITS ERROR LIMITS ERROR");\r
- System.out.println("Corrds " + (oldendy-oldstarty) + " " + (int)(getWidth()/av.getCharWidth()) + " " + getWidth() + " " + av.getCharWidth());\r
+ System.out.println("Corrds " + (oldendy-oldstarty) + " " + (getWidth()/av.getCharWidth()) + " " + getWidth() + " " + av.getCharWidth());\r
}\r
\r
\r
public void drawPanel(Graphics g,int x1,int x2, int y1, int y2,int startx, int starty,int offset) {\r
\r
/*\r
+ Startx and starty appear to be the same as x1, y1, unless you find different\r
+ x1 x2\r
+ y1**************************************************\r
+ * *\r
+ * *\r
+ * *\r
+ * *\r
+ **************************************************y2\r
+\r
+/*\r
System.out.println("drawPanel called with g = " + g);\r
System.out.println(" x1 = " + x1);\r
System.out.println(" x2 = " + x2);\r
*/\r
\r
g.setFont(av.getFont());\r
- double charWidth = av.getCharWidth();\r
- int charHeight = av.getCharHeight();\r
+ int charWidth = av.getCharWidth();\r
+ int charHeight = av.getCharHeight();\r
RendererI sr = av.getRenderer();\r
\r
\r
{\r
fillBackground(g,\r
Color.WHITE,\r
- (int)((x1-startx)*charWidth),\r
+ (x1-startx)*charWidth,\r
offset + AlignmentUtil.getPixelHeight(starty,y1,av.getCharHeight()),\r
- (int)((x2-x1+1)*charWidth),\r
+ (x2-x1+1)*charWidth,\r
offset + AlignmentUtil.getPixelHeight(y1,y2,av.getCharHeight()));\r
}\r
\r
SequenceI nextSeq;\r
- SequenceGroup group;\r
+ SequenceGroup group=null;\r
+ boolean newGroup=false;\r
+ int sx, sy, ex, ey;\r
+ int oldStartX=0,oldEndX=0,oldY=0;\r
for (int i = y1 ; i < y2 ;i++)\r
{\r
- /* if (av.getSelection().contains(av.getAlignment().getSequenceAt(i))) {\r
- r = fr;\r
- System.out.println("use feature renderer");\r
- } else if ( i == 0) {\r
- // r = br;\r
- } else if (av.getAlignment().getSequenceAt(i).getName().equals("CpG")) {\r
- r = cgr;\r
- System.out.println("cg renderer");\r
- }\r
-*/\r
nextSeq = av.getAlignment().getSequenceAt(i);\r
- group = av.alignment.findGroup( nextSeq );\r
- if( group!=null )\r
- {\r
- sr.drawSequence(g, group.cs, nextSeq,\r
- x1,\r
- x2,\r
- (int) ( (x1 - startx) * charWidth),\r
- offset + AlignmentUtil.getPixelHeight(starty, i, av.getCharHeight()),\r
- charWidth, charHeight,\r
- false, group.getDisplayBoxes(), group.getDisplayText(), group.getColourText(),\r
- null, i);\r
- }\r
+ if(group==null || group!=av.alignment.findGroup( nextSeq ))\r
+ newGroup = true;\r
else\r
+ newGroup = false;\r
+\r
+ group = av.alignment.findGroup( nextSeq );\r
+\r
+ sr.drawSequence(g, nextSeq, group,x1,x2,\r
+ (x1 - startx) * charWidth,\r
+ offset + AlignmentUtil.getPixelHeight(starty, i, av.getCharHeight()),\r
+ charWidth,charHeight,null, i);\r
+\r
+\r
+ if( group!=null )\r
{\r
- sr.drawSequence(g, cs, nextSeq,\r
- x1,\r
- x2,\r
- (int) ( (x1 - startx) * charWidth),\r
- offset + AlignmentUtil.getPixelHeight(starty, i, av.getCharHeight()),\r
- charWidth,charHeight,\r
- showScores, av.getShowBoxes(), av.getShowText(), av.getColourText(),\r
- null, i);\r
\r
- }\r
+ g.setColor(Color.GREEN);\r
\r
+ sx = (group.getStartRes()-startx)*charWidth;\r
+ sy = offset + AlignmentUtil.getPixelHeight(starty, i, av.getCharHeight());\r
+ ex = (group.getEndRes()+1-startx)*charWidth;\r
+ ey = offset + AlignmentUtil.getPixelHeight(starty, i+1, av.getCharHeight());\r
\r
- }\r
\r
+ if (newGroup)\r
+ {\r
+ g.drawLine(oldStartX, oldY, oldEndX, oldY); // Horizontal, bottom of old box\r
+ g.drawLine(sx, sy, ex, sy); // Horizontal, top of new box\r
+ }\r
+\r
+ g.drawLine(sx, sy, sx, ey ); // vertical line, left hand side\r
+ g.drawLine( ex,sy,ex,ey); // vertical line, right hand side\r
+ if (i == y2 - 1)// last line of alignment, seal the box\r
+ g.drawLine(sx, ey, ex, ey); // Horizontal, bottom of old box\r
+\r
+ oldStartX = sx;\r
+ oldEndX = ex;\r
+ oldY = ey;\r
+\r
+ }\r
+\r
+ }\r
\r
+ /// Highlight search Results once all sequences have been drawn\r
if(displaySearch)\r
{\r
for(int r=0; r<searchResults.length; r+=3)\r
ssr.drawHighlightedText(g, av.getAlignment().getSequenceAt(searchSeq),\r
searchStart,\r
searchEnd,\r
- (int) ( (searchStart - startx) * charWidth),\r
+ (searchStart - startx) * charWidth,\r
offset +\r
AlignmentUtil.getPixelHeight(starty, searchSeq,\r
charHeight),\r
- (int) charWidth,\r
+ charWidth,\r
charHeight);\r
-\r
}\r
}\r
}\r
\r
\r
+\r
+\r
+ /*bg.drawImage(image,0,0,null);\r
+ int size=width*height;\r
+ int pixel, b, x,y;\r
+ if(value!=0 )\r
+ {\r
+ if(painted!=null)\r
+ {\r
+ for(int i=0; i<size; i++)\r
+ {\r
+ if(painted[i] == value)\r
+ {\r
+ x = (i%width);\r
+ y = (i-x)/width;\r
+ pixel = buf.getRGB(x,y);\r
+ b = pixel & 0x000000ff;\r
+ pixel = (105<<24) | (0<<16)+32 | (0<<8)+32 | b;\r
+ buf.setRGB(x,y,pixel);\r
+ }\r
+ }\r
+\r
+ }\r
+ else\r
+ {\r
+ for(int i=0; i<size; i++)\r
+ {\r
+ if(paintedShort[i] == value)\r
+ {\r
+ x = (i%width);\r
+ y = (i-x)/width;\r
+ pixel = buf.getRGB(x,y);\r
+ b = pixel & 0x000000ff;\r
+ pixel = (105<<24) | (0<<16) | (0<<8) | b;\r
+ buf.setRGB(x,y,pixel);\r
+ }\r
+ }\r
+ }\r
+\r
+ }\r
+ oldvalue = value;\r
+ return (Image)buf;\r
+*/\r
+\r
}\r
\r
// public int groupX, groupY, groupendX, groupendY;\r