34a45f462f1b0e73015f60354ded50644bf629b7
braney
  Wed Apr 15 13:03:18 2026 -0700
Apply colorOverride to track labels; add right-click "Change Track Color" dialog, refs #20460

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

diff --git src/hg/hgTracks/imageV2.c src/hg/hgTracks/imageV2.c
index ca7adb0023d..70da15c4437 100644
--- src/hg/hgTracks/imageV2.c
+++ src/hg/hgTracks/imageV2.c
@@ -302,30 +302,47 @@
     jsonObjectAdd(ele, "url", newJsonString(trackDbSetting(track->tdb, "url")));
 
 // Close with some standard vars
 jsonObjectAdd(ele, "shortLabel", newJsonString(track->shortLabel));
 jsonObjectAdd(ele, "longLabel", newJsonString(track->longLabel));
 jsonObjectAdd(ele, "canPack", newJsonNumber(track->canPack));
 
 if (track->limitedVis != track->visibility)
     jsonObjectAdd(ele, "limitedVis", newJsonNumber(track->limitedVis));
 jsonObjectAdd(ele, "visibility", newJsonNumber(track->visibility));
 
 if (trackDbSetting(track->tdb, "onlyVisibility"))
     {
     jsonObjectAdd(ele, "onlyVisibility", newJsonString(trackDbSetting(track->tdb, "onlyVisibility")));
     }
+
+// Color override support for right-click color picker
+if (cfgOptionBooleanDefault("showColorPicker", FALSE))
+    {
+    char defaultColor[16];
+    safef(defaultColor, sizeof(defaultColor), "#%02x%02x%02x",
+          track->color.r, track->color.g, track->color.b);
+    jsonObjectAdd(ele, "defaultColor", newJsonString(defaultColor));
+    char varName[1024];
+    safef(varName, sizeof(varName), "%s.colorOverride", track->track);
+    char *overrideColor = cartOptionalString(cart, varName);
+    if (isNotEmpty(overrideColor))
+        jsonObjectAdd(ele, "colorOverride", newJsonString(overrideColor));
+    safef(varName, sizeof(varName), "%s.colorOverrideOn", track->track);
+    if (cartUsualBoolean(cart, varName, FALSE))
+        jsonObjectAdd(ele, "colorOverrideOn", newJsonBoolean(TRUE));
+    }
 }
 
 void jsonTdbSettingsUse(struct jsonElement *settings)
 {
 // add the settings to the hgTracks output object
 jsonObjectAdd(jsonForClient, "trackDb", (struct jsonElement *) settings);
 }
 
 /////////////////////////
 // IMAGEv2
 // The new way to do images: PLEASE REFER TO imageV2.h FOR A DETAILED DESCRIPTION
 /////////////////////////