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/bedTrack.c src/hg/hgTracks/bedTrack.c
index d6bb32fba3b..8a443b7f6ec 100644
--- src/hg/hgTracks/bedTrack.c
+++ src/hg/hgTracks/bedTrack.c
@@ -676,41 +676,40 @@
         }
     }
 
 slReverse(&lfList);
 if(tg->extraUiData)
     filterBed(tg, &lfList);
 slSort(&lfList, linkedFeaturesCmp);
 tg->items = lfList;
 filterItemsOnNames(tg);
 maybeLoadSnake(tg);   // if we're in snake mode, change the methods
 }
 
 Color colorFromCart(struct track *tg, Color color)
 /* Return the RGB color from the cart setting 'colorOverride' or just return color */
 {
-char varName[1024];
-safef(varName, sizeof(varName), "%s.%s", tg->tdb->track, "colorOverride");
-char *hexColorStr = cartOptionalString(cart, varName);
+char *hexColorStr = cartOptionalStringClosestToHome(cart, tg->tdb, FALSE, "colorOverride");
 if (hexColorStr==NULL || isEmpty(hexColorStr))
     return color;
 if (hexColorStr[0]=='#')
     hexColorStr++;
 if (strlen(hexColorStr)!=6)
     return color;
 long rgb = strtol(hexColorStr,NULL,16); // Big and little Endians
 tg->itemColor = NULL;
+tg->itemNameColor = NULL;
 return MAKECOLOR_32( ((rgb>>16)&0xff), ((rgb>>8)&0xff), (rgb&0xff) );
 }
 
 void bedDrawSimpleAt(struct track *tg, void *item,
 	struct hvGfx *hvg, int xOff, int y,
 	double scale, MgFont *font, Color color, enum trackVisibility vis)
 /* Draw a single simple bed item at position. */
 {
 struct bed *bed = item;
 int heightPer = tg->heightPer;
 int s = max(bed->chromStart, winStart), e = min(bed->chromEnd, winEnd);
 if (s > e)
     return;
 int x1 = round((s-winStart)*scale) + xOff;
 int x2 = round((e-winStart)*scale) + xOff;