JAL-3210 Barebones gradle/buildship/eclipse. See README
[jalview.git] / src / jalview / gui / SeqCanvas.java
index 123e649..e962709 100755 (executable)
@@ -352,6 +352,9 @@ public class SeqCanvas extends JPanel implements ViewportListenerI
       gg.copyArea(horizontal * charWidth, vertical * charHeight,
               img.getWidth(), img.getHeight(), -horizontal * charWidth,
               -vertical * charHeight);
+
+      /** @j2sNative xxi = this.img */
+
       gg.translate(transX, transY);
       drawPanel(gg, startRes, endRes, startSeq, endSeq, 0);
       gg.translate(-transX, -transY);
@@ -372,22 +375,18 @@ public class SeqCanvas extends JPanel implements ViewportListenerI
   public void paintComponent(Graphics g)
   {
 
-    if (av.getAlignPanel().getHoldRepaint())
-    {
-      return;
-    }
     int charHeight = av.getCharHeight();
     int charWidth = av.getCharWidth();
 
-    int availWidth = getWidth();
-    int availHeight = getHeight();
+    int width = getWidth();
+    int height = getHeight();
 
-    availWidth -= (availWidth % charWidth);
-    availHeight -= (availHeight % charHeight);
+    width -= (width % charWidth);
+    height -= (height % charHeight);
 
     // BH 2019 can't possibly fastPaint if either width or height is 0
 
-    if (availWidth == 0 || availHeight == 0)
+    if (width == 0 || height == 0)
     {
       return;
     }
@@ -437,11 +436,10 @@ public class SeqCanvas extends JPanel implements ViewportListenerI
       // img is a cached version of the last view we drew.
       // If we have no img or the size has changed, make a new one.
       //
-      if (img == null || availWidth != img.getWidth()
-              || availHeight != img.getHeight())
+      if (img == null || width != img.getWidth()
+              || height != img.getHeight())
       {
-        img = new BufferedImage(availWidth, availHeight,
-                BufferedImage.TYPE_INT_RGB);
+        img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
       }
 
       Graphics2D gg = (Graphics2D) img.getGraphics();
@@ -454,11 +452,11 @@ public class SeqCanvas extends JPanel implements ViewportListenerI
       }
 
       gg.setColor(Color.white);
-      gg.fillRect(0, 0, availWidth, availHeight);
+      gg.fillRect(0, 0, img.getWidth(), img.getHeight());
 
       if (av.getWrapAlignment())
       {
-        drawWrappedPanel(gg, availWidth, availHeight, ranges.getStartRes());
+        drawWrappedPanel(gg, width, height, ranges.getStartRes());
       }
       else
       {
@@ -526,31 +524,32 @@ public class SeqCanvas extends JPanel implements ViewportListenerI
   }
 
   /**
-   * Using the current font, determine fields labelWidthEast and labelWidthWest,
-   * and return the number of residues that can fill the remaining width.
+   * Returns the visible width of the canvas in residues, after allowing for
+   * East or West scales (if shown)
    * 
-   * @param width
+   * @param canvasWidth
    *          the width in pixels (possibly including scales)
    * 
-   * @return the visible width in residues, after allowing for East or West
-   *         scales (if shown)
-   * 
+   * @return
    */
