Fastpaint updates
[jalview.git] / src / jalview / appletgui / AlignmentPanel.java
index bece508..e0c327f 100755 (executable)
@@ -113,10 +113,11 @@ public class AlignmentPanel extends Panel implements AdjustmentListener
     scalePanel.setSize(new Dimension(10, av.charHeight + fm.getDescent()));\r
     idwidthAdjuster.setSize(new Dimension(10, av.charHeight + fm.getDescent()));\r
 \r
-    annotationPanel.adjustPanelHeight();\r
+    int ap = annotationPanel.adjustPanelHeight();\r
     annotationPanel.repaint();\r
     Dimension d = calculateIdWidth();\r
     d.setSize(d.width + 4, seqPanel.seqCanvas.getSize().height);\r
+    alabels.setSize(d.width+4, ap );\r
     idPanel.idCanvas.setSize(d);\r
     hscrollFillerPanel.setSize(d);\r
 \r
@@ -184,49 +185,48 @@ public class AlignmentPanel extends Panel implements AdjustmentListener
     return new Dimension(idWidth, idPanel.idCanvas.getSize().height);\r
   }\r
 \r
-  public void highlightSearchResults(int[] results)\r
+  public void highlightSearchResults(SearchResults results)\r
   {\r
     seqPanel.seqCanvas.highlightSearchResults(results);\r
 \r
-    // do we need to scroll the panel?\r
+   // do we need to scroll the panel?\r
     if (results != null)\r
     {\r
-      SequenceI seq = av.alignment.getSequenceAt(results[0]);\r
-      int start = seq.findIndex(results[1]) - 1;\r
-      int end = seq.findIndex(results[2]) - 1;\r
+      SequenceI seq = results.getResultSequence(0);\r
+      int seqIndex = av.alignment.findIndex(seq);\r
+      int start = seq.findIndex(results.getResultStart(0)) - 1;\r
+      int end = seq.findIndex(results.getResultEnd(0)) - 1;\r
 \r
-      if(!av.wrapAlignment)\r
-      {\r
-        if ( (av.getStartRes() > start) || (av.getEndRes() < end) ||\r
-            ( (av.getStartSeq() > results[0]) ||\r
-             (av.getEndSeq() < results[0])))\r
+        if(!av.wrapAlignment)\r
         {\r
-          int newy = results[0];\r
-          if(start > av.alignment.getWidth() - hextent)\r
-          {\r
-            start = av.alignment.getWidth() - hextent;\r
-            if(start<0)\r
-              start = 0;\r
-          }\r
-          if(newy > av.alignment.getHeight() - vextent)\r
+          if ( (av.getStartRes() > end)  || (av.getEndRes() < start) ||\r
+             ( (av.getStartSeq() > seqIndex) || (av.getEndSeq() < seqIndex)))\r
           {\r
-            newy = av.alignment.getHeight() - vextent;\r
-            if(newy<0)\r
-              newy = 0;\r
+            if (start > av.alignment.getWidth() - hextent)\r
+            {\r
+              start = av.alignment.getWidth() - hextent;\r
+              if (start < 0)\r
+                start = 0;\r
+            }\r
+            if (seqIndex > av.alignment.getHeight() - vextent)\r
+            {\r
+              seqIndex = av.alignment.getHeight() - vextent;\r
+              if (seqIndex < 0)\r
+                seqIndex = 0;\r
+            }\r
+            setScrollValues(start, seqIndex);\r
           }\r
-          setScrollValues(start, newy);\r
         }\r
-      }\r
-      else\r
-      {\r
-        int cwidth = seqPanel.seqCanvas.getWrappedCanvasWidth(seqPanel.seqCanvas.getSize().width);\r
-        if( start<av.getStartRes() || start>(av.getStartRes()+cwidth) )\r
+        else\r
         {\r
-\r
-          vscroll.setValue(start / cwidth);\r
-          av.startRes = vscroll.getValue() * cwidth;\r
+          int cwidth = seqPanel.seqCanvas.getWrappedCanvasWidth(seqPanel.\r
+              seqCanvas.getSize().width);\r
+          if (start < av.getStartRes() || start > (av.getStartRes() + cwidth))\r
+          {\r
+            vscroll.setValue(start / cwidth);\r
+            av.startRes = vscroll.getValue() * cwidth;\r
+          }\r
         }\r
-      }\r
     }\r
 \r
     repaint();\r
@@ -296,8 +296,7 @@ public class AlignmentPanel extends Panel implements AdjustmentListener
       {\r
         return false;\r
       }\r
-      fastPaint = false;\r
-      vscroll.setValue(vscroll.getValue() - 1);\r
+      setScrollValues(hscroll.getValue(), vscroll.getValue()-1);\r
     }\r
     else\r
     {\r
@@ -305,10 +304,9 @@ public class AlignmentPanel extends Panel implements AdjustmentListener
       {\r
         return false;\r
       }\r
-      fastPaint = false;\r
-      vscroll.setValue(vscroll.getValue() + 1);\r
+      setScrollValues(hscroll.getValue(), vscroll.getValue()+1);\r
     }\r
