2c464560785805c684850c1bb05421fb72f0e994 kate Thu Jul 5 15:51:30 2018 -0700 Make grab points more visible and easier to click. refs #21109 diff --git src/hg/hgTracks/interactTrack.c src/hg/hgTracks/interactTrack.c index 153832e..06a90ff 100644 --- src/hg/hgTracks/interactTrack.c +++ src/hg/hgTracks/interactTrack.c @@ -234,35 +234,38 @@ struct interactTrackInfo *tInfo = interactGetTrackInfo(tg, seqStart, hvg, xOff, font, scale); // Get spectrum range int scoreMin = atoi(trackDbSettingClosestToHomeOrDefault(tg->tdb, "scoreMin", "0")); int scoreMax = atoi(trackDbSettingClosestToHomeOrDefault(tg->tdb, "scoreMax", "1000")); // Draw items for (inter = (struct interact *)tg->items; inter; inter = inter->next) { char *otherChrom = interactOtherChrom(inter); safef(itemBuf, sizeof itemBuf, "%s", inter->name); char *statusBuf = interactMouseover(inter, otherChrom); // Pick colors + #define MG_LIGHT_MAGENTA 0xffffbbff + #define MG_LIGHT_GRAY 0xffbbbbbb color = interactItemColor(tg, inter, hvg, scoreMin, scoreMax); if (vis == tvDense && otherChrom && color == MG_BLACK) // use highlight color for other chrom items in dense mode - color = MG_MAGENTA; - int peakColor = (color == MG_BLACK || tg->colorShades) ? MG_MAGENTA : MG_GRAY; + color = MG_LIGHT_MAGENTA; + int peakColor = (color == MG_BLACK || tg->colorShades) ? MG_LIGHT_MAGENTA : MG_LIGHT_GRAY; + if (otherChrom) { // different chromosomes // draw below same chrom items, if any int height = 0; int yOffOther = yOff; if (vis == tvDense) { height = tg->height; } else { height = tInfo->otherHeight/2; yOffOther = yOff + tInfo->sameHeight; @@ -362,102 +365,102 @@ else hvGfxLine(hvg, tX, yOff, tX, peak, color); } } if (vis == tvDense) continue; // Full mode: add map boxes and draw interaction int chromStart = inter->chromStart; int chromEnd = inter->chromEnd; char *nameBuf = NULL; if (sOnScreen) { // add map box to source region nameBuf = isEmptyTextField(inter->sourceName) ? statusBuf : inter->sourceName; - hvGfxBox(hvg, sX-1, yOff, 3, 1, peakColor); + hvGfxBox(hvg, sX-1, yOff, 3, 2, peakColor); hvGfxBox(hvg, sX, yOff, 1, 1, MG_WHITE); mapBoxHgcOrHgGene(hvg, chromStart, chromEnd, - sX - sWidth, yOff, sWidth * 2, 3, + sX - sWidth, yOff, sWidth * 2, 4, tg->track, itemBuf, nameBuf, NULL, TRUE, NULL); } if (tOnScreen) { // add map box to target region nameBuf = isEmptyTextField(inter->targetName) ? statusBuf : inter->targetName; - hvGfxBox(hvg, tX-1, yOff, 3, 1, peakColor); + hvGfxBox(hvg, tX-1, yOff, 3, 2, peakColor); hvGfxBox(hvg, tX, yOff, 1, 1, MG_WHITE); mapBoxHgcOrHgGene(hvg, chromStart, chromEnd, - tX - tWidth, yOff, tWidth * 2, 3, + tX - tWidth, yOff, tWidth * 2, 4, tg->track, itemBuf, nameBuf, NULL, TRUE, NULL); } if ((s < seqStart && t < seqStart) || (s > seqEnd && t > seqEnd)) continue; // Draw interaction and map boxes int lowerX = 0, upperX = 0; if (s < t) { lowerX = sOnScreen ? sX : xOff; upperX = tOnScreen ? tX : xOff + width; } else { lowerX = tOnScreen ? tX : xOff; upperX = sOnScreen ? sX : xOff + width; } if (draw == DRAW_LINE || !sOnScreen || !tOnScreen || hvg->rc) { // draw horizontal line between region centers at 'peak' height if (isReversed) hvGfxDottedLine(hvg, lowerX, peak, upperX, peak, color, TRUE); else hvGfxLine(hvg, lowerX, peak, upperX, peak, color); // map box on mid-point of horizontal line int xMap = lowerX + (double)(upperX-lowerX)/2; int yMap = peak-1; - hvGfxBox(hvg, xMap, peak-1, 1, 3, peakColor); + hvGfxBox(hvg, xMap-1, peak-1, 3, 3, peakColor); hvGfxBox(hvg, xMap, peak, 1, 1, MG_WHITE); - mapBoxHgcOrHgGene(hvg, chromStart, chromEnd, xMap-1, yMap, 3, 3, + mapBoxHgcOrHgGene(hvg, chromStart, chromEnd, xMap-1, yMap-1, 3, 3, tg->track, itemBuf, statusBuf, NULL, TRUE, NULL); continue; } // Draw curves if (draw == DRAW_CURVE) { int peakX = ((upperX - lowerX + 1) / 2) + lowerX; int peakY = peak + 30; // admittedly a hack (obscure how to define ypeak of curve) int maxY = hvGfxCurve(hvg, lowerX, yOff, peakX, peakY, upperX, yOff, color, isReversed); // curve drawer does not use peakY as expected, so it returns actual max Y used // draw map box on peak - hvGfxBox(hvg, peakX-1, maxY, 3, 1, peakColor); + hvGfxBox(hvg, peakX-1, maxY-1, 3, 3, peakColor); hvGfxBox(hvg, peakX, maxY, 1, 1, MG_WHITE); - mapBoxHgcOrHgGene(hvg, chromStart, chromEnd, peakX, maxY, 3, 1, + mapBoxHgcOrHgGene(hvg, chromStart, chromEnd, peakX-1, maxY-1, 3, 3, tg->track, itemBuf, statusBuf, NULL, TRUE, NULL); } else if (draw == DRAW_ELLIPSE) { int yLeft = yOff + peakHeight; int yTop = yOff - peakHeight; hvGfxEllipseDraw(hvg, lowerX, yLeft, upperX, yTop, color, ELLIPSE_BOTTOM, isReversed); // draw map box on peak int maxY = peakHeight + yOff; int peakX = ((upperX - lowerX + 1) / 2) + lowerX; - hvGfxBox(hvg, peakX-1, maxY, 3, 1, peakColor); + hvGfxBox(hvg, peakX-1, maxY-1, 3, 3, peakColor); hvGfxBox(hvg, peakX, maxY, 1, 1, MG_WHITE); - mapBoxHgcOrHgGene(hvg, chromStart, chromEnd, peakX, maxY, 3, 1, + mapBoxHgcOrHgGene(hvg, chromStart, chromEnd, peakX-1, maxY-1, 3, 3, tg->track, itemBuf, statusBuf, NULL, TRUE, NULL); } } } void interactDrawLeftLabels(struct track *tg, int seqStart, int seqEnd, struct hvGfx *hvg, int xOff, int yOff, int width, int height, boolean withCenterLabels, MgFont *font, Color color, enum trackVisibility vis) /* Override default */ { } void interactMethods(struct track *tg) /* Interact track type methods */