Smoother drawing
authoramwaterhouse <Andrew Waterhouse>
Thu, 10 Aug 2006 14:57:52 +0000 (14:57 +0000)
committeramwaterhouse <Andrew Waterhouse>
Thu, 10 Aug 2006 14:57:52 +0000 (14:57 +0000)
src/jalview/appletgui/OverviewPanel.java

index 4d3dec4..54e1ac2 100755 (executable)
@@ -26,6 +26,7 @@ public class OverviewPanel
     extends Panel implements Runnable, MouseMotionListener, MouseListener\r
 {\r
   Image miniMe;\r
+  Image offscreen;\r
   AlignViewport av;\r
   AlignmentPanel ap;\r
   float scalew = 1f;\r
@@ -252,17 +253,19 @@ public class OverviewPanel
     scaleh = (float) sequencesHeight / (float) fullsizeHeight;\r
 \r
     miniMe = nullFrame.createImage(width, sequencesHeight + graphHeight);\r
+    offscreen = nullFrame.createImage(width, sequencesHeight + graphHeight);\r
 \r
     Graphics mg = miniMe.getGraphics();\r
     float sampleCol = (float) alwidth / (float) width;\r
     float sampleRow = (float) alheight / (float) sequencesHeight;\r
 \r
-    int lastcol=-1, lastrow=-1;\r
+    int lastcol=0, lastrow=0;\r
+    int xstart=0, ystart=0;\r
     Color color = Color.yellow;\r
     int row, col, sameRow = 0, sameCol = 0;\r
     jalview.datamodel.SequenceI seq;\r
     boolean hiddenRow = false;\r
-    for (row = 0; row < sequencesHeight; row++)\r
+    for (row = 0; row <= sequencesHeight; row++)\r
     {\r
       if((int)(row*sampleRow)==lastrow)\r
       {\r
@@ -270,8 +273,6 @@ public class OverviewPanel
         continue;\r
       }\r
 \r
-      lastrow = (int)(row*sampleRow);\r
-\r
       hiddenRow = false;\r
       if (av.hasHiddenRows)\r
       {\r
@@ -291,12 +292,6 @@ public class OverviewPanel
       else\r
         seq = av.alignment.getSequenceAt(lastrow);\r
 \r
-      if(seq==null)\r
-      {\r
-        System.out.println(lastrow+" null");\r
-        continue;\r
-      }\r
-\r
         for (col = 0; col < width; col++)\r
         {\r
           if ( (int) (col * sampleCol) == lastcol && (int) (row * sampleRow) == lastrow)\r
@@ -328,12 +323,15 @@ public class OverviewPanel
 \r
           mg.setColor(color);\r
           if (sameCol == 1 && sameRow == 1)\r
-            mg.drawLine(col, row, col, row);\r
+            mg.drawLine(xstart, ystart, xstart, ystart);\r
           else\r
-            mg.fillRect(col, row, col+sameCol, col+sameRow);\r
+            mg.fillRect(xstart, ystart, sameCol, sameRow);\r
 \r
+          xstart = col;\r
           sameCol = 1;\r
       }\r
+      lastrow = (int)(row*sampleRow);\r
+      ystart = row;\r
       sameRow = 1;\r
     }\r
 \r
@@ -418,9 +416,14 @@ public class OverviewPanel
 \r
   public void paint(Graphics g)\r
   {\r
+    Graphics og = offscreen.getGraphics();\r
     if (miniMe != null)\r
     {\r
-      g.drawImage(miniMe, 0, 0, this);\r
+      og.drawImage(miniMe, 0, 0, this);\r
+      og.setColor(Color.red);\r
+      og.drawRect(boxX, boxY, boxWidth, boxHeight);\r
+      og.drawRect(boxX + 1, boxY + 1, boxWidth - 2, boxHeight - 2);\r
+      g.drawImage(offscreen, 0,0, this);\r
     }\r
     else\r
     {\r
@@ -431,10 +434,6 @@ public class OverviewPanel
       g.drawString("Recalculating", 5, sequencesHeight / 2);\r
       g.drawString("Overview.....", 5, (sequencesHeight / 2) + 20);\r
     }\r
-\r
-    g.setColor(Color.red);\r
-    g.drawRect(boxX, boxY, boxWidth, boxHeight);\r
-    g.drawRect(boxX + 1, boxY + 1, boxWidth - 2, boxHeight - 2);\r
   }\r
 \r
 }\r