JAL-2665 Refactoring (and side-effect fix for JAL-2672)
authorkiramt <k.mourao@dundee.ac.uk>
Fri, 18 Aug 2017 08:03:44 +0000 (09:03 +0100)
committerkiramt <k.mourao@dundee.ac.uk>
Fri, 18 Aug 2017 08:03:44 +0000 (09:03 +0100)
src/jalview/gui/SeqCanvas.java

index fb6a10b..d5b27f8 100755 (executable)
@@ -79,6 +79,8 @@ public class SeqCanvas extends JComponent implements ViewportListenerI
 
   boolean fastpainting = false;
 
+  AnnotationPanel annotations;
+
   /**
    * Creates a new SeqCanvas object.
    * 
@@ -738,8 +740,6 @@ public class SeqCanvas extends JComponent implements ViewportListenerI
     }
   }
 
-  AnnotationPanel annotations;
-
   int getAnnotationHeight()
   {
     if (!av.isShowAnnotation())
@@ -908,12 +908,7 @@ public class SeqCanvas extends JComponent implements ViewportListenerI
     // ///////////////////////////////////
 
     SequenceGroup group = null;
-
-    int sx = -1;
-    int sy = -1;
-    int ex = -1;
     int groupIndex = -1;
-    int visWidth = (endRes - startRes + 1) * charWidth;
 
     if (av.getAlignment().getGroups().size() > 0)
     {
@@ -928,151 +923,9 @@ public class SeqCanvas extends JComponent implements ViewportListenerI
       
       do
       {
+        drawPartialGroupOutline(g, group, startRes, endRes, startSeq,
+                endSeq, offset);
         
-        // drawSelectionGroupPart(g, group, startRes, endRes, startSeq,
-        // endSeq,offset);
-        int oldY = -1;
-        int i = 0;
-        boolean inGroup = false;
-        int top = -1;
-        int bottom = -1;
-
-        for (i = startSeq; i <= endSeq; i++)
-        {
-          // position of start residue of group relative to startRes, in pixels
-          sx = (group.getStartRes() - startRes) * charWidth;
-          sy = offset + ((i - startSeq) * charHeight);
-          // width of group in pixels
-          ex = (((group.getEndRes() + 1) - group.getStartRes()) * charWidth)
-                  - 1;
-
-          if (sx + ex < 0 || sx > visWidth)
-          {
-            continue;
-          }
-
-          if ((sx <= (endRes - startRes) * charWidth)
-                  && group.getSequences(null).contains(
-                          av.getAlignment().getSequenceAt(i)))
-          {
-            if ((bottom == -1)
-                    && !group.getSequences(null).contains(
-                            av.getAlignment().getSequenceAt(i + 1)))
-            {
-              bottom = sy + charHeight;
-            }
-
-            if (!inGroup)
-            {
-              if (((top == -1) && (i == 0))
-                      || !group.getSequences(null).contains(
-                              av.getAlignment().getSequenceAt(i - 1)))
-              {
-                top = sy;
-              }
-
-              oldY = sy;
-              inGroup = true;
-
-              g.setStroke(new BasicStroke());
-              g.setColor(group.getOutlineColour());
-            }
-          }
-          else
-          {
-            if (inGroup)
-            {
-              // if start position is visible, draw vertical line to left of
-              // group
-              if (sx >= 0 && sx < visWidth)
-              {
-                g.drawLine(sx, oldY, sx, sy);
-              }
-
-              // if end position is visible, draw vertical line to right of
-              // group
-              if (sx + ex < visWidth)
-              {
-                g.drawLine(sx + ex, oldY, sx + ex, sy);
-              }
-
-              if (sx < 0)
-              {
-                ex += sx;
-                sx = 0;
-              }
-
-              if (sx + ex > visWidth)
-              {
-                ex = visWidth;
-              }
-              else if (sx + ex >= (endRes - startRes + 1) * charWidth)
-              {
-                ex = (endRes - startRes + 1) * charWidth;
-              }
-
-              // draw horizontal line at top of group
-              if (top != -1)
-              {
-                g.drawLine(sx, top, sx + ex, top);
-                top = -1;
-              }
-
-              // draw horizontal line at bottom of group
-              if (bottom != -1)
-              {
-                g.drawLine(sx, bottom, sx + ex, bottom);
-                bottom = -1;
-              }
-
-              inGroup = false;
-            }
-          }
-        }
-
-        if (inGroup)
-        {
-          sy = offset + ((i - startSeq) * charHeight);
-          if (sx >= 0 && sx < visWidth)
-          {
-            g.drawLine(sx, oldY, sx, sy);
-          }
-
-          if (sx + ex < visWidth)
-          {
-            g.drawLine(sx + ex, oldY, sx + ex, sy);
-          }
-
-          if (sx < 0)
-          {
-            ex += sx;
-            sx = 0;
-          }
-
-          if (sx + ex > visWidth)
-          {
-            ex = visWidth;
-          }
-          else if (sx + ex >= (endRes - startRes + 1) * charWidth)
-          {
-            ex = (endRes - startRes + 1) * charWidth;
-          }
-
-          if (top != -1)
-          {
-            g.drawLine(sx, top, sx + ex, top);
-            top = -1;
-          }
-
-          if (bottom != -1)
-          {
-            g.drawLine(sx, bottom - 1, sx + ex, bottom - 1);
-            bottom = -1;
-          }
-
-          inGroup = false;
-        }
-
         groupIndex++;
 
         g.setStroke(new BasicStroke());
@@ -1156,7 +1009,7 @@ public class SeqCanvas extends JComponent implements ViewportListenerI
   {
     if (!av.hasHiddenColumns())
     {
-      drawSelectionGroupPart(g, group, startRes, endRes, startSeq, endSeq,
+      drawPartialGroupOutline(g, group, startRes, endRes, startSeq, endSeq,
               offset);
     }
     else
@@ -1181,7 +1034,7 @@ public class SeqCanvas extends JComponent implements ViewportListenerI
         blockEnd = hideStart - 1;
 
         g.translate(screenY * charWidth, 0);
-        drawSelectionGroupPart(g, group,
+        drawPartialGroupOutline(g, group,
                 blockStart, blockEnd, startSeq, endSeq, offset);
 
         g.translate(-screenY * charWidth, 0);
@@ -1200,7 +1053,7 @@ public class SeqCanvas extends JComponent implements ViewportListenerI
         // remaining visible region to render
         blockEnd = blockStart + (endRes - startRes) - screenY;
         g.translate(screenY * charWidth, 0);
-        drawSelectionGroupPart(g, group,
+        drawPartialGroupOutline(g, group,
                 blockStart, blockEnd, startSeq, endSeq, offset);
         
         g.translate(-screenY * charWidth, 0);
@@ -1211,7 +1064,7 @@ public class SeqCanvas extends JComponent implements ViewportListenerI
   /*
    * Draw the selection group as a separate image and overlay
    */
-  private void drawSelectionGroupPart(Graphics2D g, SequenceGroup group,
+  private void drawPartialGroupOutline(Graphics2D g, SequenceGroup group,
           int startRes, int endRes, int startSeq, int endSeq,
           int verticalOffset)
   {