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 */
 {