-  public int getWrappedCanvasWidth(int width)
+  public int getWrappedCanvasWidth(int canvasWidth)
   {
     int charWidth = av.getCharWidth();
 
     FontMetrics fm = getFontMetrics(av.getFont());
 
-    int labelWidth = (av.getScaleRightWrapped() || av.getScaleLeftWrapped()
-            ? getLabelWidth(fm)
-            : 0);
+    int labelWidth = 0;
+    
+    if (av.getScaleRightWrapped() || av.getScaleLeftWrapped())
+    {
+      labelWidth = getLabelWidth(fm);
+    }
 
     labelWidthEast = av.getScaleRightWrapped() ? labelWidth : 0;
 
     labelWidthWest = av.getScaleLeftWrapped() ? labelWidth : 0;
 
-    return (width - labelWidthEast - labelWidthWest) / charWidth;
+    return (canvasWidth - labelWidthEast - labelWidthWest) / charWidth;
   }
 
   /**
@@ -576,7 +575,6 @@ public class SeqCanvas extends JPanel implements ViewportListenerI
       maxWidth = Math.max(maxWidth, alignment.getSequenceAt(i).getEnd());
     }
 
-    // quick int log10
     int length = 0;
     for (int i = maxWidth; i > 0; i /= 10)
     {
@@ -591,18 +589,18 @@ public class SeqCanvas extends JPanel implements ViewportListenerI
    * window
    * 
    * @param g
-   * @param availWidth
+   * @param canvasWidth
    *          available width in pixels
-   * @param availHeight
+   * @param canvasHeight
    *          available height in pixels
    * @param startColumn
    *          the first column (0...) of the alignment to draw
    */
