a94b20dd5562fcdc56e25819443447699cba3361
kate
  Sun Nov 15 11:43:53 2015 -0800
Initial code for variable height layout of GTEx gene track

diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c
index 1179cad..8e8d0e1 100644
--- src/hg/hgTracks/simpleTracks.c
+++ src/hg/hgTracks/simpleTracks.c
@@ -3592,30 +3592,52 @@
     {
     if (sn->row >= overflowRow)
         {
         genericDrawOverflowItem(tg, sn, hvg, xOff, yOff, width, font, color,
                                 scale, overflowRow, firstOverflow);
         firstOverflow = FALSE;
         }
     else
         genericDrawItem(tg, sn, hvg, xOff, yOff, width, font, color, color, vis,
                         scale, withLeftLabels);
     }
 
 hvGfxUnclip(hvg);
 }
 
+void genericDrawNextItem(struct track *tg, void *item, struct hvGfx *hvg, int xOff, int y,
+                            double scale, Color color, enum trackVisibility vis)
+/* Draw next item buttons and map boxes */
+//TODO: Use this to clean up genericDrawItemsFullDense (will require wading thru ifdefs)
+{
+boolean isNextItemCompatible = nextItemCompatible(tg);
+boolean isExonNumberMapsCompatible = exonNumberMapsCompatible(tg, vis);
+if (!isNextItemCompatible && !isExonNumberMapsCompatible)
+    return;
+boolean doButtons = (isExonNumberMapsCompatible ? FALSE: TRUE);
+
+// Convert start/end coordinates to pix
+int s = tg->itemStart(tg, item);
+int e = tg->itemEnd(tg, item);
+int sClp = (s < winStart) ? winStart : s;
+int eClp = (e > winEnd)   ? winEnd   : e;
+int x1 = round((sClp - winStart)*scale) + xOff;
+int x2 = round((eClp - winStart)*scale) + xOff;
+genericDrawNextItemStuff(tg, hvg, vis, item, scale, x2, x1, -1, y, tg->heightPer, color, 
+                            doButtons); 
+}
+
 static void genericDrawItemsFullDense(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 full and dense modes */
 {
 double scale = scaleForWindow(width, seqStart, seqEnd);
 struct slList *item;
 int y = yOff;
 for (item = tg->items; item != NULL; item = item->next)
     {
     if (tg->itemColor != NULL)
         color = tg->itemColor(tg, item, hvg);
     tg->drawItemAt(tg, item, hvg, xOff, y, scale, font, color, vis);
     if (vis == tvFull)
         {