package jalview.gui; import java.awt.*; import java.awt.Graphics2D.*; import java.awt.image.*; import javax.swing.*; import jalview.datamodel.*; import jalview.analysis.*; public class IdCanvas extends JPanel { protected AlignViewport av; protected boolean showScores = true; protected int maxIdLength = -1; protected String maxIdStr = null; BufferedImage image; Graphics2D gg; int imgHeight=0; boolean fastPaint = false; public IdCanvas(AlignViewport av) { setLayout(new BorderLayout()); this.av = av; PaintRefresher.Register(this); } public void drawIdString(Graphics2D gg,SequenceI s,int i, int starty, int ypos) { int charHeight = av.getCharHeight(); if (av.getSelectionGroup()!=null && av.getSelectionGroup().sequences.contains(s)) { gg.setColor(Color.lightGray); gg.fillRect(0,AlignmentUtil.getPixelHeight(starty,i,charHeight)+ ypos,getWidth(),charHeight); gg.setColor(Color.white); } else { gg.setColor(s.getColor()); gg.fillRect(0,AlignmentUtil.getPixelHeight(starty,i,charHeight)+ ypos,getWidth(),charHeight); gg.setColor(Color.black); } String string = s.getName(); if(av.getShowFullId()) string = s.getDisplayId(); gg.drawString(string,0,AlignmentUtil.getPixelHeight(starty,i,charHeight) + ypos + charHeight- (charHeight/5)); } public void fastPaint(int vertical) { if(gg==null) { repaint(); return;} gg.copyArea( 0,0, getWidth(), imgHeight, 0, -vertical*av.charHeight ); int ss=av.startSeq, es=av.endSeq, transY = 0; if (vertical > 0) // scroll down { ss = es - vertical; if(ss av.endSeq) es = av.endSeq; } gg.translate(0, transY); drawIds(ss, es); gg.translate( 0, -transY ); fastPaint = true; repaint(); } public void paintComponent(Graphics g) { g.setColor(Color.white); g.fillRect(0, 0, getWidth(), getHeight()); if (fastPaint) { fastPaint = false; g.drawImage(image, 0, 0, this); return; } imgHeight = getHeight(); imgHeight -= imgHeight % av.charHeight; image = new BufferedImage(getWidth(), imgHeight, BufferedImage.TYPE_INT_RGB); gg = (Graphics2D) image.getGraphics(); //Fill in the background gg.setColor(Color.white); gg.fillRect(0, 0, getWidth(), imgHeight); gg.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); Font italic = new Font(av.getFont().getName(), Font.ITALIC, av.getFont().getSize()); gg.setFont(italic); drawIds( av.getStartSeq(), av.endSeq); g.drawImage(image, 0, 0, this); } void drawIds(int starty, int endy) { Color currentColor = Color.white; Color currentTextColor = Color.black; if (av.getWrapAlignment()) { int rowSize = av.getEndRes() - av.getStartRes(); // Draw the rest of the panels for(int ypos=2*av.charHeight, row=av.getEndRes()-rowSize; ypos <= getHeight() && row