setgraphics black
[jalview.git] / src / jalview / gui / AnnotationPanel.java
index 2874494..77f557b 100755 (executable)
@@ -23,7 +23,15 @@ public class AnnotationPanel extends JPanel implements MouseListener, MouseMotio
   static Color HELIX_COLOUR = Color.red.darker();\r
   static Color SHEET_COLOUR = Color.green.darker().darker();\r
 \r
-  BufferedImage bi;\r
+\r
+  BufferedImage image;\r
+  Graphics2D gg;\r
+  FontMetrics fm;\r
+  int imgWidth=0;\r
+\r
+  boolean fastPaint = false;\r
+\r
+  public static int GRAPH_HEIGHT = 40;\r
 \r
 \r
 \r
@@ -64,7 +72,7 @@ public class AnnotationPanel extends JPanel implements MouseListener, MouseMotio
         aa[i].height += 16;\r
 \r
       if (aa[i].isGraph)\r
-        aa[i].height += 50;\r
+        aa[i].height += GRAPH_HEIGHT;\r
 \r
       if(aa[i].height==0)\r
         aa[i].height = 20;\r
@@ -303,8 +311,15 @@ public class AnnotationPanel extends JPanel implements MouseListener, MouseMotio
     }\r
 \r
     int res = evt.getX() / av.getCharWidth() + av.getStartRes();\r
-    if(row>-1 && aa[row].annotations[res]!=null)\r
+    if(row>-1 && res<aa[row].annotations.length && aa[row].annotations[res]!=null)\r
+    {\r
       this.setToolTipText(aa[row].annotations[res].description);\r
+      StringBuffer text = new StringBuffer("Sequence position " + (res + 1) +\r
+                                           "  " +\r
+                                           aa[row].annotations[res].description);\r
+      ap.alignFrame.statusBar.setText(text.toString());\r
+    }\r
+\r
 \r
   }\r
   public void mouseClicked(MouseEvent evt) {}\r
@@ -312,29 +327,77 @@ public class AnnotationPanel extends JPanel implements MouseListener, MouseMotio
 \r
   public void paintComponent(Graphics g)\r
   {\r
-    if(bi==null\r
-       || bi.getWidth()!=ap.annotationPanel.getWidth()\r
-       || bi.getHeight()!=ap.annotationPanel.getHeight())\r
+    g.setColor(Color.white);\r
+    g.fillRect(0,0,getWidth(), getHeight());\r
+\r
+    if(fastPaint)\r
     {\r
-      bi = new BufferedImage(ap.annotationPanel.getWidth(),\r
-                           ap.annotationPanel.getHeight(),\r
-                           BufferedImage.TYPE_INT_RGB);\r
+      g.drawImage(image, 0, 0, this);\r
+      fastPaint = false;\r
+      return;\r
     }\r
 \r
-    drawComponent( (Graphics2D)bi.getGraphics() );\r
-    g.drawImage( bi, 0, 0, this);\r
+    imgWidth = (av.endRes-av.startRes+1) *av.charWidth;\r
+\r
+    image = new BufferedImage(imgWidth,\r
+                                ap.annotationPanel.getHeight(),\r
+                                BufferedImage.TYPE_INT_RGB);\r
+      gg = (Graphics2D) image.getGraphics();\r
+      gg.setRenderingHint(RenderingHints.KEY_ANTIALIASING,\r
+                          RenderingHints.VALUE_ANTIALIAS_ON);\r
+\r
+      gg.setFont(av.getFont());\r
+      fm = gg.getFontMetrics();\r
+\r
+    drawComponent( gg, av.startRes, av.endRes+1);\r
+    g.drawImage( image, 0, 0, this);\r
+\r
   }\r
 \r
-  public void drawComponent(Graphics2D g)\r
+  public void fastPaint(int horizontal)\r
+{\r
+  if( horizontal == 0\r
+     || av.alignment.getAlignmentAnnotation()==null\r
+     || av.alignment.getAlignmentAnnotation().length<1\r
+    )\r
   {\r
-    g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);\r
-    FontMetrics fm = g.getFontMetrics();\r
-    g.setFont(av.getFont());\r
-    g.setColor(Color.white);\r
-    g.fillRect(0,0,getWidth(),getHeight());\r
+    repaint();\r
+    return;\r
+  }\r
 \r
