JAL-2349 JAL-3855 bizarre resizing exception when resizing protein alignment for...
[jalview.git] / src / jalview / gui / AnnotationPanel.java
index d31e52d..786696c 100755 (executable)
@@ -150,6 +150,8 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI,
 
   private MouseWheelListener[] _mwl;
 
+  private boolean notJustOne;
+
   /**
    * Creates a new AnnotationPanel object.
    * 
@@ -776,6 +778,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI,
          * mostly vertical drag
          */
         dragMode = DragMode.Resize;
+        notJustOne = evt.isShiftDown();
 
         /*
          * but could also be a matrix drag
@@ -816,7 +819,20 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI,
           AlignmentAnnotation graphAnnotation = av.getAlignment()
                   .getAlignmentAnnotation()[graphStretch];
           int newHeight = Math.max(0, graphAnnotation.graphHeight + deltaY);
-          graphAnnotation.graphHeight = newHeight;
+          if (notJustOne)
+          {
+            for (AlignmentAnnotation similar : av.getAlignment()
+                    .findAnnotations(null, graphAnnotation.getCalcId(),
+                            graphAnnotation.label))
+            {
+              similar.graphHeight = newHeight;
+            }
+
+          }
+          else
+          {
+            graphAnnotation.graphHeight = newHeight;
+          }
           adjustPanelHeight();
           ap.paintAlignment(false, false);
         }
@@ -1268,24 +1284,37 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI,
     if (image == null || imgWidth != image.getWidth(this)
             || image.getHeight(this) != getHeight())
     {
-      try
-      {
-        image = new BufferedImage(imgWidth,
-                ap.getAnnotationPanel().getHeight(),
-                BufferedImage.TYPE_INT_RGB);
-      } catch (OutOfMemoryError oom)
+      boolean tried = false;
+      image = null;
+      while (image == null && !tried)
       {
         try
         {
-          System.gc();
-        } catch (Exception x)
+          image = new BufferedImage(imgWidth,
+                  ap.getAnnotationPanel().getHeight(),
+                  BufferedImage.TYPE_INT_RGB);
+          tried = true;
+        } catch (IllegalArgumentException exc)
         {
+          System.err.println(
+                  "Serious issue with viewport geometry imgWidth requested was "
+                          + imgWidth);
+          return;
+        } catch (OutOfMemoryError oom)
+        {
+          try
+          {
+            System.gc();
+          } catch (Exception x)
+          {
+          }
+          ;
+          new OOMWarning(
+                  "Couldn't allocate memory to redraw screen. Please restart Jalview",
+                  oom);
+          return;
         }
-        ;
-        new OOMWarning(
-                "Couldn't allocate memory to redraw screen. Please restart Jalview",
-                oom);
-        return;
+
       }
       gg = (Graphics2D) image.getGraphics();