6e60e7d3ae54dab60eb8c7ad1af02441266729c3 kate Mon Aug 13 15:24:08 2018 -0700 Expanding interactDirectional to allow source or target offset display. refs #21109 diff --git src/hg/hgTracks/interactTrack.c src/hg/hgTracks/interactTrack.c index 688a982..e667d78 100644 --- src/hg/hgTracks/interactTrack.c +++ src/hg/hgTracks/interactTrack.c @@ -169,48 +169,48 @@ int sourceCenter = 0, targetCenter = 0; interactRegionCenters(inter, &sourceCenter, &targetCenter); return abs(targetCenter - sourceCenter); } int getX(int pos, int seqStart, double scale, int xOff) /* Get x coordinate of a genomic location. Return -1 if off-screen */ { if (pos < seqStart) return -1; return ((double)(pos - seqStart + .5) * scale) + xOff; } struct interactTrackInfo { boolean isDirectional; // source and target are distinct item types - boolean isOffset; // source and target ends are on different horizontals + char *offset; // which end to draw offset (source or target) boolean doOtherLabels; // true to suppress labels on other chrom items (prevent overlap) int maxSize; // longest interaction (midpoint to midpoint) in bp int fontHeight; int sameCount; // number of same chromosome interactions in window int sameHeight; // vertical space for same chromosome interactions int otherCount; // number of other chromosome interactions in window int otherHeight; // vertical space for other chromosome interactions } interactTrackInfo; struct interactTrackInfo *interactGetTrackInfo(struct track *tg, int seqStart, struct hvGfx *hvg, int xOff, MgFont *font, double scale) /* Get layout info from interact items in window */ { struct interactTrackInfo *tInfo = NULL; AllocVar(tInfo); tInfo->doOtherLabels = TRUE; tInfo->isDirectional = interactUiDirectional(tg->tdb); -tInfo->isOffset = interactUiOffset(tg->tdb); +tInfo->offset = interactUiOffset(tg->tdb); char *otherChrom = NULL; int prevLabelEnd = 0, prevLabelStart = 0; char *prevLabel = 0; struct interact *inter; for (inter = (struct interact *)tg->items; inter; inter = inter->next) { otherChrom = interactOtherChrom(inter); if (otherChrom == NULL) { tInfo->sameCount++; // determine maximum interaction size, for later use laying out 'peaks' int size = interactSize(inter); if (size > tInfo->maxSize) @@ -378,31 +378,32 @@ // NOTE: until time permits, force to rectangle when in reversed strand mode. if (sOnScreen) { // draw foot of source region (2 pixels high) hvGfxBox(hvg, sX - sWidth, yOff, sWidth + sWidth + 1, 2, color); if (vis == tvDense || !tOnScreen || draw == DRAW_LINE || hvg->rc) { // draw vertical if (isReversed) hvGfxDottedLine(hvg, sX, yOff, sX, peak, color, TRUE); else hvGfxLine(hvg, sX, yOff, sX, peak, color); } } - int yOffTarget = (tInfo->isOffset ? yOff + tg->height/20 + 1 : yOff); + int yOffTarget = (tInfo->offset && sameString(tInfo->offset, INTERACT_OFFSET_TARGET)? + yOff + tg->height/20 + 1 : yOff); if (tOnScreen) { // draw foot of target region (2 pixels high) hvGfxBox(hvg, tX - tWidth, yOffTarget, tWidth + tWidth + 1, 2, color); if (vis == tvDense || !sOnScreen || draw == DRAW_LINE || hvg->rc) { // draw vertical if (isReversed) hvGfxDottedLine(hvg, tX, yOffTarget, tX, peak, color, TRUE); else hvGfxLine(hvg, tX, yOffTarget, tX, peak, color); } } if (vis == tvDense) continue;