fr = new FeatureRenderer(av);\r
sr = new SequenceRenderer(av);\r
setLayout(new BorderLayout());\r
- PaintRefresher.Register(this, av.alignment);\r
+ PaintRefresher.Register(this, av.getSequenceSetId());\r
setBackground(Color.white);\r
}\r
\r
return;\r
}\r
\r
- img = new BufferedImage(imgWidth, imgHeight, BufferedImage.TYPE_INT_RGB);\r
- gg = (Graphics2D) img.getGraphics();\r
- gg.setFont(av.getFont());\r
+ if (img == null || imgWidth != img.getWidth() || imgHeight != img.getHeight())\r
+ {\r
+ try{\r
+ img = new BufferedImage(imgWidth, imgHeight,\r
+ BufferedImage.TYPE_INT_RGB);\r
+ gg = (Graphics2D) img.getGraphics();\r
+ gg.setFont(av.getFont());\r
+ }catch(OutOfMemoryError er)\r
+ {\r
+ System.gc();\r
+ System.out.println(er +" making image, SeqCanvas");\r
+ javax.swing.SwingUtilities.invokeLater(new Runnable()\r
+ {\r
+ public void run()\r
+ {\r
+ javax.swing.JOptionPane.showInternalMessageDialog(Desktop.\r
+ desktop,\r
+ "Out of memory creating alignment image!!"\r
+ +\r
+ "\nSee help files for increasing Java Virtual Machine memory."\r
+ , "Out of memory",\r
+ javax.swing.JOptionPane.WARNING_MESSAGE);\r
+ }\r
+ });\r
+\r
+ return;\r
+ }\r
+ }\r
\r
if (av.antiAlias)\r
gg.setRenderingHint(RenderingHints.KEY_ANTIALIASING,\r
String getMask()\r
{\r
String mask = "00";\r
- for (int i = av.alignment.getWidth(); i > 0; i /= 10)\r
+ int maxWidth = 0;\r
+ int tmp;\r
+ for(int i=0; i<av.alignment.getHeight(); i++)\r
+ {\r
+ tmp = av.alignment.getSequenceAt(i).getEnd();\r
+ if(tmp>maxWidth)\r
+ maxWidth = tmp;\r
+ }\r
+\r
+ for (int i = maxWidth; i > 0; i /= 10)\r
{\r
mask += "0";\r
}\r
\r
int endx;\r
int ypos = hgap;\r
- int maxwidth = av.alignment.getWidth();\r
+ int maxwidth = av.alignment.getWidth()-1;\r
\r
if(av.hasHiddenColumns)\r
maxwidth = av.getColumnSelection().findColumnPosition(maxwidth)-1;\r
annotations = new AnnotationPanel(av);\r
\r
annotations.drawComponent( (Graphics2D) g, startRes, endx+1);\r
- g.translate(0, -cHeight - ypos);\r
+ g.translate(0, -cHeight - ypos -3);\r
}\r
g.setClip(clip);\r
g.translate(-LABEL_WEST, 0);\r
\r
ypos += cHeight+getAnnotationHeight()+hgap;\r
- if(av.showAnnotation)\r
- ypos -= 3;\r
\r
startRes += cWidth;\r
}\r
g1.setColor(Color.blue);\r
\r
g1.drawLine( (blockEnd - blockStart + 1) * av.charWidth - 1,\r
- 0+offset,\r
+ 0 + offset,\r
(blockEnd - blockStart + 1) * av.charWidth - 1,\r
(endSeq - startSeq) * av.charHeight + offset);\r
}\r
}\r
\r
if ( (sx <= (endRes-startRes)*av.charWidth) &&\r
- group.getSequences(false).\r
+ group.getSequences(null).\r
contains(av.alignment.getSequenceAt(i)))\r
{\r
if ((bottom == -1) &&\r
- !group.getSequences(false).contains(\r
+ !group.getSequences(null).contains(\r
av.alignment.getSequenceAt(i + 1)))\r
{\r
bottom = sy + av.charHeight;\r
if (!inGroup)\r
{\r
if (((top == -1) && (i == 0)) ||\r
- !group.getSequences(false).contains(\r
+ !group.getSequences(null).contains(\r
av.alignment.getSequenceAt(i - 1)))\r
{\r
top = sy;\r