x++;
continue;
}
- /*
- * {profile type, #values, total count, char1, pct1, char2, pct2...}
- */
+ if (_aa.sequenceRef != null)
+ {
+ // get the sequence position for the column
+ column = _aa.sequenceRef.findPosition(column) - 1;
+ }
ContactListI contacts = viewport.getContactList(_aa, column);
if (contacts == null)
{
return;
}
+ int contact_height = contacts.getContactHeight();
+ // fractional number of contacts covering each pixel
+ double contacts_per_pixel = ((double) contact_height)
+ / ((double) _aa.graphHeight);
- // cell height to render
- double scale = (_aa.graphHeight < contacts.getContactHeight()) ? 1
- : ((double) _aa.graphHeight)
- / (double) contacts.getContactHeight();
- int cstart, cend = -1;
- for (int ht = y2, eht = y2 - _aa.graphHeight; ht >= eht; ht -= scale)
+ int pixels_step;
+
+ if (contacts_per_pixel >= 1)
{
- cstart = cend + 1;
- cend = Math.max(cstart + 1, contacts.getContactHeight()
- * ((ht - y2) / _aa.graphHeight));
+ // many contacts rendered per pixel
+ pixels_step = 1;
+ }
+ else
+ {
+ // pixel height for each contact
+ pixels_step = (int) Math
+ .ceil(((double) _aa.graphHeight) / (double) contact_height);
+ }
+
+ int cstart = 0, cend;
+
+ for (int ht = y2,
+ eht = y2 - _aa.graphHeight; ht >= eht; ht -= 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));
+
// TODO show maximum colour for range - sort of done
- // also need a 'getMaxPosForRange(start,end)'
- g.setColor(getColorForRange(min, max, contacts, cstart, cend));
+ // also need a 'getMaxPosForRange(start,end)' to accurately render
+ Color col = getColorForRange(min, max, contacts, cstart, cend);
- if (scale > 1)
{
- g.fillRect(x * charWidth, ht, charWidth, 1 + (int) scale);
+ g.setColor(col);
+ }
+ if (pixels_step > 1)
+ {
+ g.fillRect(x * charWidth, ht, charWidth, 1 + pixels_step);
}
else
{
Color minColor = Color.white, maxColor = Color.magenta;
-
Color shadeFor(float min, float max, float value)
{
return jalview.util.ColorUtils.getGraduatedColour(value, 0, minColor,