cfeb4d454d22011d7f637d060e7a51057d168504 braney Mon Mar 30 12:01:16 2026 -0700 Add color picker support for most track types, refs #20460 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c index fe94dbeaa01..cb09713e6c2 100644 --- src/hg/hgTracks/simpleTracks.c +++ src/hg/hgTracks/simpleTracks.c @@ -4188,30 +4188,31 @@ by codon, and setup if so.*/ if (vis != tvDense) { drawOpt = baseColorDrawSetup(hvg, tg, lf, &qSeq, &qOffset, &psl); if (drawOpt > baseColorDrawOff) exonArrows = FALSE; } if ((tg->tdb != NULL) && (vis != tvDense)) intronGap = atoi(trackDbSettingOrDefault(tg->tdb, "intronGap", "0")); lfColors(tg, lf, hvg, &color, &bColor); if (vis == tvDense && trackDbSetting(tg->tdb, EXP_COLOR_DENSE)) color = saveColor; color = colorFromCart(tg, color); +bColor = colorFromCart(tg, bColor); struct genePred *gp = NULL; if (startsWith("genePred", tg->tdb->type) || startsWith("bigGenePred", tg->tdb->type)) gp = (struct genePred *)(lf->original); boolean baseColorNeedsCodons = (drawOpt == baseColorDrawItemCodons || drawOpt == baseColorDrawDiffCodons || drawOpt == baseColorDrawGenomicCodons); if (psl && baseColorNeedsCodons) { boolean isXeno = ((tg->subType == lfSubXeno) || (tg->subType == lfSubChain) || startsWith("mrnaBla", tg->table)); int sizeMul = pslIsProtein(psl) ? 3 : 1; lf->codons = baseColorCodonsFromPsl(lf, psl, sizeMul, isXeno, maxShade, drawOpt, tg); } @@ -5115,52 +5116,68 @@ { pe->count = summary->validCount; pe->min = summary->minVal; pe->max = summary->maxVal; pe->sumData = summary->sumData; pe->sumSquares = summary->sumSquares; } } static void genericDrawItemsWiggle(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 linked features into a wiggle. */ { struct wigCartOptions *wigCart = tg->wigCartData; +if (wigCart == NULL) + { + int wordCount = 3; + char *words[3]; + words[0] = "bedGraph"; + wigCart = wigCartOptionsNew(cart, tg->tdb, wordCount, words); + wigCart->windowingFunction = wiggleWindowingMean; + tg->wigCartData = (void *) wigCart; + } struct preDrawContainer *pre = tg->preDrawContainer = initPreDrawContainer(insideWidth); struct trackDb *tdb = tg->tdb; boolean parentLevel = isNameAtParentLevel(tdb,tdb->track); char *autoScale = cartOptionalStringClosestToHome(cart, tdb, parentLevel, AUTOSCALE); if (autoScale == NULL) wigCart->autoScale = wiggleScaleAuto; char *windowingFunction = cartOptionalStringClosestToHome(cart, tdb, parentLevel, WINDOWINGFUNCTION); if (windowingFunction == NULL) wigCart->windowingFunction = wiggleWindowingMean; wigCart->alwaysZero = TRUE; if (tg->summary) summaryToPixels(tg->summary, pre); else { unsigned *counts = countOverlaps(tg); countsToPixels(counts, pre); freez(&counts); } tg->colorShades = shadesOfGray; +Color cartColor = colorFromCart(tg, 0); +if (cartColor) + { + tg->ixColor = cartColor; + tg->ixAltColor = cartColor; + } + hvGfxSetClip(hvg, insideX, yOff, insideWidth, tg->height); tg->mapsSelf = FALSE; // some magic to turn off the link out wigPreDrawPredraw(tg, seqStart, seqEnd, hvg, xOff, yOff, width, font, color, vis, tg->preDrawContainer, tg->preDrawContainer->preDrawZero, tg->preDrawContainer->preDrawSize, &tg->graphUpperLimit, &tg->graphLowerLimit); wigDrawPredraw(tg, seqStart, seqEnd, hvg, xOff, yOff, width, font, color, vis, tg->preDrawContainer, tg->preDrawContainer->preDrawZero, tg->preDrawContainer->preDrawSize, tg->graphUpperLimit, tg->graphLowerLimit); tg->mapsSelf = TRUE; hvGfxUnclip(hvg); } static void genericDrawItemsPackSquish(struct track *tg, int seqStart, int seqEnd, struct hvGfx *hvg, int xOff, int yOff, int width, MgFont *font, Color color, enum trackVisibility vis) /* genericDrawItems logic for pack and squish modes */ {