Translation should not be adjusted outside annotation loop
[jalview.git] / src / jalview / gui / SeqCanvas.java
index b4ef770..8a873a2 100755 (executable)
@@ -62,7 +62,7 @@ public class SeqCanvas extends JComponent
         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
@@ -328,9 +328,34 @@ public class SeqCanvas extends JComponent
             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
@@ -393,7 +418,16 @@ public class SeqCanvas extends JComponent
     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
@@ -529,14 +563,12 @@ public class SeqCanvas extends JComponent
                 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
@@ -602,7 +634,7 @@ public class SeqCanvas extends JComponent
             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