Features added removed from alignment
[jalview.git] / src / jalview / gui / FeatureRenderer.java
index 829bafb..03080bd 100755 (executable)
@@ -24,6 +24,8 @@ import java.awt.*;
 \r
 import java.util.*;\r
 \r
+import java.awt.image.*;\r
+\r
 \r
 /**\r
  * DOCUMENT ME!\r
@@ -34,17 +36,15 @@ import java.util.*;
 public class FeatureRenderer\r
 {\r
     AlignViewport av;\r
-    SequenceGroup currentSequenceGroup = null;\r
-    SequenceGroup[] allGroups = null;\r
     Color resBoxColour;\r
-    Graphics graphics;\r
     float transparency = 1.0f;\r
     FontMetrics fm;\r
     int charOffset;\r
+    boolean drawText = true;\r
 \r
     // The following vector holds the features which are\r
     // to be added, in the correct order or rendering\r
-    Vector featuresDisplayed;\r
+    Vector featuresDisplayed = null;\r
 \r
     /**\r
      * Creates a new FeatureRenderer object.\r
@@ -58,6 +58,30 @@ public class FeatureRenderer
     }\r
 \r
     /**\r
+     * This is used by the Molecule Viewer to get the accurate colour\r
+     * of the rendered sequence\r
+     */\r
+    BufferedImage bi;\r
+    public synchronized Color findFeatureColour(Color initialCol, SequenceI seq, int i)\r
+    {\r
+      if(!av.showSequenceFeatures)\r
+        return initialCol;\r
+\r
+      if (bi == null)\r
+        bi = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB);\r
+\r
+      bi.setRGB(0,0, initialCol.getRGB());\r
+\r
+      drawText = false;\r
+\r
+      drawSequence(bi.getGraphics(), seq, i, i, 0, 0, 1, 1);\r
+      drawText = true;\r
+\r
+      return new Color(bi.getRGB(0, 0));\r
+    }\r
+\r
+\r
+    /**\r
      * DOCUMENT ME!\r
      *\r
      * @param g DOCUMENT ME!\r
@@ -74,7 +98,9 @@ public class FeatureRenderer
                              int start, int end, int x1, int y1, int width, int height)\r
     {\r
 \r
-      if (seq.getDatasetSequence().getSequenceFeatures() == null)\r
+//System.out.println(start+" "+end+" "+x1+" "+y1);\r
+      if (seq.getDatasetSequence().getSequenceFeatures() == null\r
+          || seq.getDatasetSequence().getSequenceFeatures().size()==0)\r
         return;\r
 \r
       fm = g.getFontMetrics();\r
@@ -89,7 +115,7 @@ public class FeatureRenderer
 \r
       String type;\r
       SequenceFeature sf;\r
-      if (featuresDisplayed == null || featuresDisplayed.size()==0)\r
+      if (featuresDisplayed == null)\r
         findAllFeatures();\r
 \r
       Enumeration e = featuresDisplayed.elements(), e2;\r
@@ -171,12 +197,14 @@ public class FeatureRenderer
 \r
             g.fillRect( (i - start) * width, y1, width, height);\r
 \r
-            g.setColor(Color.white);\r
-\r
-            charOffset = (width - fm.charWidth(s)) / 2;\r
-            g.drawString(String.valueOf(s),\r
-                         charOffset + x1 + (width * (i - start)),\r
-                         (y1 + height) - height/5);//pady = height / 5;\r
+            if(drawText)\r
+           {\r
+             g.setColor(Color.white);\r
+             charOffset = (width - fm.charWidth(s)) / 2;\r
+             g.drawString(String.valueOf(s),\r
+                          charOffset + x1 + (width * (i - start)),\r
+                          (y1 + height) - height / 5); //pady = height / 5;\r
+           }\r
           }\r
         }\r
     }\r
@@ -231,7 +259,7 @@ public class FeatureRenderer
       // The feature table will display high priority\r
       // features at the top, but theses are the ones\r
       // we need to render last, so invert the data\r
-      featuresDisplayed = new Vector();\r
+      featuresDisplayed.clear();\r
       for(int i=data.length-1; i>-1; i--)\r
       {\r
        String type = data[i][0].toString();\r