import jalview.datamodel.Annotation;
import jalview.datamodel.ColumnSelection;
import jalview.datamodel.ContactListI;
+import jalview.datamodel.ContactMatrixI;
import jalview.datamodel.ContactRange;
import jalview.datamodel.HiddenColumns;
import jalview.renderer.api.AnnotationRowRendererI;
int column;
int aaMax = aa_annotations.length - 1;
+ ContactMatrixI cm = viewport.getContactMatrix(_aa);
while (x < eRes - sRes)
{
column = sRes + x;
x++;
continue;
}
+ // ContactListI from viewport can map column -> group
+ Color gpcol = (cm==null) ? Color.white: contacts.getColourForGroup(); // cm.getColourForGroup(cm.getGroupsFor(column));
+
// feature still in development - highlight or omit regions hidden in
// the alignment - currently marks them as red rows
boolean maskHiddenCols = false;
- // TODO: pass visible column mask to the ContactGeometry object so it maps
+ // TODO: optionally pass visible column mask to the ContactGeometry object so it maps
// only visible contacts to geometry
// Bean holding mapping from contact list to pixels
+ // TODO: allow bracketing/limiting of range on contacts to render (like visible column mask but more flexible?)
+
+ // COntactListI provides mapping for column -> cm-groupmapping
final ContactGeometry cgeom = new ContactGeometry(contacts,
_aa.graphHeight);
for (int ht = y2, eht = y2
- _aa.graphHeight; ht >= eht; ht -= cgeom.pixels_step)
{
+
ContactGeometry.contactInterval ci = cgeom.mapFor(y2 - ht,
y2 - ht + cgeom.pixels_step);
// cstart = (int) Math.floor(((double) y2 - ht) * contacts_per_pixel);
boolean rowsel = false, containsHidden = false;
if (columnSelection != null)
{
- if (_aa.sequenceRef == null)
- {
- rowsel = columnSelection.intersects(ci.cStart, ci.cEnd);
- }
- else
- {
- // TODO check we have correctly mapped cstart to local sequence
- // numbering
- int s = _aa.sequenceRef.findIndex(ci.cStart);
- int e = _aa.sequenceRef.findIndex(ci.cEnd);
- if (maskHiddenCols && hasHiddenColumns)
- {
- // TODO: turn into function and create test !!
- Iterator<int[]> viscont = hiddenColumns
- .getVisContigsIterator(s, e, false);
- containsHidden = !viscont.hasNext();
- }
- if (s > 0 && s < _aa.sequenceRef.getLength())
- {
- rowsel = columnSelection.intersects(s, e);
- }
-
- }
+ rowsel = cgeom.intersects(ci, columnSelection, hiddenColumns, maskHiddenCols);
}
// TODO: show selected region
if (colsel || rowsel)
{
col = shade.hidden;
}
+ if (gpcol!=null && gpcol!=Color.white) {
+ // todo - could overlay group as a transparent rectangle ?
+ col = new Color((int)(((float)(col.getRed()+gpcol.getRed()))/2f),
+ (int)(((float)(col.getGreen()+gpcol.getGreen()))/2f),
+ (int)(((float)(col.getBlue()+gpcol.getBlue()))/2f));
+ }
g.setColor(col);
+
if (cgeom.pixels_step > 1)
{
g.fillRect(x * charWidth, ht, charWidth, 1 + cgeom.pixels_step);