Merge branch 'develop' into features/JAL-4134_use_annotation_row_for_colours_and_groups
[jalview.git] / src / jalview / renderer / ContactGeometry.java
index 2eb325c..9fd4de6 100644 (file)
@@ -16,9 +16,9 @@ import jalview.renderer.ContactGeometry.contactInterval;
  */
 public class ContactGeometry
 {
-  
+
   final ContactListI contacts;
-  
+
   final int pixels_step;
 
   final double contacts_per_pixel;
@@ -29,7 +29,7 @@ public class ContactGeometry
 
   public ContactGeometry(final ContactListI contacts, int graphHeight)
   {
-    this.contacts=contacts;
+    this.contacts = contacts;
     this.graphHeight = graphHeight;
     contact_height = contacts.getContactHeight();
     // fractional number of contacts covering each pixel
@@ -70,41 +70,50 @@ public class ContactGeometry
     public final int pEnd;
 
   }
+
   /**
    * 
    * @param columnSelection
    * @param ci
-   * @param visibleOnly - when true, only test intersection of visible columns given matrix range 
-   * @return true if the range on the matrix specified by ci intersects with selected columns in the ContactListI's reference frame.
+   * @param visibleOnly
+   *          - when true, only test intersection of visible columns given
+   *          matrix range
+   * @return true if the range on the matrix specified by ci intersects with
+   *         selected columns in the ContactListI's reference frame.
    */
-  
-  boolean intersects(contactInterval ci,ColumnSelection columnSelection, HiddenColumns hiddenColumns,  boolean visibleOnly) {
+
+  boolean intersects(contactInterval ci, ColumnSelection columnSelection,
+          HiddenColumns hiddenColumns, boolean visibleOnly)
+  {
     boolean rowsel = false;
-    final int[] mappedRange = contacts.getMappedPositionsFor(ci.cStart, ci.cEnd);
-    if (mappedRange==null)
+    final int[] mappedRange = contacts.getMappedPositionsFor(ci.cStart,
+            ci.cEnd);
+    if (mappedRange == null)
     {
       return false;
     }
-    boolean containsHidden=false;
-    if (visibleOnly && hiddenColumns!=null && hiddenColumns.hasHiddenColumns())
+    for (int p = 0; p < mappedRange.length && !rowsel; p += 2)
     {
-      // TODO: turn into function on hiddenColumns and create test !!
-      Iterator<int[]> viscont = hiddenColumns
-              .getVisContigsIterator(mappedRange[0], mappedRange[1], false);
-      containsHidden = !viscont.hasNext();
-      if (!containsHidden)
+      boolean containsHidden = false;
+      if (visibleOnly && hiddenColumns != null
+              && hiddenColumns.hasHiddenColumns())
       {
-        for (int[] interval=viscont.next();viscont.hasNext();
-        rowsel |= columnSelection.intersects(interval[0],interval[1]))
-          ;
+        // TODO: turn into function on hiddenColumns and create test !!
+        Iterator<int[]> viscont = hiddenColumns.getVisContigsIterator(
+                mappedRange[p], mappedRange[p + 1], false);
+        containsHidden = !viscont.hasNext();
+        if (!containsHidden)
+        {
+          for (int[] interval = viscont.next(); viscont
+                  .hasNext(); rowsel |= columnSelection
+                          .intersects(interval[p], interval[p + 1]))
+            ;
+        }
       }
-    }
-    else
-    {
-      // if containsHidden is true mappedRange is not visible
-      if (containsHidden)
+      else
       {
-        rowsel = columnSelection.intersects(mappedRange[0], mappedRange[1]);
+        rowsel = columnSelection.intersects(mappedRange[p],
+                mappedRange[p + 1]);
       }
     }
     return rowsel;