-  public void drawWrappedPanel(Graphics g, int availWidth, int availHeight,
-          final int startColumn)
+  public void drawWrappedPanel(Graphics g, int canvasWidth,
+          int canvasHeight, final int startColumn)
   {
-    int wrappedWidthInResidues = calculateWrappedGeometry(availWidth,
-            availHeight);
+    int wrappedWidthInResidues = calculateWrappedGeometry(canvasWidth,
+            canvasHeight);
 
     av.setWrappedWidth(wrappedWidthInResidues);
 
@@ -612,7 +610,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI
     // we need to call this again to make sure the startColumn +
     // wrappedWidthInResidues values are used to calculate wrappedVisibleWidths
     // correctly.
-    calculateWrappedGeometry(availWidth, availHeight);
+    calculateWrappedGeometry(canvasWidth, canvasHeight);
 
     /*
      * draw one width at a time (excluding any scales shown),
@@ -627,7 +625,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI
     {
       int endColumn = Math
               .min(maxWidth, start + wrappedWidthInResidues - 1);
-      drawWrappedWidth(g, ypos, start, endColumn, availHeight);
+      drawWrappedWidth(g, ypos, start, endColumn, canvasHeight);
       ypos += wrappedRepeatHeightPx;
       start += wrappedWidthInResidues;
       currentWidth++;
@@ -646,11 +644,11 @@ public class SeqCanvas extends JPanel implements ViewportListenerI
    * <li>whether scales are shown left, right or above the alignment</li>
    * </ul>
    * 
-   * @param availWidth
-   * @param availHeight
+   * @param canvasWidth
+   * @param canvasHeight
    * @return the number of residue columns in each width
    */
-  protected int calculateWrappedGeometry(int availWidth, int availHeight)
+  protected int calculateWrappedGeometry(int canvasWidth, int canvasHeight)
   {
     int charHeight = av.getCharHeight();
 
@@ -684,8 +682,8 @@ public class SeqCanvas extends JPanel implements ViewportListenerI
      * ensuring a part height includes at least one sequence
      */
     ViewportRanges ranges = av.getRanges();
-    wrappedVisibleWidths = availHeight / wrappedRepeatHeightPx;
-    int remainder = availHeight % wrappedRepeatHeightPx;
+    wrappedVisibleWidths = canvasHeight / wrappedRepeatHeightPx;
+    int remainder = canvasHeight % wrappedRepeatHeightPx;
     if (remainder >= (wrappedSpaceAboveAlignment + charHeight))
     {
       wrappedVisibleWidths++;
@@ -694,7 +692,7 @@ public class SeqCanvas extends JPanel implements ViewportListenerI
     /*
      * compute width in residues; this also sets East and West label widths
      */
-    int wrappedWidthInResidues = getWrappedCanvasWidth(availWidth);
+    int wrappedWidthInResidues = getWrappedCanvasWidth(canvasWidth);
 
     /*
      *  limit visibleWidths to not exceed width of alignment
@@ -1681,164 +1679,92 @@ public class SeqCanvas extends JPanel implements ViewportListenerI
   public void propertyChange(PropertyChangeEvent evt)
   {
     String eventName = evt.getPropertyName();
-
-    // BH 2019.07.27 removes dead code introduced in aad3650 and simplifies
-    // logic, emphasizing no check for ENDRES or ENDSEQ
-
-    // Both scrolling and resizing change viewport ranges: scrolling changes
-    // both start and end points, but resize only changes end values.
-    // Here we only want to fastpaint on a scroll, with resize using a normal
-    // paint, so scroll events are identified as changes to the horizontal or
-    // vertical start value.
-
-    // Make sure we're not trying to draw a panel
-    // larger than the visible window
-    int scrollX = 0;
-    int scrollY = 0;
-    switch (eventName)
+    // System.err.println(">>SeqCanvas propertyChange " + eventName);
+    if (eventName.equals(SequenceGroup.SEQ_GROUP_CHANGED))
     {
-    case SequenceGroup.SEQ_GROUP_CHANGED:
       fastPaint = true;
       repaint();
       return;
-    case ViewportRanges.MOVE_VIEWPORT:
+    }
+    else if (eventName.equals(ViewportRanges.MOVE_VIEWPORT))
+    {
       fastPaint = false;
+      // System.err.println("!!!! fastPaint false from MOVE_VIEWPORT");
       repaint();
       return;
-    case ViewportRanges.STARTSEQ:
-      // meaning STARTOREND
-      // typically scroll, but possibly just the end changed
-      fastPaint(0, (int) evt.getNewValue() - (int) evt.getOldValue());
-      return;
-    case ViewportRanges.ENDRES:
-    case ViewportRanges.ENDSEQ:
-      // meaning second event along with "START" -- ENDONLY,NOTSTART
-      // TODO: ignore??
-      return;
-    case ViewportRanges.STARTRES:
-      // meaning STARTOREND
-      scrollX = (int) evt.getNewValue() - (int) evt.getOldValue();
-      break;
-    case ViewportRanges.STARTRESANDSEQ:
-      scrollX = ((int[]) evt.getNewValue())[0]
-              - ((int[]) evt.getOldValue())[0];
-      scrollY = ((int[]) evt.getNewValue())[1]
-              - ((int[]) evt.getOldValue())[1];
-
-      // System.out.println("SC dx dy " + scrollX + " " + scrollY);
-
-      if (scrollX != 0 && scrollY != 0)
-      {
-        // all sorts of problems in JavaScript if this is commented out.
-        repaint();
-        return;
-
-      }
-      break;
     }
 
-    ViewportRanges vpRanges = av.getRanges();
-    int range = vpRanges.getEndRes() - vpRanges.getStartRes() + 1;
-    scrollX = Math.max(Math.min(scrollX, range), -range);
-    // only STARTRES or STARTRESANDSEQ:
-    if (av.getWrapAlignment())
-    {
-      fastPaintWrapped(scrollX);
-    }
-    else
+    int scrollX = 0;
+    if (eventName.equals(ViewportRanges.STARTRES)
+            || eventName.equals(ViewportRanges.STARTRESANDSEQ))
     {
-      fastPaint(scrollX, scrollY);
-    }
+      // Make sure we're not trying to draw a panel
+      // larger than the visible window
+      if (eventName.equals(ViewportRanges.STARTRES))
+      {
+        scrollX = (int) evt.getNewValue() - (int) evt.getOldValue();
+      }
+      else
+      {
+        scrollX = ((int[]) evt.getNewValue())[0]
+                - ((int[]) evt.getOldValue())[0];
+      }
+      ViewportRanges vpRanges = av.getRanges();
 
-    // BH 2019.07.27 was:
-    // if (eventName.equals(SequenceGroup.SEQ_GROUP_CHANGED))
-    // {
-    // fastPaint = true;
-    // repaint();
-    // return;
-    // }
-    // else if (eventName.equals(ViewportRanges.MOVE_VIEWPORT))
-    // {
-    // fastPaint = false;
-    // // System.err.println("!!!! fastPaint false from MOVE_VIEWPORT");
-    // repaint();
-    // return;
-    // }
-    //
-    // if (eventName.equals(ViewportRanges.STARTRES)
-    // || eventName.equals(ViewportRanges.STARTRESANDSEQ))
-    // {
-    // // Make sure we're not trying to draw a panel
-    // // larger than the visible window
-    // if (eventName.equals(ViewportRanges.STARTRES))
-    // {
-    // scrollX = (int) evt.getNewValue() - (int) evt.getOldValue();
-    // }
-    // else
-    // {
-    // scrollX = ((int[]) evt.getNewValue())[0]
-    // - ((int[]) evt.getOldValue())[0];
-    // }
-    // ViewportRanges vpRanges = av.getRanges();
-    //
-    // int range = vpRanges.getEndRes() - vpRanges.getStartRes() + 1;
-    // if (scrollX > range)
-    // {
-    // scrollX = range;
-    // }
-    // else if (scrollX < -range)
-    // {
-    // scrollX = -range;
-    // }
-    // }
+      int range = vpRanges.getEndRes() - vpRanges.getStartRes() + 1;
+      if (scrollX > range)
+      {
+        scrollX = range;
+      }
+      else if (scrollX < -range)
+      {
+        scrollX = -range;
+      }
+    }
     // Both scrolling and resizing change viewport ranges: scrolling changes
     // both start and end points, but resize only changes end values.
     // Here we only want to fastpaint on a scroll, with resize using a normal
     // paint, so scroll events are identified as changes to the horizontal or
     // vertical start value.
-    // BH 2019.07.27 was:
-    // if (eventName.equals(ViewportRanges.STARTRES))
-    // {
-    // if (av.getWrapAlignment())
-    // {
-    // fastPaintWrapped(scrollX);
-    // }
-    // else
-    // {
-    // fastPaint(scrollX, 0);
-    // }
-    // }
-    // else if (eventName.equals(ViewportRanges.STARTSEQ))
-    // {
-    // // scroll
-    // fastPaint(0, (int) evt.getNewValue() - (int) evt.getOldValue());
-    // }
-    // else if (eventName.equals(ViewportRanges.STARTRESANDSEQ))
-    // {
-    // if (av.getWrapAlignment())
-    // {
-    // fastPaintWrapped(scrollX);
-    // }
-    // else
-    // {
-    // fastPaint(scrollX, 0);
-    // }
-    // }
-    //
-    // BH oops!
-    //
-    // else if (eventName.equals(ViewportRanges.STARTSEQ))
-    // {
-    // // scroll
-    // fastPaint(0, (int) evt.getNewValue() - (int) evt.getOldValue());
-    // }
-    // else if (eventName.equals(ViewportRanges.STARTRESANDSEQ))
-    // {
-    // if (av.getWrapAlignment())
-    // {
-    // fastPaintWrapped(scrollX);
-    // }
-    // }
+    if (eventName.equals(ViewportRanges.STARTRES))
+    {
+      if (av.getWrapAlignment())
+      {
+        fastPaintWrapped(scrollX);
+      }
+      else
+      {
+        fastPaint(scrollX, 0);
+      }
+    }
+    else if (eventName.equals(ViewportRanges.STARTSEQ))
+    {
+      // scroll
+      fastPaint(0, (int) evt.getNewValue() - (int) evt.getOldValue());
+    }
+    else if (eventName.equals(ViewportRanges.STARTRESANDSEQ))
+    {
+      if (av.getWrapAlignment())
+      {
+        fastPaintWrapped(scrollX);
+      }
+      else
+      {
+        fastPaint(scrollX, 0);
+      }
+    }
+    else if (eventName.equals(ViewportRanges.STARTSEQ))
+    {
+      // scroll
+      fastPaint(0, (int) evt.getNewValue() - (int) evt.getOldValue());
+    }
+    else if (eventName.equals(ViewportRanges.STARTRESANDSEQ))
+    {
+      if (av.getWrapAlignment())
+      {
+        fastPaintWrapped(scrollX);
+      }
+    }
   }
 
   /**