b8180d9f6d41dc708a2f249ba892cbca311e7a06
jcasper
  Mon Feb 27 11:38:55 2023 -0800
Adding transparency support for colors refs #30569

diff --git src/hg/lib/hui.c src/hg/lib/hui.c
index 4a044c6..18e4bd9 100644
--- src/hg/lib/hui.c
+++ src/hg/lib/hui.c
@@ -454,38 +454,32 @@
 #endif
 
 // write to trash file and custom track
 int regionCount = 0;
 while (lineFileChopNext(lf, words, bedSize))
     {
     region = bedLoadN(words, bedSize);
     if (bedSize < 9)
         {
         // assign alternating light/dark color
         color = doLightColor ? colorLight : colorDark;
         doLightColor = !doLightColor;
         }
     else
         {
-        // no lib ? sigh
-        int colorIx = (int)region->itemRgb;
-        struct rgbColor rgb = colorIxToRgb(colorIx);
-        safef(userColor, sizeof userColor, "%d,%d,%d", rgb.b, rgb.g, rgb.r);
-
-        // or this ? -- uglier but deeper in code
-        //safef(userColor, sizeof userColor, "%d,%d,%d", (region->itemRgb & 0xff0000) >> 16,
-            //(region->itemRgb & 0xff00) >> 8, (region->itemRgb & 0xff));
+        struct rgbColor rgb = bedColorToRgb(region->itemRgb);
+        safef(userColor, sizeof userColor, "%d,%d,%d", rgb.r, rgb.g, rgb.b);
         }
     if (bedSize < 4)
         {
         // region label based on chrom and an item number
         safef(name, sizeof name, "r%d/%s", id++, region->chrom);
         }
     else
         {
         strcpy(name, region->name);
         }
     // write to trash file
     safef(regionInfo, sizeof regionInfo, "%s\t%d\t%d\n",
                     region->chrom, region->chromStart, region->chromEnd);
     mustWrite(f, regionInfo, strlen(regionInfo));
 
@@ -3489,30 +3483,31 @@
 		*value = cloneString(membership->membership[ix]);
 	    return TRUE;
 	    }
 	}
     }
 return FALSE;
 }
 
 static char *subtrackColorToCompare(struct trackDb *subtrack)
 /* Convert RGB color to string with scaled hue, suitable for alpha sort */
 {
 struct rgbColor rgbColor;
 rgbColor.r = subtrack->colorR;
 rgbColor.g = subtrack->colorG;
 rgbColor.b = subtrack->colorB;
+rgbColor.a = 255;
 struct hslColor hslColor = mgRgbToHsl(rgbColor);
 int hue = hslColor.h * 10;
 char buf[5];
 safef(buf, 5, "%04d", hue);
 return cloneString(buf);
 }
 
 boolean subgroupFindTitle(struct trackDb *parentTdb, char *name,char **value)
 // looks for a a subgroup matching the name and returns the title if found
 {
 if (value != (void*)NULL)
     *value = NULL;
 members_t*members=subgroupMembersGet(parentTdb, name);
 //const members_t *members = membersFindByTag(parentTdb,name);
 //                           Can't use because of dimension dependence