Optimized Overview
authoramwaterhouse <Andrew Waterhouse>
Thu, 17 Nov 2005 15:16:48 +0000 (15:16 +0000)
committeramwaterhouse <Andrew Waterhouse>
Thu, 17 Nov 2005 15:16:48 +0000 (15:16 +0000)
src/jalview/appletgui/OverviewPanel.java
src/jalview/appletgui/SeqCanvas.java
src/jalview/gui/OverviewPanel.java

index 7910f2d..6164468 100755 (executable)
@@ -39,7 +39,8 @@ public class OverviewPanel
 \r
   // Can set different properties in this seqCanvas than\r
   // main visible SeqCanvas\r
-  SeqCanvas overviewSeq;\r
+  SequenceRenderer sr;\r
+  //FeatureRenderer fr;\r
 \r
 \r
   Frame nullFrame;\r
@@ -52,9 +53,13 @@ public class OverviewPanel
     nullFrame = new Frame();\r
     nullFrame.addNotify();\r
 \r
-    overviewSeq = new SeqCanvas(av);\r
-    overviewSeq.isOverview = true;\r
-    overviewSeq.sr.renderGaps = false;\r
+\r
+    sr = new SequenceRenderer(av);\r
+    sr.renderGaps( false );\r
+    //fr = new FeatureRenderer(av);\r
+    //fr.transparency = ap.seqPanel.seqCanvas.getFeatureRenderer().transparency;\r
+    //fr.featuresDisplayed = ap.seqPanel.seqCanvas.getFeatureRenderer().featuresDisplayed;\r
+\r
 \r
 \r
     // scale the initial size of overviewpanel to shape of alignment\r
@@ -231,31 +236,40 @@ public class OverviewPanel
     float sampleCol = (float) alwidth / (float) width;\r
     float sampleRow = (float) alheight / (float) sequencesHeight;\r
 \r
+    int lastcol=-1, lastrow=-1;\r
+    Color color = Color.white;\r
     for (int col = 0; col < width; col++)\r
     {\r
       for (int row = 0; row < sequencesHeight; row++)\r
       {\r
-        overviewSeq.drawPanel(mg,\r
-                                        (int) (col * sampleCol),\r
-                                        (int) (col * sampleCol),\r
-                                        (int) (row * sampleRow),\r
-                                        (int) (row * sampleRow) + 1,\r
-                                        (int) (col * sampleCol),\r
-                                        (int) (row * sampleRow), 0);\r
-        mg.translate(0, 1);\r
+        if((int)(col*sampleCol) == lastcol && (int)(row*sampleRow)==lastrow)\r
+        {\r
+          mg.setColor(color);\r
+          mg.fillRect(col,row,1,1);\r
+          continue;\r
+        }\r
+\r
+        lastrow = (int)(row*sampleRow);\r
+        lastcol = (int)(col*sampleCol);\r
+\r
+        color = sr.findSequenceColour(av.alignment.getSequenceAt(lastrow), lastcol);\r
+\r
+        mg.setColor(color);\r
+        mg.fillRect(col,row,1,1);\r
 \r
         if (av.conservation != null)\r
+        {\r
+          mg.translate(col, sequencesHeight);\r
           ap.annotationPanel.drawGraph(mg, av.conservation,\r
                                        (int) (sampleCol) + 1,\r
                                        graphHeight,\r
                                        (int) (col * sampleCol),\r
                                        (int) (col * sampleCol) + 1);\r
-\r
+          mg.translate(-col, -sequencesHeight);\r
+        }\r
       }\r
-      mg.translate(0, -sequencesHeight);\r
-      mg.translate(1, 0);\r
+    }\r
 \r
-        }\r
     System.gc();\r
 \r
     resizing = false;\r
index fc8bb5c..5d02825 100755 (executable)
@@ -43,7 +43,6 @@ public class SeqCanvas
 \r
   boolean fastPaint = false;\r
 \r
-  boolean isOverview = false;\r
 \r
   public SeqCanvas(AlignViewport av)\r
   {\r
@@ -472,7 +471,7 @@ public class SeqCanvas
       group = (SequenceGroup) groups.elementAt(0);\r
       groupIndex = 0;\r
     }\r
