+\r
+ }\r
+\r
+ }\r
+\r
+ if(transparency!=1.0f && g!=null)\r
+ {\r
+ Graphics2D g2 = (Graphics2D) g;\r
+ g2.setComposite(\r
+ AlphaComposite.getInstance(\r
+ AlphaComposite.SRC_OVER, 1.0f));\r
+ }\r
+ }\r
+\r
+\r
+ char s;\r
+ int i;\r
+ void renderFeature(Graphics g, SequenceI seq,\r
+ int fstart, int fend, Color featureColour, int start, int end, int y1)\r
+ {\r
+\r
+ if (((fstart <= end) && (fend >= start)))\r
+ {\r
+ if (fstart < start)\r
+ { // fix for if the feature we have starts before the sequence start,\r
+ fstart = start; // but the feature end is still valid!!\r
+ }\r
+\r
+ if (fend >= end)\r
+ {\r
+ fend = end;\r
+ }\r
+ int pady = (y1 + av.charHeight) - av.charHeight / 5;\r
+ for (i = fstart; i <= fend; i++)\r
+ {\r
+ s = seq.getSequence().charAt(i);\r
+\r
+ if (jalview.util.Comparison.isGap(s))\r
+ {\r
+ continue;\r
+ }\r
+\r
+ g.setColor(featureColour);\r
+\r
+ g.fillRect( (i - start) * av.charWidth, y1, av.charWidth,av.charHeight);\r
+\r
+ if(offscreenRender || !av.validCharWidth)\r
+ continue;\r
+\r
+ g.setColor(Color.white);\r
+ charOffset = (av.charWidth - fm.charWidth(s)) / 2;\r
+ g.drawString(String.valueOf(s),\r
+ charOffset + (av.charWidth * (i - start)),\r
+ pady);\r
+\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ boolean newFeatureAdded = false;\r
+\r
+ public void featuresAdded()\r
+ {\r
+ findAllFeatures();\r
+ }\r
+\r
+ boolean findingFeatures = false;\r
+ synchronized void findAllFeatures()\r
+ {\r
+ newFeatureAdded = false;\r
+\r
+ if(findingFeatures)\r
+ {\r
+ newFeatureAdded = true;\r
+ return;\r
+ }\r
+\r
+ findingFeatures = true;\r
+ jalview.schemes.UserColourScheme ucs = new\r
+ jalview.schemes.UserColourScheme();\r
+\r
+ if(av.featuresDisplayed==null)\r
+ av.featuresDisplayed = new Hashtable();\r
+\r
+ av.featuresDisplayed.clear();\r
+\r
+ Vector allfeatures = new Vector();\r
+ for (int i = 0; i < av.alignment.getHeight(); i++)\r
+ {\r
+ SequenceFeature [] features\r
+ = av.alignment.getSequenceAt(i).getDatasetSequence().getSequenceFeatures();\r
+\r
+ if (features == null)\r
+ continue;\r
+\r
+ int index = 0;\r
+ while (index < features.length)\r
+ {\r
+ if (!av.featuresDisplayed.containsKey(features[index].getType()))\r
+ {\r
+ if(!(features[index].begin == 0 && features[index].end ==0))\r