8c133e4cce9a22502af7d42f478e766a491af33e tdreszer Wed Aug 3 16:13:26 2011 -0700 A more complete fix for 1X scrolling with packed sideLabels being in image. There should be 2 separate images: data and side, and I had to find all cases that write to the sideLabel. doLeftLabel() functions were easy and taken care of by passing the right image pointer. But some drawItem code also wrote to side labels and this needed a global hvgSide pointer to write to. diff --git src/hg/hgTracks/variation.c src/hg/hgTracks/variation.c index 51518b3..686ce5e 100644 --- src/hg/hgTracks/variation.c +++ src/hg/hgTracks/variation.c @@ -1189,36 +1189,37 @@ 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 (textX < insideX) /* Snap label to the left. */ { textX = leftLabelX; - hvGfxUnclip(hvg); - hvGfxSetClip(hvg, leftLabelX, yOff, insideWidth, tg->height); - hvGfxTextRight(hvg, leftLabelX, y, leftLabelWidth-1, heightPer, + assert(hvgSide != NULL); + hvGfxUnclip(hvgSide); + hvGfxSetClip(hvgSide, leftLabelX, yOff, insideWidth, tg->height); + hvGfxTextRight(hvgSide, leftLabelX, y, leftLabelWidth-1, heightPer, itemNameColor, font, name); - hvGfxUnclip(hvg); - hvGfxSetClip(hvg, insideX, yOff, insideWidth, tg->height); + 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) @@ -1264,44 +1265,45 @@ 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. */ { textX = leftLabelX; - hvGfxUnclip(hvg); - hvGfxSetClip(hvg, leftLabelX, yOff, insideWidth, tg->height); + assert(hvgSide != NULL); + hvGfxUnclip(hvgSide); + hvGfxSetClip(hvgSide, leftLabelX, yOff, insideWidth, tg->height); if (drawNameInverted) { int boxStart = leftLabelX + leftLabelWidth - 2 - nameWidth; - hvGfxBox(hvg, boxStart, y, nameWidth+1, heightPer - 1, color); - hvGfxTextRight(hvg, leftLabelX, y, leftLabelWidth-1, heightPer, + hvGfxBox(hvgSide, boxStart, y, nameWidth+1, heightPer - 1, color); + hvGfxTextRight(hvgSide, leftLabelX, y, leftLabelWidth-1, heightPer, MG_WHITE, font, name); } else - hvGfxTextRight(hvg, leftLabelX, y, leftLabelWidth-1, heightPer, + hvGfxTextRight(hvgSide, leftLabelX, y, leftLabelWidth-1, heightPer, itemNameColor, font, name); - hvGfxUnclip(hvg); - hvGfxSetClip(hvg, insideX, yOff, insideWidth, tg->height); + hvGfxUnclip(hvgSide); + hvGfxSetClip(hvgSide, insideX, yOff, insideWidth, tg->height); } else { if (drawNameInverted) { hvGfxBox(hvg, textX - 1, y, nameWidth+1, heightPer-1, color); hvGfxTextRight(hvg, textX, y, nameWidth, heightPer, MG_WHITE, font, name); } 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);