+  gg.copyArea( 0,0, imgWidth, getHeight(), -horizontal*av.charWidth, 0 );\r
+  int sr=av.startRes, er=av.endRes+1, transX=0;\r
+\r
+  if(horizontal>0) // scrollbar pulled right, image to the left\r
+  {\r
+    transX =  (er-sr-horizontal)*av.charWidth;\r
+    sr = er - horizontal ;\r
+  }\r
+  else if(horizontal<0)\r
+  {\r
+    er = sr-horizontal;\r
+  }\r
+\r
+\r
+  gg.translate(transX, 0);\r
+\r
+  drawComponent(gg, sr, er);\r
+\r
+  gg.translate( -transX, 0 );\r
+\r
+  fastPaint = true;\r
+  repaint();\r
+}\r
+\r
+\r
+  public void drawComponent(Graphics2D g, int startRes, int endRes)\r
+  {\r
+    g.setColor(Color.white);\r
+    g.fillRect(0,0,(endRes-startRes) *av.charWidth, getHeight());\r
     if(av.alignment.getAlignmentAnnotation()==null || av.alignment.getAlignmentAnnotation().length<1)\r
     {\r
+      g.setColor(Color.white);\r
+      g.fillRect(0,0,getWidth(), getHeight());\r
       g.setColor(Color.black);\r
       g.drawString("Alignment has no annotations",20,15);\r
       return;\r
@@ -348,6 +411,7 @@ public class AnnotationPanel extends JPanel implements MouseListener, MouseMotio
     int iconOffset = av.charHeight/2;\r
     boolean validRes = false;\r
     //\u03B2 \u03B1\r
+\r
     for(int i=0; i<aa.length; i++)\r
     {\r
       AlignmentAnnotation row = aa[i];\r
@@ -366,11 +430,11 @@ public class AnnotationPanel extends JPanel implements MouseListener, MouseMotio
       else\r
         iconOffset = 0;\r
 \r
-      for(j=av.startRes; j<av.endRes+1; j++)\r
+      for(j=startRes; j<endRes; j++)\r
       {\r
         validRes = row.annotations[j]==null?false:true;\r
 \r
-       x = (j-av.getStartRes())*av.charWidth;\r
+       x = (j-startRes)*av.charWidth;\r
 \r
 \r
        if(activeRow==i)\r
@@ -383,7 +447,7 @@ public class AnnotationPanel extends JPanel implements MouseListener, MouseMotio
            {\r
              int v = Integer.parseInt(activeRes.get(n).toString()) ;\r
              if (v == j)\r
-               g.fillRect( (j-av.getStartRes()) * av.charWidth, y, av.charWidth, row.height);\r
+               g.fillRect( (j-startRes) * av.charWidth, y, av.charWidth, row.height);\r
            }\r
        }\r
 \r
@@ -391,9 +455,7 @@ public class AnnotationPanel extends JPanel implements MouseListener, MouseMotio
 \r
        if(validRes && row.annotations[j].displayCharacter.length()>0)\r
        {\r
-         int charOffset = (av.charWidth -\r
-                            fm.charWidth(row.annotations[j].displayCharacter.\r
-                                         charAt(0))) / 2;\r
+         int charOffset = (av.charWidth - fm.charWidth(row.annotations[j].displayCharacter.charAt(0)))/2;\r
          g.setColor( row.annotations[j].colour);\r
           if(j==0)\r
           {\r
@@ -447,7 +509,7 @@ public class AnnotationPanel extends JPanel implements MouseListener, MouseMotio
        if (validRes && row.isGraph)\r
        {\r
          g.setColor(new Color(0,0,180));\r
-         int height = (int)((row.annotations[j].value / row.graphMax)*50);\r
+         int height = (int)((row.annotations[j].value / row.graphMax)*GRAPH_HEIGHT);\r
 \r
          if(row.windowLength>1)\r
          {\r
@@ -461,10 +523,10 @@ public class AnnotationPanel extends JPanel implements MouseListener, MouseMotio
            }\r
 \r
            total/=row.windowLength;\r
-           height = (int)( (total / row.graphMax) *50);\r
+           height = (int)( (total / row.graphMax) *GRAPH_HEIGHT);\r
 \r
          }\r
-\r
+         g.setColor(row.annotations[j].colour);\r
          g.fillRect(x, y-height, av.charWidth, height );\r
        }\r
 \r
@@ -515,7 +577,7 @@ public class AnnotationPanel extends JPanel implements MouseListener, MouseMotio
     for(int j=0; j<aa.annotations.length; j++)\r
     {\r
       g.setColor(new Color(0, 0, 180));\r
-      int height = (int) ( (aa.annotations[j].value / aa.graphMax) * 50);\r
+      int height = (int) ( (aa.annotations[j].value / aa.graphMax) * GRAPH_HEIGHT );\r
       g.fillRect(x, y - height, av.charWidth, height);\r
       x+=av.charWidth;\r
     }\r