fa8c6c2c8140538f014381e43421163cc6c7eb98 kate Wed Jan 31 15:22:00 2018 -0800 Flesh out details page for interact track. refs #17512 diff --git src/hg/hgTracks/interactTrack.c src/hg/hgTracks/interactTrack.c index 3e0afb9..6ad7e43 100644 --- src/hg/hgTracks/interactTrack.c +++ src/hg/hgTracks/interactTrack.c @@ -30,40 +30,30 @@ 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; //uglyf("IN color=%X", hvGfxFindColorIx(hvg, itemRgb.r, itemRgb.g, itemRgb.b)); return hvGfxFindColorIx(hvg, itemRgb.r, itemRgb.g, itemRgb.b); } void interactLoadItems(struct track *tg) /* Load all interact items in region */ { loadSimpleBedWithLoader(tg, (bedItemLoader)interactLoad); } -char *getOtherChrom(struct interact *inter) -/* Get other chromosome from an interaaction. Return NULL if same chromosome */ -{ -if (sameString(inter->sourceChrom, inter->targetChrom)) - return NULL; -if (inter->chromStart == inter->sourceStart) - return cloneString(inter->targetChrom); -return cloneString(inter->sourceChrom); -} - static void interactDrawItems(struct track *tg, int seqStart, int seqEnd, struct hvGfx *hvg, int xOff, int yOff, int width, MgFont *font, Color color, enum trackVisibility vis) /* Draw a list of interact structures. */ { #define DRAW_LINE 0 #define DRAW_CURVE 1 #define DRAW_ELLIPSE 2 char *drawMode = cartUsualStringClosestToHome(cart, tg->tdb, FALSE, INTERACT_DRAW, INTERACT_DRAW_DEFAULT); int draw = DRAW_LINE; if (sameString(drawMode, INTERACT_DRAW_CURVE)) draw = DRAW_CURVE; else if (sameString(drawMode, INTERACT_DRAW_ELLIPSE)) @@ -83,61 +73,61 @@ // Suppress interchromosomal labels if they overlap int nSame = 0, nOther = 0; int prevLabelEnd = 0, prevLabelStart = 0; char *prevLabel = 0; boolean doOtherLabels = TRUE; char *otherChrom = NULL; for (inter=inters; inter; inter=inter->next) { int width = inter->chromEnd - inter->chromStart; if (width > maxWidth) maxWidth = width; } //uglyf("Max width is %d. ", maxWidth); for (inter=inters; inter; inter=inter->next) { - otherChrom = getOtherChrom(inter); + otherChrom = interactOtherChrom(inter); if (otherChrom == NULL) nSame++; else { nOther++; if (!doOtherLabels) continue; int labelWidth = vgGetFontStringWidth(hvg->vg, font, otherChrom); // TODO: simplify now that center approach is abandoned int sx = ((inter->chromStart - seqStart) + .5) * scale + xOff; // x coord of center int labelStart = (double)sx - labelWidth/2; int labelEnd = labelStart + labelWidth - 1; if (labelStart <= prevLabelEnd && !(labelStart == prevLabelStart && labelEnd == prevLabelEnd && sameString(otherChrom, prevLabel))) doOtherLabels = FALSE; prevLabelStart = labelStart; prevLabelEnd = labelEnd; prevLabel = otherChrom; } } int fontHeight = vgGetFontPixelHeight(hvg->vg, font); int otherHeight = (nOther) ? 3 * fontHeight : 0; int sameHeight = (nSame) ? tg->height - otherHeight: 0; // Draw items //uglyf("IN seqStart=%d", seqStart); for (inter=inters; inter; inter=inter->next) { - char *otherChrom = getOtherChrom(inter); + 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); //uglyf("statusBuf: %s. ", statusBuf); 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) {