e5244b1de921b0252f9e62b383b06be78ec140a6 kate Fri Mar 9 10:53:48 2018 -0800 Additional detail on dense mode: highlight cross-chrom items by coloring magenta. refs #17512 diff --git src/hg/hgTracks/interactTrack.c src/hg/hgTracks/interactTrack.c index 2b5f8bc..34f6481 100644 --- src/hg/hgTracks/interactTrack.c +++ src/hg/hgTracks/interactTrack.c @@ -12,30 +12,31 @@ /* calculate height of all the interactions being displayed */ { if ( tg->visibility == tvDense) return tl.fontHeight; int min, max, deflt, current; cartTdbFetchMinMaxPixels(cart, tg->tdb, INTERACT_MINHEIGHT, INTERACT_MAXHEIGHT, atoi(INTERACT_DEFHEIGHT), &min, &max, &deflt, ¤t); return tg->height = current; } static Color interactItemColor(struct track *tg, void *item, struct hvGfx *hvg) /* Return color to draw an interaction */ { struct interact *inter = item; + struct rgbColor itemRgb; // There must be a better way... itemRgb.r = (inter->color & 0xff0000) >> 16; itemRgb.g = (inter->color & 0xff00) >> 8; itemRgb.b = inter->color & 0xff; return hvGfxFindColorIx(hvg, itemRgb.r, itemRgb.g, itemRgb.b); } void interactLoadItems(struct track *tg) /* Load all interact items in region */ { loadSimpleBedWithLoader(tg, (bedItemLoader)interactLoad); } static void interactDrawItems(struct track *tg, int seqStart, int seqEnd, @@ -107,30 +108,33 @@ int fontHeight = vgGetFontPixelHeight(hvg->vg, font); int otherHeight = (nOther) ? 3 * fontHeight : 0; int sameHeight = (nSame) ? tg->height - otherHeight: 0; // Draw items for (inter=inters; inter; inter=inter->next) { char *otherChrom = interactOtherChrom(inter); safef(itemBuf, sizeof itemBuf, "%s", inter->name); struct dyString *ds = dyStringNew(0); dyStringPrintf(ds, "%s", inter->name); if (inter->score) dyStringPrintf(ds, " %d", inter->score); char *statusBuf = dyStringCannibalize(&ds); + if (vis == tvDense && interactOtherChrom(inter)) + color = MG_MAGENTA; + else color = interactItemColor(tg, inter, hvg); // TODO: simplify by using start/end instead of center and width // This is a holdover from longRange track implementation unsigned lowStart, lowEnd, highStart, highEnd; if (otherChrom) { lowStart = highStart = inter->chromStart; lowEnd = highEnd = inter->chromEnd; } else if (inter->sourceStart < inter->targetStart) { lowStart = inter->sourceStart; lowEnd = inter->sourceEnd; highStart = inter->targetStart;