fix for arrayoutofbounds bug when secondary structure element extends whole width...
[jalview.git] / src / jalview / gui / AnnotationPanel.java
index 149f432..6371e86 100755 (executable)
@@ -42,7 +42,6 @@ public class AnnotationPanel
   final String COLOUR = "Colour";
   final Color HELIX_COLOUR = Color.red.darker();
   final Color SHEET_COLOUR = Color.green.darker().darker();
-
   /** DOCUMENT ME!! */
   AlignViewport av;
   AlignmentPanel ap;
@@ -71,10 +70,7 @@ public class AnnotationPanel
   public AnnotationPanel(AlignmentPanel ap)
   {
 
-    if (System.getProperty("os.name").startsWith("Mac"))
-    {
-      MAC = true;
-    }
+    MAC = new jalview.util.Platform().isAMac();
 
     ToolTipManager.sharedInstance().registerComponent(this);
     ToolTipManager.sharedInstance().setInitialDelay(0);
@@ -611,14 +607,14 @@ public class AnnotationPanel
     drawComponent(gg, av.startRes, av.endRes + 1);
     g.drawImage(image, 0, 0, this);
   }
-
   /**
-   * DOCUMENT ME!
+   * non-Thread safe repaint
    *
-   * @param horizontal DOCUMENT ME!
+   * @param horizontal repaint with horizontal shift in alignment
    */
   public void fastPaint(int horizontal)
   {
+
     if ( (horizontal == 0)
         || gg == null
         || av.alignment.getAlignmentAnnotation() == null
@@ -629,7 +625,6 @@ public class AnnotationPanel
       repaint();
       return;
     }
-
     gg.copyArea(0, 0, imgWidth, getHeight(), -horizontal * av.charWidth, 0);
 
     int sr = av.startRes;
@@ -653,7 +648,6 @@ public class AnnotationPanel
     gg.translate( -transX, 0);
 
     fastPaint = true;
-
     repaint();
 
   }
@@ -733,7 +727,7 @@ public class AnnotationPanel
     int lastSSX;
     int iconOffset = 0;
     boolean validRes = false;
-
+    boolean validEnd = false;
     boolean[] graphGroupDrawn = new boolean[aa.length];
 
     //\u03B2 \u03B1
@@ -867,10 +861,13 @@ public class AnnotationPanel
             && (row.annotations[column].displayCharacter.length() > 0))
         {
 
-          int charOffset = (av.charWidth -
-                            fm.charWidth(row.annotations[column].
-                                         displayCharacter.charAt(
-                                             0))) / 2;
+          int charOffset = (av.getCentreColumnLabels()) ? ((av.charWidth -
+                            fm.charsWidth(row.annotations[column].
+                                         displayCharacter.toCharArray(),0,
+                                         row.annotations[column].
+                                         displayCharacter.length())) / 2)
+                                         : (av.charWidth - fm.charWidth(row.annotations[column].
+                                                 displayCharacter.charAt(0))) / 2;
 
           if (row.annotations[column].colour == null)
             g.setColor(Color.black);
@@ -983,6 +980,9 @@ public class AnnotationPanel
       if (column >= row.annotations.length)
       {
         column = row.annotations.length - 1;
+        validEnd = false;
+      } else {
+        validEnd = true;
       }
 
       //  x ++;
@@ -1030,7 +1030,7 @@ public class AnnotationPanel
           case 'E':
             g.setColor(SHEET_COLOUR);
 
-            if (row.annotations[endRes] == null
+            if (!validEnd || row.annotations[endRes] == null
                 || row.annotations[endRes].secondaryStructure != 'E')
             {
               g.fillRect(lastSSX, y + 4 + iconOffset,