-    if (group != null && !isOverview)\r
+    if (group != null)\r
     {\r
         do\r
         {\r
index 534f68f..5391e78 100755 (executable)
@@ -49,7 +49,8 @@ public class OverviewPanel extends JPanel implements Runnable
 \r
     // Can set different properties in this seqCanvas than\r
     // main visible SeqCanvas\r
-    SeqCanvas overviewSeq;\r
+    SequenceRenderer sr;\r
+    FeatureRenderer fr;\r
 \r
     /**\r
      * Creates a new OverviewPanel object.\r
@@ -62,9 +63,11 @@ public class OverviewPanel extends JPanel implements Runnable
         this.ap = ap;\r
         setLayout(null);\r
 \r
-        overviewSeq = new SeqCanvas(av);\r
-        overviewSeq.isOverview = true;\r
-        overviewSeq.sr.renderGaps = false;\r
+        sr = new SequenceRenderer(av);\r
+        sr.renderGaps( false );\r
+        fr = new FeatureRenderer(av);\r
+        fr.transparency = ap.seqPanel.seqCanvas.getFeatureRenderer().transparency;\r
+        fr.featuresDisplayed = ap.seqPanel.seqCanvas.getFeatureRenderer().featuresDisplayed;\r
 \r
         // scale the initial size of overviewpanel to shape of alignment\r
         float initialScale = (float) av.alignment.getWidth() / (float) av.alignment.getHeight();\r
@@ -257,34 +260,50 @@ public class OverviewPanel extends JPanel implements Runnable
 \r
 \r
         Graphics mg = miniMe.getGraphics();\r
+        mg.setColor(Color.orange);\r
+        mg.fillRect(0,0,width, miniMe.getHeight());\r
 \r
         float sampleCol = (float) alwidth / (float) width;\r
         float sampleRow = (float) alheight / (float) sequencesHeight;\r
 \r
+        int lastcol=-1, lastrow=-1;\r
+        Color color = Color.white;\r
         for (int col = 0; col < width; col++)\r
         {\r
           for (int row = 0; row < sequencesHeight; row++)\r
           {\r
-            overviewSeq.drawPanel(mg,\r
-                                            (int) (col * sampleCol),\r
-                                            (int) (col * sampleCol),\r
-                                            (int) (row * sampleRow),\r
-                                            (int) (row * sampleRow) + 1,\r
-                                            (int) (col * sampleCol),\r
-                                            (int) (row * sampleRow), 0);\r
-            mg.translate(0, 1);\r
+            if((int)(col*sampleCol) == lastcol && (int)(row*sampleRow)==lastrow)\r
+            {\r
+              miniMe.setRGB(col,row,color.getRGB());\r
+              continue;\r
+            }\r
+\r
+            lastrow = (int)(row*sampleRow);\r
+            lastcol = (int)(col*sampleCol);\r
+\r
+            color = sr.findSequenceColour(Color.white,\r
+                av.alignment.getSequenceAt(lastrow), lastcol);\r
+\r
+            if(av.showSequenceFeatures)\r
+            {\r
+              color = fr.findFeatureColour(color,\r
+                                                       av.alignment.getSequenceAt(lastrow),\r
+                                                       lastcol);\r
+            }\r
+\r
+            miniMe.setRGB(col,row,color.getRGB());\r
 \r
             if (av.conservation != null)\r
+            {\r
+              mg.translate(col, sequencesHeight);\r
               ap.annotationPanel.drawGraph(mg, av.conservation,\r
                                            (int) (sampleCol) + 1,\r
                                            graphHeight,\r
                                            (int) (col * sampleCol),\r
                                            (int) (col * sampleCol) + 1);\r
-\r
+              mg.translate(-col, -sequencesHeight);\r
+            }\r
           }\r
-          mg.translate(0, -sequencesHeight);\r
-          mg.translate(1, 0);\r
-\r
         }\r
 \r
         System.gc();\r