86ff9edc290b0762ee118cf6e21376c049a08c53 tdreszer Tue Aug 9 15:22:47 2011 -0700 Some dragScroll >1x only changes, ifdef'd out. Debugging these was very helpful in finding some obscure cases in true 1x scrolling which we are intending to release soon. diff --git src/hg/hgTracks/variation.c src/hg/hgTracks/variation.c index 686ce5e..96f3e94 100644 --- src/hg/hgTracks/variation.c +++ src/hg/hgTracks/variation.c @@ -1158,102 +1158,130 @@ if (tg->drawName && vis != tvSquish) mapBoxHc(hvg, s->chromStart, s->chromEnd, x1, y, w, heightPer, tg->track, tg->mapItemName(tg, s), NULL); } static void snpMapDrawItems(struct track *tg, int seqStart, int seqEnd, struct hvGfx *hvg, int xOff, int yOff, int width, MgFont *font, Color color, enum trackVisibility vis) /* Draw snpMap items. */ { double scale = scaleForPixels(width); int lineHeight = tg->lineHeight; int heightPer = tg->heightPer; int w, y; boolean withLabels = (withLeftLabels && vis == tvPack && !tg->drawName); +#if defined(IMAGEv2_DRAG_SCROLL_SZ) && (IMAGEv2_DRAG_SCROLL_SZ > 1) +if (theImgBox != NULL) + withLabels = (withLeftLabels && (vis == tvPack || vis == tvFull) && !tg->drawName); +#endif /// defined(IMAGEv2_DRAG_SCROLL_SZ) && (IMAGEv2_DRAG_SCROLL_SZ > 1) if (!tg->drawItemAt) errAbort("missing drawItemAt in track %s", tg->track); if (vis == tvPack || vis == tvSquish) { struct spaceSaver *ss = tg->ss; struct spaceNode *sn = NULL; hvGfxSetClip(hvg, insideX, yOff, insideWidth, tg->height); for (sn = ss->nodeList; sn != NULL; sn = sn->next) { struct slList *item = sn->val; int s = tg->itemStart(tg, item); int e = tg->itemEnd(tg, item); int x1 = round((s - winStart)*scale) + xOff; int x2 = round((e - winStart)*scale) + xOff; int textX = x1; char *name = tg->itemName(tg, item); Color itemColor = tg->itemColor(tg, item, hvg); Color itemNameColor = tg->itemNameColor(tg, item, hvg); y = yOff + lineHeight * sn->row; tg->drawItemAt(tg, item, hvg, xOff, y, scale, font, itemColor, vis); if (withLabels) { int nameWidth = mgFontStringWidth(font, name); int dotWidth = tl.nWidth/2; textX -= nameWidth + dotWidth; + #if defined(IMAGEv2_DRAG_SCROLL_SZ) && (IMAGEv2_DRAG_SCROLL_SZ > 1) + if (theImgBox == NULL && textX < insideX) + #else///if !defined(IMAGEv2_DRAG_SCROLL_SZ) || (IMAGEv2_DRAG_SCROLL_SZ <= 1) if (textX < insideX) /* Snap label to the left. */ + #endif /// !defined(IMAGEv2_DRAG_SCROLL_SZ) || (IMAGEv2_DRAG_SCROLL_SZ <= 1) { textX = leftLabelX; assert(hvgSide != NULL); hvGfxUnclip(hvgSide); hvGfxSetClip(hvgSide, leftLabelX, yOff, insideWidth, tg->height); hvGfxTextRight(hvgSide, leftLabelX, y, leftLabelWidth-1, heightPer, itemNameColor, font, name); hvGfxUnclip(hvgSide); hvGfxSetClip(hvgSide, insideX, yOff, insideWidth, tg->height); } else hvGfxTextRight(hvg, textX, y, nameWidth, heightPer, itemNameColor, font, name); } if (!tg->mapsSelf && ( ( w = x2-textX ) > 0 )) mapBoxHgcOrHgGene(hvg, s, e, textX, y, w, heightPer, tg->track, tg->mapItemName(tg, item), name, NULL, FALSE, NULL); } hvGfxUnclip(hvg); } else { struct slList *item; y = yOff; for (item = tg->items; item != NULL; item = item->next) { Color itemColor = tg->itemColor(tg, item, hvg); tg->drawItemAt(tg, item, hvg, xOff, y, scale, font, itemColor, vis); if (vis == tvFull) + { + #if defined(IMAGEv2_DRAG_SCROLL_SZ) && (IMAGEv2_DRAG_SCROLL_SZ > 1) + if (theImgBox != NULL) // In dragScroll >1x item labels cannot be in leftLabel + { // So they appear here in the image, just like in pack + int s = tg->itemStart(tg, item); + int textX = round((s - winStart)*scale) + xOff; + if (textX >= insideX) + { + char *name = tg->itemName(tg, item); + int nameWidth = mgFontStringWidth(font, name); + Color itemNameColor = tg->itemNameColor(tg, item, hvg); + hvGfxTextRight(hvg, textX, y, nameWidth, heightPer, itemNameColor, font, name); + } + } + #endif /// defined(IMAGEv2_DRAG_SCROLL_SZ) && (IMAGEv2_DRAG_SCROLL_SZ > 1) y += lineHeight; } } } +} static void snpDrawItems(struct track *tg, int seqStart, int seqEnd, struct hvGfx *hvg, int xOff, int yOff, int width, MgFont *font, Color color, enum trackVisibility vis) /* Draw snp items. */ { double scale = scaleForPixels(width); int lineHeight = tg->lineHeight; int heightPer = tg->heightPer; int y, w; boolean withLabels = (withLeftLabels && vis == tvPack && !tg->drawName); +#if defined(IMAGEv2_DRAG_SCROLL_SZ) && (IMAGEv2_DRAG_SCROLL_SZ > 1) +if (theImgBox != NULL) + withLabels = (withLeftLabels && (vis == tvPack || tvFull) && !tg->drawName); +#endif /// defined(IMAGEv2_DRAG_SCROLL_SZ) && (IMAGEv2_DRAG_SCROLL_SZ > 1) snp125ColorSource = snp125ColorSourceFromCart(cart, tg->tdb); if (!tg->drawItemAt) errAbort("missing drawItemAt in track %s", tg->track); if (vis == tvPack || vis == tvSquish) { struct spaceSaver *ss = tg->ss; struct spaceNode *sn = NULL; hvGfxSetClip(hvg, insideX, yOff, insideWidth, tg->height); for (sn = ss->nodeList; sn != NULL; sn = sn->next) { struct slList *item = sn->val; int s = tg->itemStart(tg, item); int e = tg->itemEnd(tg, item); int x1 = round((s - winStart)*scale) + xOff; @@ -1262,31 +1290,35 @@ char *name = tg->itemName(tg, item); Color itemColor = tg->itemColor(tg, item, hvg); Color itemNameColor = tg->itemNameColor(tg, item, hvg); boolean drawNameInverted = FALSE; y = yOff + lineHeight * sn->row; tg->drawItemAt(tg, item, hvg, xOff, y, scale, font, itemColor, vis); if (withLabels) { int nameWidth = mgFontStringWidth(font, name); int dotWidth = tl.nWidth/2; boolean snapLeft = FALSE; drawNameInverted = highlightItem(tg, item); textX -= nameWidth + dotWidth; snapLeft = (textX < insideX); - if (snapLeft) /* Snap label to the left. */ + #if defined(IMAGEv2_DRAG_SCROLL_SZ) && (IMAGEv2_DRAG_SCROLL_SZ > 1) + if (theImgBox == NULL && snapLeft) + #else///if !defined(IMAGEv2_DRAG_SCROLL_SZ) || (IMAGEv2_DRAG_SCROLL_SZ <= 1) + if (snapLeft) + #endif /// !defined(IMAGEv2_DRAG_SCROLL_SZ) || (IMAGEv2_DRAG_SCROLL_SZ <= 1) { textX = leftLabelX; assert(hvgSide != NULL); hvGfxUnclip(hvgSide); hvGfxSetClip(hvgSide, leftLabelX, yOff, insideWidth, tg->height); if (drawNameInverted) { int boxStart = leftLabelX + leftLabelWidth - 2 - nameWidth; hvGfxBox(hvgSide, boxStart, y, nameWidth+1, heightPer - 1, color); hvGfxTextRight(hvgSide, leftLabelX, y, leftLabelWidth-1, heightPer, MG_WHITE, font, name); } else hvGfxTextRight(hvgSide, leftLabelX, y, leftLabelWidth-1, heightPer, itemNameColor, font, name);