- cstart = cend + 1;
- cend = (int) Math.min(contact_height, cstart + step);
- // TODO show maximum colour for range - sort of done
- // also need a 'getMaxPosForRange(start,end)'
- g.setColor(getColorForRange(min, max, contacts, cstart, cend));
+ ContactGeometry.contactInterval ci = cgeom.mapFor(y2 - ht,
+ y2 - ht + cgeom.pixels_step);
+ // cstart = (int) Math.floor(((double) y2 - ht) * contacts_per_pixel);
+ // cend = (int) Math.min(contact_height,
+ // Math.ceil(cstart + contacts_per_pixel * pixels_step));
+
+ Color col;
+ 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);
+ }
+
+ }
+ }
+ // TODO: show selected region
+ if (colsel || rowsel)
+ {
+
+ col = getSelectedColorForRange(min, max, contacts, ci.cStart,
+ ci.cEnd);
+ if (colsel && rowsel)
+ {
+ col = new Color(col.getBlue(), col.getGreen(), col.getRed());
+ }
+ else
+ {
+ col = new Color(col.getBlue(), col.getBlue(), col.getBlue());
+ }
+ }
+ else
+ {
+ col = getColorForRange(min, max, contacts, ci.cStart, ci.cEnd);
+ }
+ if (containsHidden)
+ {
+ 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);