e5a2eedb0c397971feac1ab56c8cbefe496ff309 kate Sun Jan 28 19:20:16 2018 -0800 Add track UI to change drawing mode (line, ellipse, curve). Fix to other chromosome labeling (still some probs left). refs #17512 diff --git src/hg/hgTracks/interactTrack.c src/hg/hgTracks/interactTrack.c index 88e2563..451bafa 100644 --- src/hg/hgTracks/interactTrack.c +++ src/hg/hgTracks/interactTrack.c @@ -35,35 +35,36 @@ //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); } 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. */ { -/* Choose drawing style by cart var (at least for now) */ #define DRAW_LINE 0 #define DRAW_CURVE 1 #define DRAW_ELLIPSE 2 -char *drawMode = cartUsualString(cart, "interaction", "line"); + +char *drawMode = cartUsualStringClosestToHome(cart, tg->tdb, FALSE, + INTERACT_DRAW, INTERACT_DRAW_DEFAULT); int draw = DRAW_LINE; if (sameString(drawMode, "curve")) draw = DRAW_CURVE; else if (sameString(drawMode, "ellipse")) draw = DRAW_ELLIPSE; double scale = scaleForWindow(width, seqStart, seqEnd); struct interact *inters = tg->items; //uglyf("Found %d items. ", slCount(inters)); unsigned int maxWidth = 0; struct interact *inter; char buffer[1024]; char itemBuf[2048]; safef(buffer, sizeof buffer, "%s.%s", tg->tdb->track, INTERACT_MINSCORE); //double minScore = sqlDouble(cartUsualString(cart, buffer, INTERACT_DEFMINSCORE)); @@ -80,33 +81,32 @@ if (width > maxWidth) maxWidth = width; } //uglyf("Max width is %d. ", maxWidth); for (inter=inters; inter; inter=inter->next) { if (sameString(inter->chrom1, inter->chrom2)) nSame++; else { nOther++; if (!doOtherLabels) continue; int labelWidth = vgGetFontStringWidth(hvg->vg, font, inter->chrom2); // TODO: simplify now that center approach is abandoned - int s = (inter->chromEnd1 - inter->chromStart1 + .5) / 2; - int sx = ((s - seqStart) + .5) * scale + xOff; // x coord of center - int labelStart = sx - labelWidth/2; + int sx = ((inter->chromStart1 - 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(inter->chrom1, prevLabel))) doOtherLabels = FALSE; prevLabelStart = labelStart; prevLabelEnd = labelEnd; prevLabel = inter->chrom2; } } int fontHeight = vgGetFontPixelHeight(hvg->vg, font); int otherHeight = (nOther) ? 3 * fontHeight : 0; int sameHeight = (nSame) ? tg->height - otherHeight: 0; // Draw items @@ -183,32 +183,33 @@ yPos = yOffOther + height; // draw the foot int footWidth = sFootWidth; hvGfxLine(hvg, sx - footWidth, yOffOther, sx + footWidth, yOffOther, color); // draw the vertical if (inter->strand[0] == '+') hvGfxLine(hvg, sx, yOffOther, sx, yPos, color); else hvGfxDottedLine(hvg, sx, yOffOther, sx, yPos, color); if (tg->visibility == tvFull) { mapBoxHgcOrHgGene(hvg, s, s, sx - 2, yOffOther, 4, height, tg->track, itemBuf, statusBuf, NULL, TRUE, NULL); + safef(buffer, sizeof buffer, "%s", inter->strand[0] == '+' ? + inter->chrom2 : inter->chrom1); - safef(buffer, sizeof buffer, "%s", inter->chrom2); if (doOtherLabels) { hvGfxTextCentered(hvg, sx, yPos + 2, 4, 4, MG_BLUE, font, buffer); int width = vgGetFontStringWidth(hvg->vg, font, buffer); mapBoxHgcOrHgGene(hvg, s, s, sx - width/2, yPos, width, fontHeight, tg->track, itemBuf, statusBuf, NULL, TRUE, NULL); } } continue; } // draw same chromosome interaction boolean sOnScreen = (s >= seqStart) && (s < seqEnd); boolean eOnScreen = (e >= seqStart) && (e < seqEnd); //uglyf("
IN s=%d, e=%d, sOn: %d, eOn: %d. ", s, e, sOnScreen, eOnScreen);