-    fastPaint = true;\r
+    repaint();\r
     return true;\r
   }\r
 \r
@@ -321,8 +319,7 @@ public class AlignmentPanel extends Panel implements AdjustmentListener
       {\r
         return false;\r
       }\r
-      fastPaint = false;\r
-      hscroll.setValue(hscroll.getValue() - 1);\r
+      setScrollValues(hscroll.getValue()-1, vscroll.getValue());\r
     }\r
     else\r
     {\r
@@ -330,16 +327,15 @@ public class AlignmentPanel extends Panel implements AdjustmentListener
       {\r
         return false;\r
       }\r
-      fastPaint = false;\r
-      hscroll.setValue(hscroll.getValue() + 1);\r
+      setScrollValues(hscroll.getValue()+1, vscroll.getValue());\r
     }\r
-    fastPaint = true;\r
+\r
+    repaint();\r
     return true;\r
   }\r
 \r
   public void setScrollValues(int x, int y)\r
   {\r
-\r
     av.setStartRes(x);\r
     av.setStartSeq(y);\r
     av.setEndRes(x + seqPanel.seqCanvas.getSize().width / av.getCharWidth() - 1);\r
@@ -385,7 +381,6 @@ public class AlignmentPanel extends Panel implements AdjustmentListener
     av.setEndSeq(endSeq);\r
     hscroll.setValues(x, hextent, 0, av.getAlignment().getWidth());\r
     vscroll.setValues(y, vextent, 0, av.getAlignment().getHeight());\r
-\r
   }\r
 \r
   public void adjustmentValueChanged(AdjustmentEvent evt)\r
@@ -393,6 +388,7 @@ public class AlignmentPanel extends Panel implements AdjustmentListener
     int oldX = av.getStartRes();\r
     int oldY = av.getStartSeq();\r
 \r
+\r
     if (evt==null || evt.getSource() == hscroll)\r
     {\r
       int x = hscroll.getValue();\r
@@ -401,6 +397,7 @@ public class AlignmentPanel extends Panel implements AdjustmentListener
                    1);\r
     }\r
 \r
+\r
     if (evt==null || evt.getSource() == vscroll)\r
     {\r
       int offy = vscroll.getValue();\r
@@ -424,20 +421,31 @@ public class AlignmentPanel extends Panel implements AdjustmentListener
       overviewPanel.setBoxPosition();\r
     }\r
 \r
+    int scrollX = av.startRes - oldX;\r
+    int scrollY = av.startSeq - oldY;\r
+\r
     if (av.getWrapAlignment() || !fastPaint || MAC)\r
     {\r
       repaint();\r
     }\r
     else\r
     {\r
-      idPanel.idCanvas.fastPaint(av.getStartSeq() - oldY);\r
-      seqPanel.seqCanvas.fastPaint(av.getStartRes() - oldX,\r
-                                   av.getStartSeq() - oldY);\r
+      // Make sure we're not trying to draw a panel\r
+      // larger than the visible window\r
+      if(scrollX>av.endRes-av.startRes)\r
+      {\r
+        scrollX = av.endRes - av.startRes;\r
+      }\r
+      else if(scrollX<av.startRes-av.endRes)\r
+        scrollX = av.startRes - av.endRes;\r
+\r
+      idPanel.idCanvas.fastPaint(scrollY);\r
+      seqPanel.seqCanvas.fastPaint(scrollX,\r
+                                   scrollY);\r
 \r
       scalePanel.repaint();\r
       if (av.getShowAnnotation())\r
       {\r
-\r
         annotationPanel.fastPaint(av.getStartRes() - oldX);\r
       }\r
     }\r
@@ -451,6 +459,7 @@ public class AlignmentPanel extends Panel implements AdjustmentListener
 \r
   public void paint(Graphics g)\r
   {\r
+    invalidate();\r
     Dimension d = idPanel.idCanvas.getSize();\r
     idPanel.idCanvas.setSize(d.width, seqPanel.seqCanvas.getSize().height);\r
     annotationSpaceFillerHolder.setSize(d.width,\r